Кнопка возврата Android вызывает сбой? - PullRequest
1 голос
/ 26 января 2012

У меня проблема с тем, что мое приложение продолжает падать, когда я нахожусь в приложении и нажимаю кнопку «назад» на моем телефоне, а затем снова вхожу в приложение ... Я думаю, я изменяю состояние или что-то не так:

package com.animeus;

import com.animeus.Factories.CameraDialogsFactory;
import com.animeus.Factories.CameraFactory;
import com.animeus.Services.CameraService;

import android.app.Activity;
import android.hardware.Camera;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;

public class LightBulbActivity extends Activity {
    /** Called when the activity is first created. */
    Camera c;

    //Application starts here
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        loadComponentsToUse();
        setComponentEvents();

        if (c == null)
            CameraDialogsFactory.GetNoCameraFoundDialog(this).show();
        else
            setComponentEvents();
    }

    //Sets all the components events
    private void setComponentEvents() {
        View v = (View)findViewById(R.id.LightBulbView);
        v.setOnTouchListener(new View.OnTouchListener() {

            public boolean onTouch(View v, MotionEvent event) {
                triggerLightEvent(event.getAction());
                return false;
            }
        });
    }

    //Turns the led on or off
    private void triggerLightEvent(int currentevent) {
        if (currentevent == MotionEvent.ACTION_DOWN)
            CameraService.turnLedLightOn(c);
        else if (currentevent == MotionEvent.ACTION_UP)
        {
            CameraService.turnLedLightOff(c);
        }
    }

    //Loads the "global" components we are supposed to use
    private void loadComponentsToUse() {
        c = CameraFactory.getCamera();
    }

    //Called once the activity ain't visible for the user anymore
    @Override
    public void onStop() {
        super.onStop();
    }


    @Override
    public void onPause() {
        super.onPause();
    }


    @Override
    public void onResume() {
        super.onResume();
    }
}

есть идеи?Я также попытался отключить камеру при включении «onPause» и «onStop», а затем воссоздать «onResume» камеры, но это привело к аварийному завершению работы приложения ...

и да, я знаю .. это не полныйкод ... но если вам нужно больше кода, то дайте мне знать

Заранее спасибо!

1 Ответ

3 голосов
/ 26 января 2012

Какое действие вы хотите выполнить, когда пользователь нажимает кнопку «Назад»? В моих приложениях, если пользователь находится в основном действии и не находится глубоко в стеке действий, я перезаписываю кнопку, чтобы предложить пользователю AlertDialog, который спрашивает его, хотят ли они выйти из приложения, и затем, если они нажимают да, я использую System.exit() после того, как я уберу дом, так сказать, с помощью метода, который я создаю, чтобы сначала убить и обнулить все.

Вы можете переопределить кнопку «Назад» следующим образом:

@Override
public void onBackPressed(){
    super.onBackPressed();
    cleanHouse();
    System.exit(0);     
}

Вы также можете поместить это в ваш onPause():

@Override
protected void onPause() {
    super.onPause();
    try{
        cam.camera.release();
    }catch(NullPointerException e){
        e.printStackTrace();
        try{
            cam.camera.unlock();
        }catch(NullPointerException f){
            f.printStackTrace();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...