【问题标题】:How to get location of android device by its android id如何通过其 android id 获取 android 设备的位置
【发布时间】:2014-03-20 06:14:16
【问题描述】:

我是 android 新手,最近开始学习 Android,我正在尝试通过其唯一的 android id 获取任何 android 设备的位置。这样我就可以通过 GPS 或网络提供商跟踪大致或准确的位置。详细地说,每当我在我的应用程序中输入任何 Android id 时,我都可以在我的应用程序中获取设备位置。感谢您的热心帮助。

【问题讨论】:

标签: android gps geolocation google-maps-android-api-2 gprs


【解决方案1】:

我终于可以使用这段代码了:

public class MyService extends Service implements LocationListener{
String GPS_FILTER = "";
Thread triggerService;
LocationListener locationListener;
LocationManager lm;
private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meter

private static final long MINIMUM_TIME_BETWEEN_UPDATES = 1000 * 60 * 3; // 1 minute
protected LocationManager locationManager;
boolean isRunning = true;

Calendar cur_cal = Calendar.getInstance();

Location location;
double latitude; // latitude
double longitude;
UserFunctions userFunction;
private JSONObject json;
private AlertDialogManager alert = new AlertDialogManager();

private static String KEY_SUCCESS = "success";
private static String KEY_ERROR = "error";
private static String KEY_ERROR_MSG = "error_msg";
private static String KEY_FLAG = "flag";
String android_id ;
String userName;

@Override
public void onCreate() {
    // TODO Auto-generated method stub
    super.onCreate();
    Intent intent = new Intent(this, MyService.class);
    PendingIntent pintent = PendingIntent.getService(getApplicationContext(),
            0, intent, 0);
    AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

    android_id = Settings.Secure.getString(getContentResolver(),
                Settings.Secure.ANDROID_ID);
    if (getAccount() != null) {
        userName = getAccount();
    }

    GPS_FILTER = "MyGPSLocation";
    // locationManager = (LocationManager)
    // getSystemService(Context.LOCATION_SERVICE);
    // locationManager.requestLocationUpdates(
    // LocationManager.GPS_PROVIDER,
    // MINIMUM_TIME_BETWEEN_UPDATES,
    // MINIMUM_DISTANCE_CHANGE_FOR_UPDATES,
    // new MyLocationListener());
    cur_cal.setTimeInMillis(System.currentTimeMillis());
    alarm.setRepeating(AlarmManager.RTC_WAKEUP, cur_cal.getTimeInMillis(),
            60 * 1000*3, pintent);
}

@Override
public void onStart(Intent intent, int startId) {
    // TODO Auto-generated method stub
    super.onStart(intent, startId);
    //turnGPSOn();
    /*Toast.makeText(getApplicationContext(), "Hello1", Toast.LENGTH_LONG)
            .show();*/
    LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
     locationListener = new MyLocationListener();
     locationManager.requestLocationUpdates(
                LocationManager.NETWORK_PROVIDER,
                MINIMUM_TIME_BETWEEN_UPDATES,
                MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, (LocationListener) this);
     if (locationManager != null) {
            location = locationManager
                    .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
            if (location != null) {
                latitude = location.getLatitude();
                longitude = location.getLongitude();
                /*Toast.makeText(getApplicationContext(), latitude + ", ll" + longitude, Toast.LENGTH_LONG)
                .show();*/
                userFunction = new UserFunctions();
                new YourAsyncTaskLogin().execute();
            }
        }

     location =locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
            MINIMUM_TIME_BETWEEN_UPDATES, 1.0f, locationListener);

}

@Override
public void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    // removeGpsListener();
}



@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}

// private void removeGpsListener(){
// try{
// lm.removeUpdates(locationManager);
// }
// catch(Exception ex){
// System.out.println("Exception in GPSService --- "+ex);
// }
// }

private class MyLocationListener implements LocationListener {

    public void onLocationChanged(Location location) {
        postdata(location.getLatitude(), location.getLongitude());
        String message = String.format(
                "New Location \n Longitude: %1$s \n Latitude: %2$s",
                location.getLongitude(), location.getLatitude());
        /*Toast.makeText(MyService.this, message, Toast.LENGTH_LONG).show();
        turnGPSOff();*/
    }

    private void postdata(double latitude, double longitude) {
        // TODO Auto-generated method stub
        /*Toast.makeText(getApplicationContext(),
                latitude + ", " + longitude, Toast.LENGTH_LONG).show();*/
    }

    public void onStatusChanged(String s, int i, Bundle b) {
        // Toast.makeText(MyService.this, "Provider status changed",
        // Toast.LENGTH_LONG).show();
    }

