startActivity () из BroadcastReceiver - PullRequest
       18

startActivity () из BroadcastReceiver

36 голосов
/ 03 октября 2010

Я пытаюсь автоматически запустить приложение для ночных часов при зарядке с использованием следующего BroadcastReceiver, реализованного в методе onPause ():

BroadcastReceiver test = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        unregisterReceiver(this);
        Intent i = new Intent(context, NightClock.class);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i);   
    }           
};
registerReceiver(test, new IntentFilter(Intent.ACTION_POWER_CONNECTED));

Метод onReceive () вызывается, когда USB-кабель подключен, но действие не начинается. Однако журнал показывает это:

I/ActivityManager(   79): Starting activity: Intent { flg=0x10000000 cmp=com.meins.nightclock/.NightClock }

Есть идеи, почему в журнале написано, что действие запущено, но ничего не происходит?

Ответы [ 3 ]

56 голосов
/ 21 мая 2013

Вы передали контекст в качестве параметра методу onRecieve (), поэтому просто используйте:

 @Override
public void onReceive(Context context, Intent intent) {
    //start activity
    Intent i = new Intent();
    i.setClassName("com.test", "com.test.MainActivity");
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(i);
}

Это работает, конечно, вы должны изменить имя пакета и класса деятельности на свое.

19 голосов
/ 03 октября 2010

Если ваша цель состоит в том, чтобы вы хотели, чтобы NightClock запускался при отправке ACTION_POWER_CONNECTED трансляции, ваш подход к использованию BroadcastReceiver в порядке. Однако, не регистрируйте это от деятельности. Скорее зарегистрируйте это в манифесте:

<receiver android:name=".OnPowerReceiver">
        <intent-filter>
                <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
        </intent-filter>
</receiver>

Затем укажите ваш BroadcastReceiver как общедоступный класс Java (здесь он называется OnPowerReceiver, хотя вы можете называть его как угодно) и вызовите startActivity().

Имейте в виду, что пользователи, вероятно, не хотят, чтобы вы это делали. Есть много других случаев подключения телефона к питанию, кроме запуска «ночных часов». Я скромно предлагаю вам просто позволить пользователям начать вашу деятельность через домашний экран.

0 голосов
/ 30 мая 2017

С Документы :

Не запускайте действия с приемников вещания, потому что пользовательский опыт раздражает; особенно если есть более одного приемника. Вместо этого рассмотрите возможность отображения уведомления.

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