Приемник вещания Android, получайте вещание каждый раз при запуске приложения

В моей основной деятельности я связываю службу.

    //main activity class
    public void startNotificationService(){
    // add notice service
    Context appContext = getApplicationContext();
    Intent intent = new Intent(appContext,NotificationService.class);
    appContext.bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
}

при создании службы регистрируется широковещательный приемник, поэтому, когда когда-либо платформа Android отправляет широковещательную рассылку, служба может перехватить ее и отправить уведомление.

    // service class
    @Override
    public void onCreate() {
    handlerMessage = new UnsolicitedMessageHandler();
    IntentFilter intentFilter = new IntentFilter("disassociation");
    intentFilter.addAction("remediation");
    registerReceiver(new UnsolicitedMessageHandler (), intentFilter);
}

ниже приведен класс дескриптора широковещательного приемника.

class UnsolicitedMessageHandler extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            String message;
            if (action.equals("disassociation")) {
                message = intent.getStringExtra("frameName");
                showNotification(R.drawable.disconnect,
                        "Disassocation Notification", message);
            }
            if (action.equals("remediation")) {
                message = intent.getStringExtra("remMsg");
                showNotification(R.drawable.scan, "Remediation Notification",
                        message);
            }
        }
    }

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


person SalutonMondo    schedule 16.10.2013    source источник


Ответы (1)


Я думаю, это потому, что всякий раз, когда вы убиваете и снова запускаете свое приложение, вы получаете STICKY brodcast.

В onReceive используйте isInitialStickyBroadcast(), чтобы проверить, является ли текущая трансляция, которую вы обрабатываете, STICKY. Если это STICKY, просто игнорируйте и не обрабатывайте

person Changdeo Jadhav    schedule 16.10.2013
comment
Я нашел один хороший ответ о том, как удалить намерения STICKY здесь stackoverflow.com/questions/11839043/. Если ваш случай имеет намерения STICKY, используйте одно из решений, упомянутых в ссылке. - person Changdeo Jadhav; 16.10.2013
comment
Большое спасибо, Чандео Джадхав, вы спасли мой день!!!!! в моем случае липкая трансляция фактически отправляется мной (я изменил класс фреймворка Android, отправил туда липкую трансляцию), поэтому я могу просто изменить ее на обычную трансляцию, проблема должна быть решена. и я должен хорошо изучить, что такое липкая трансляция. Спасибо! - person SalutonMondo; 16.10.2013