    public void onProviderDisabled(String s) {
        // Toast.makeText(MyService.this,
        // "Provider disabled by the user. GPS turned off",
        // Toast.LENGTH_LONG).show();
    }

    public void onProviderEnabled(String s) {
        // Toast.makeText(MyService.this,
        // "Provider enabled by the user. GPS turned on",
        // Toast.LENGTH_LONG).show();
    }

}

public void turnGPSOn() {
    Intent intent = new Intent("android.location.GPS_ENABLED_CHANGE");
    intent.putExtra("enabled", true);
    this.sendBroadcast(intent);

    String provider = Settings.Secure.getString(getContentResolver(),
            Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
    if (!provider.contains("gps")) { // if gps is disabled
        final Intent poke = new Intent();
        poke.setClassName("com.android.settings",
                "com.android.settings.widget.SettingsAppWidgetProvider");
        poke.addCategory(Intent.CATEGORY_ALTERNATIVE);
        poke.setData(Uri.parse("3"));
        this.sendBroadcast(poke);

    }
}

// automatic turn off the gps
public void turnGPSOff() {
    String provider = Settings.Secure.getString(getContentResolver(),
            Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
    if (provider.contains("gps")) { // if gps is enabled
        final Intent poke = new Intent();
        poke.setClassName("com.android.settings",
                "com.android.settings.widget.SettingsAppWidgetProvider");
        poke.addCategory(Intent.CATEGORY_ALTERNATIVE);
        poke.setData(Uri.parse("3"));
        this.sendBroadcast(poke);
    }
}

@Override
public void onLocationChanged(Location location) {
    // TODO Auto-generated method stub

}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
    // TODO Auto-generated method stub

}

@Override
public void onProviderEnabled(String provider) {
    // TODO Auto-generated method stub

}

@Override
public void onProviderDisabled(String provider) {
    // TODO Auto-generated method stub

}


class YourAsyncTaskLogin extends AsyncTask<Void, Void, Void> {

    //private ProgressDialog _ProgressDialog;

    @Override
    protected void onPreExecute() {
        // show your dialog here

        /*_ProgressDialog = ProgressDialog.show(getApplicationContext(), "",
                "Loading", true);*/

    }

    @Override
    protected Void doInBackground(Void... params) {
        json = userFunction.sendLocations(android_id, userName,latitude+"", longitude+"");
        return null;
    }

    protected void onPostExecute(Void result) {
        try {
            Log.e("Key_Success:",
                    json.getString(KEY_SUCCESS));
            if (json.getString(KEY_SUCCESS) != null) {
                // loginErrorMsg.setText("");
                String res = json.getString(KEY_SUCCESS);

                if (Integer.parseInt(res) == 1) {



                } else {
                    // Error in login
                    // loginErrorMsg.setText("Incorrect username/password");

                    //_ProgressDialog.cancel();


                }

            } else {
                // Error in login
                // loginErrorMsg.setText("Incorrect username/password");

                //_ProgressDialog.cancel();         

            }
        } catch (JSONException e) {
            e.printStackTrace();
            Log.e("error", e.getMessage());
        }

        //_ProgressDialog.dismiss();
    }
}
public String getAccount() {
    AccountManager manager = (AccountManager) getSystemService(ACCOUNT_SERVICE);
    Account[] list = manager.getAccountsByType("com.google");
    if (list.length != 0) {
        String email = list[0].name;
        return email;
    } else {
        return null;
    }
}
}

【讨论】:

  • 感谢您发布您找到的解决方案。
【解决方案2】:

如果您想获取在其手机中安装了您的应用程序的任何设备的位置,您可以获取它, 首先,在您的应用程序中,您可以使用 memberid 将位置上传到您的服务器(您可以设置它,对于每个设备都是唯一的),每 x 次(您可以设置更新位置的次数)。 然后你可以在你的服务器上检查你的数据库在哪个设备上。

(我的建议你可以使用网络服务来更新你服务器上的数据库)

【讨论】:

  • 如何在应用未运行时将其位置从设备提交到服务器?
  • 你可以在android上写一个服务。
  • 我从中得到了一个想法,并试图通过服务做到这一点,但仍然没有得到我想要的确切东西。
  • 我仍然无法做到这一点,你能给我一个示例代码吗?
  • 我该怎么做,这是一个项目,我没时间写项目,但方法很简单,应该是服务器端项目
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-22
  • 2015-06-12
  • 1970-01-01
  • 2015-09-27
  • 1970-01-01
  • 1970-01-01
  • 2013-02-06
相关资源
最近更新 更多