Broadcastreceiver和Paused活动

Pet*_*rdk 16 android broadcastreceiver onpause

我有一个以编程方式注册的广播接收器.它响应了PACKAGE_REMOVED一个包被删除时触发的意图.

问题是,它没有得到这个消息.我认为这是因为当我离开活动并转移到另一个活动以卸载应用程序时,意图被触发,因此原始活动暂停.可能暂停活动(接收器未注册onPause)也会暂停接收器吗?

Chr*_*ris 36

当您在活动中以编程方式注册广播接收器时,它将不会在活动暂停时获得广播.BroadcastReceiver 文档并不像在这一点上那样清晰.他们建议仅在onPause上取消注册以减少系统开销.

如果您想要在活动不在前台时接收事件,请使用接收器元素在清单中注册接收.

  • 下来投了票.我一直在创建本地广播接收器,当活动暂停时,它们会被称为EVEN.甚至没有调用简历.不确定你在哪里获得这些虚假信息,但这显然是错误的. (2认同)

H9k*_*oid 5

Receiver添加到您的项目中,您甚至无需启动应用程序即可获得此事件.

public class TestReciver extends BroadcastReceiver  {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("TestReciver",intent.getAction()+"\n"
                +intent.getDataString()+"\n"
                +"UID: "+intent.getIntExtra(Intent.EXTRA_UID,0)+"\n"
                +"DATA_REMOVED: "+intent.getBooleanExtra(Intent.EXTRA_DATA_REMOVED, false)+"\n"
                +"REPLACING: "+intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)
            );
    }

}
Run Code Online (Sandbox Code Playgroud)

并在您的清单中添加如下(在<application>标记内):

<receiver android:name="TestReciver" >
    <intent-filter >
        <action android:name="android.intent.action.PACKAGE_REMOVED" />
        <data android:scheme="package" />
    </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

当您使用这样的接收器时,您不会调用任何寄存器或取消注册,因此它将始终准备好获取数据.

需要注意的是,如果您让用户将您的应用移动到SD卡,这将无效.如果在卸载SD卡时发送了一个事件,则接收器将无法访问,您将错过该事件.