Вопрос

Я пытаюсь AutoStart My NightClock приложение на зарядку, используя следующий широковетитель, реализованный в методе 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 }

Любые идеи, почему журнал говорит, что деятельность начинается, но ничего не происходит?

Это было полезно?

Решение

Если ваша цель в том, что вы хотите 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().

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

Другие советы

У вас есть контекст, пройденный в качестве параметра на 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);
}

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

От Документы:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top