【问题标题】:Android broadcast receiver, receive a broadcast every time when app launchedAndroid广播接收器,每次应用启动时接收广播
【发布时间】:2013-10-16 08:17:24
【问题描述】:

在我的主要活动中,我绑定了一个服务。

    //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 都会收到广播(我知道,系统绝对不发送广播) 这真是令人困惑和沮丧。任何人都可以帮助我吗?提前致谢。

【问题讨论】:

    标签: android service callback bind broadcast


    【解决方案1】:

    我认为这是因为每当您杀死并再次启动您的应用时,您都会收到 STICKY 广播。

    在 onReceive 中使用 isInitialStickyBroadcast() 检查您正在处理的当前广播是否为 STICKY。如果那是 STICKY 则忽略不做处理

    【讨论】:

    • 我在stackoverflow.com/questions/11839043/… 找到了一个关于如何删除 STICKY 意图的好答案。如果您的案例是 STICKY 意图,请使用链接中提到的解决方案之一
    • 非常感谢 Changdeo Jadhav,你拯救了我的一天!!!!!!对于我的情况,粘性广播实际上是我自己发送的(我修改了Android框架类,在那里发送粘性广播),所以我可以将其修改为普通广播,问题应该得到解决。我应该好好研究一下什么是粘性广播。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多