Невозможно указать широту и долготу

#android #locationmanager

#Android #locationmanager

Вопрос:

Я работаю над приложением, которое поджаривает широту и долготу с помощью LocationManager и LocationListener. При запуске приложения отображается сообщение об ошибке «Извините, система обработки не отвечает».. Это происходит, когда я задаю широту и длину либо вручную из управления эмулятором в DDMS, либо из командной строки с использованием telnet.

Java-код:

 public class LocationFinder extends Activity {

private LocationManager locManager;
private LocationListener locListener;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    locListener = new MyLocationListener();

    locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListener);
}

private class MyLocationListener implements LocationListener{

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

        if(loc != null){
            Toast.makeText(getBaseContext(), "Latitude: "     loc.getLatitude()   "Longitude: "   loc.getLongitude(), Toast.LENGTH_SHORT).show();
        }
    }

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

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

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

}
  

}

И я установил следующие разрешения в manifest.xml

 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_GPS" />
<uses-permission android:name="android.permission.ACCESS_ASSISTED_GPS" />
  

В эмуляторе также включен hw.gps.

Я хотел бы знать, есть ли что-то неправильное в моем коде. Спасибо

Комментарии:

1. не знаю точно, но попробуйте изменить первый параметр в Toast.makeText() … на getApplicationContext()…..

2. Имеет ли значение удаление @Overrides в MyLocationListener?

Ответ №1:

Проверьте с помощью журнала, что вы получаете значения широты и долготы..

Затем в Toast поместите это

  Toast.makeText(LocationFinder.this, "Latitude: "     loc.getLatitude()   "Longitude: "   loc.getLongitude(), Toast.LENGTH_SHORT).show();
  

вместо

  Toast.makeText(getBaseContext(), "Latitude: "     loc.getLatitude()   "Longitude: "   loc.getLongitude(), Toast.LENGTH_SHORT).show();
  

Ответ №2:

   //  Des: Start Device's GPS and get current latitude and longitude
     public void GPS() throws IOException {

 //  Des: This is a background service and called after every 10 minutes and fetch                    latitude-longitude values
     background = new Thread(new Runnable() {
     @Override
     public void run() {             
     for (int i = 0; i < j; i  ) {
        if (ProjectStaticVariable.GPSExit == true ) {
        try {
            Thread.sleep(600000);   //10 minutes
            mainhandler.sendMessage(mainhandler.obtainMessage());
            j  ;
        }
        catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
         }
       }
    }
  }
});

background.start();
mainhandler = new Handler() {
public void handleMessage(Message msg) {

//   Check Internet status
    isInternetPresent = cd.isConnectingToInternet();
    if (isInternetPresent) {

        lat_long_Service_flag = true;                   
        mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        mlocListener = new MyLocationListener(getApplicationContext());
        mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 0,  mlocListener);

        mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

    }
  }
 };
}

 //   Des: Location Listener through which we get current latitude and longitude
     public class MyLocationListener implements LocationListener {

     public MyLocationListener(Context mContext) {}

     public MyLocationListener(Runnable runnable) {}

     @Override
     public void onLocationChanged(Location loc) {

     longitude = loc.getLongitude();
     latitude = loc.getLatitude();
     final_latitude = Double.toString(latitude);
     final_longitude = Double.toString(longitude);

    }

    @Override
    public void onProviderDisabled(String provider) {
    }

    @Override
    public void onProviderEnabled(String provider) {
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
    }
   }