如何通过其 android id 获取 android 设备的位置 [英] How to get location of android device by its android id

查看:120
本文介绍了如何通过其 android id 获取 android 设备的位置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am new in android and recently start learning about Android and I am trying to get location of any android device by its unique android id. By that I can track the approx or exact location either by GPS or network provider. In detail I mean to say that whenever i enter any Android id in my app i can get device location in my application. Thanks for your kind help.

推荐答案

终于可以用这段代码了:

Finally I am able to do with this code:

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 
 Longitude: %1$s 
 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;
    }
}
}

这篇关于如何通过其 android id 获取 android 设备的位置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