Возникли проблемы с остановкой моего датчика GPS - PullRequest
1 голос
/ 17 декабря 2011

Когда мое приложение закрывается, мой датчик GPS продолжает работать или когда я меняю действия, мое приложение вылетает в зависимости от моей конфигурации (в приведенном ниже коде оно вылетает, когда я меняю действия или покидаю приложение).Как изменить свое действие ниже, чтобы при выходе из приложения датчик GPS прекращал работать, а когда я перехожу к другому действию, он продолжает работать?

Вот ключевые части моей деятельности:

public class InitialChoice extends Activity {
    LocationManager mlocManager;
    LocationListener mlocListener; 

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.initial_screen);

        mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        mlocListener = new MyLocationListener();
        mlocManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, mlocListener);
    }

    @Override
    protected void onStop(){
        //mlocManager.removeUpdates(mlocListener); 

        mlocManager.removeGpsStatusListener((Listener) mlocListener);

        mlocManager = null;
    }
}

Если я использую следующий код вместо onStop (), gps не остановится:

@Override
public void finish(){
    //mlocManager.removeUpdates(mlocListener); 

    mlocListener = null;
    mlocManager = null;

}

LogCat:

12-16 21:54: 58.120: D / LocationManager (909): requestLocationUpdates: provider = gps, listener = com.dummies.android.taskreminder.MyLocationListener@46284458 12-16 21: 55: 04.740: D / AndroidRuntime (909): завершение работы VM 12-16 21: 55: 04.740: W / dalvikvm (909): threadid = 1: поток выходит с необработанным исключением (группа = 0x400259f8) 12-16 21: 55: 04.750: E / AndroidRuntime (909): ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основное 12-16 21: 55: 04.750: E / AndroidRuntime (909): java.lang.RuntimeException: невозможно остановить деятельность {com.dummies.android.taskreminder / com.dummies.android.taskreminder.activity.InitialChoice}: java.lang.ClassCastException: com.dummies.android.taskreminder.MyLocationListener 12-16 21: 55: 04.750: E / AndroidRuntime (909): на android.app.ActivityThread.performStopActivityInner (ActivityThread.java:3632) 12-16 21: 55: 04.750: E / AndroidRuntime (909): на android.app.ActivityThread.handleStopActivity (ActivityThread.java:3677) 12-16 21: 55: 04.750: E / AndroidRuntime (909): на android.app.ActivityThread.access $ 2600 (ActivityThread.java:135) 12-16 21:55: 04.750: E / AndroidRuntime (909): на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:2153) 12-16 21: 55: 04.750: E / AndroidRuntime (909): на android.os.Handler.dispatchMessage (Handler.java:99) 12-16 21: 55: 04.750: E / AndroidRuntime (909): на android.os.Looper.loop (Looper.java:144) 12-16 21: 55: 04.750: E/ AndroidRuntime (909): в android.app.ActivityThread.main (ActivityThread.java:4937) 12-16 21: 55: 04.750: E / AndroidRuntime (909): в java.lang.reflect.Method.invokeNative (собственный метод)

Новые ошибки для меня с методом здесь: Остановить прослушиватель местоположения в Android

12-16 23: 10: 50.295: W / dalvikvm (1272): threadid = 1: поток выходит с неперехваченным исключением (группа = 0x400259f8) 12-16 23: 10: 50.305: E / AndroidRuntime (1272): ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основное 12-16 23: 10: 50.305: E /AndroidRuntime (1272): java.lang.RuntimeException: Невозможно остановить активность.taskreminder / com.dummies.android.taskreminder.activity.InitialChoice} не обращался к super.onStop () 12-16 23: 10: 50.305: E / AndroidRuntime (1272): в android.app.ActivityThread.performStopActivityInner (ActivityThread.java:3632) 12-16 23: 10: 50.305: E / AndroidRuntime (1272): на android.app.ActivityThread.handleStopActivity (ActivityThread.java:3677)

Ответы [ 3 ]

2 голосов
/ 17 декабря 2011

Ваше приведение к слушателю, когда его локализатор:

Декларация:

 LocationListener mlocListener; 

конкретизация:

 mlocListener = new MyLocationListener();

литье:

 (Listener) mlocListener

Yout Logcat объясняет это здесь:

java.lang.ClassCastException: com.dummies.android.taskreminder.MyLocationListener 12-16

1 голос
/ 17 декабря 2011

Пока что это работает достаточно хорошо, но, возможно, есть лучший способ (фоновый поток .....):

@Override
public void onDestroy(){
mlocManager.removeUpdates(mlocListener);

    super.onDestroy();
} 

@Override
public void onResume(){

    mlocManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, mlocListener);
    super.onResume();
}

}
1 голос
/ 17 декабря 2011

попробуйте переопределить finish() вместо `onStop () 'для начала

еще одна вещь, которую я сделал, это установил нулевой gpslistener после получения позиции в onLocationChanged(), и, наконец, если вам нужно продолжать получать обновления местоположения, вам следует подумать о создании службы, а не делать gps слушатель в деятельности.

таким образом вы можете проще убить службу, что убьет слушателя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...