Не удается завершить выполнение, когда пользователь покидает приложение

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

public class MainActivity extends Activity {
    EditText tempo;
    Button bt;
    Thread t;
    int estado = 1;

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

        tempo = (EditText) findViewById(R.id.tempo);
        //long delay = Long.parseLong(tempo.getText().toString());

        bt = (Button) findViewById(R.id.btvibrar);

        bt.setOnClickListener(new View.OnClickListener() {
            public void onClick(View arg0) {

                if (!tempo.getText().toString().equals("")) {

                    if (estado == 1) {

                        Vibrar();
                        estado *= -1;

                        bt.setText("Parar !");
                        bt.setBackgroundColor(Color.RED);

                        //Handler handler = new Handler();
                        //handler.postDelayed(new Runnable() {

                        //@Override
                        //public void run() {
                        //estado*=-1;
                        //bt.setText("Vibrar !");
                        //bt.setBackgroundColor(Color.GREEN);
                        //}
                        //  },  );
                    } else {
                        Parar();
                        estado *= -1;
                        bt.setText("Vibrar !");
                        bt.setBackgroundColor(Color.GREEN);
                   }
                } else {
                    AlertDialog.Builder dialogo = new AlertDialog.Builder(MainActivity.this);
                    dialogo.setTitle("Erro !");
                    dialogo.setMessage("Escolha um tempo.");
                    dialogo.setNeutralButton("OK", null);
                    dialogo.show();

                }
            }

            private void Vibrar() {    // É necessario lançar excessao no ANDROIDMANIFEST.XML
                Vibrator rr = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
                long treal = Long.parseLong(tempo.getText().toString());
                long milliseconds = treal * 1000;
                rr.vibrate(milliseconds);
            }

            private void Parar() {
                Vibrator rr = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
                rr.cancel();
            }
        });
    }
}

person Rcgoncalves    schedule 23.04.2013    source источник


Ответы (3)


Прежде всего, вам нужно различать выход и приостановку приложения (пауза происходит, если другое приложение выходит на передний план). Во-вторых, вам необходимо переопределить соответствующие методы для обработки того, что происходит, когда приложение приостанавливается или уничтожается.

Например, переопределение

protected void onPause() {}

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

Точно так же вы можете реализовать onStop и onDestroy, если это необходимо. Но в вашем случае я считаю, что onStop и onPause будет достаточно :)

Кроме того, попробуйте взглянуть на эту страницу, она дает подробное описание жизненного цикла активности http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

person JustDanyul    schedule 23.04.2013
comment
Найдите ошибку, после использования OnPause() и Onstop() и выхода из приложения вибрация прекращается... НО, когда я выхожу и блокирую свой телефон, чтобы разблокировать телефон, используйте вибратор, и телефон запоминает последний раз, когда я выбирал вибрацию.. .и начинается ! Как полностью отключить вибратор (и буфер?)?? - person Rcgoncalves; 24.04.2013

Вам нужно отключить службу вибрации в onStop() вашей деятельности.

@Override
protected void onStop() {
            Vibrator rr = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
            rr.cancel();
     }
person Gaurav Arora    schedule 23.04.2013

Добавьте onPause в свою деятельность и отключите вибратор оттуда:

@Override
public void onPause() {
    Parar();
}

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

person Aleks G    schedule 23.04.2013