Как начать действие с BroadcastReceiver

#android #android-activity #broadcastreceiver #android-alarms

#Android #android-активность #broadcastreceiver #android-сигналы тревоги

Вопрос:

В настоящее время я работаю над приложением для сигнализации для Android (да, я знаю, что я не единственный). Я довольно новичок в разработке Android, но мне удалось завершить ядро приложения, и все, что мне нужно, это 1 вещь. Чтобы иметь возможность установить будильник (во время x-y-z) и после срабатывания будильника запускать действие, ДАЖЕ если телефон НАХОДИТСЯ В спящем режиме (очевидно, не выключен), а остальное сделано.

Теперь я прочитал руководство для разработчиков, и я считаю, что путь лежит через BroadcastReceiver, а затем следует отправить IntentSender для запуска действия, но я не могу найти никаких примеров или похожих сообщений, чтобы, по крайней мере, получить представление.

Прямо сейчас у меня работает AlarmManager, который фактически активирует действие, но будет работать только в том случае, если телефон полностью активирован, и вообще ничего, если он спит, или, по крайней мере, пока телефон не будет разблокирован.

Есть предложения? При необходимости можете опубликовать пример кода. Заранее спасибо

Обновить

@Joel Спасибо за ответ, чувак. Я действительно читал о PowerManager.Блокировка пробуждения, но рад, что ты перенаправил меня своим путем. Теперь это то, что я придумал для действия приема (это может быть неправильно, но потерпите меня)

 public class OnAlarmActivity extends Activity {

    MediaPlayer mpAlarm;
    MediaPlayer mpButton;
    PowerManager.WakeLock wl;

    private BroadcastReceiver theReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
            PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag");
            wl.acquire();
        }
    };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.on_alarm);

        mpAlarm = MediaPlayer.create(this, R.raw.filename);
        mpAlarm.start();
        mpButton = MediaPlayer.create(this, R.raw.buttonfilename);


        ImageView imgForAlarmScreen= (ImageView)findViewById(R.id.oftheimage);
        Animation myFadeInAnimation = AnimationUtils.loadAnimation(this, R.anim.fadein);
        imgForAlarmScreen.startAnimation(myFadeInAnimation); //animation for ImageView

        Button bNextActivity = (Button)findViewById(R.id.ofthebutton);
        bNextActivity.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                mpButton.start();
                startActivity(new Intent("com.myapps.otheractivity"));
            }
        });
    }

    @Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        mpAlarm.start();
    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        mpAlarm.pause();
    }

    @Override
    protected void onRestart() {
        // TODO Auto-generated method stub
        super.onRestart();
        mpAlarm.start();
    }

    @Override
    protected void onStop() {
        // TODO Auto-generated method stub
        super.onStop();
        wl.release();
    }

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        mpAlarm.release();
    }
}
  

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

Ответ №1:

Я полагаю, что системная служба, которая вам нужна, PowerManager.WakeLock . Найдите это в Google или stack overflow, и вы, вероятно, получите то, что вам нужно.

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

1. Наконец-то заработала блокировка пробуждения (для службы, а не для действия). Спасибо за ответ, Джоэл