我有两个模块,app和outersheme,模块应用中有MainBroadcastReceiver
(扩展Broadcast
),outersheme中有MainActivity
(扩展Activity
) ,代码如下:
outershceme MainActivity
核心代码:
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.activity: // start SecondActivity in app module by implicit
Intent activityIntent = new Intent("SecondActivity");
activityIntent.setData(Uri.parse("SteveqiSecondActivity://"));
startActivity(activityIntent);
break;
case R.id.broadcast: // start MainBroadcastReceiver in app module by implicit
Intent broadcastIntent = new Intent();
broadcastIntent.setAction("Broadcast");
// add this the app module may be wakeup.
broadcastIntent.setData(Uri.parse("SteveqiBroadcast://"));
sendBroadcast(broadcastIntent);
default:
break;
}
}
app Manifest
核心代码:
<activity
android:name="com.twlkyao.myscheme.SecondActivity"
android:label="@string/title_activity_second"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="SecondActivity" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="SteveqiSecondActivity" />
</intent-filter>
</activity>
<receiver android:name="com.twlkyao.myscheme.MainBroadcastReceiver">
<intent-filter>
<action android:name="Broadcast" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="SteveqiBroadcast" />
</intent-filter>
</receiver>
第一部分:
点击R.id.activity
按钮后,应用模块中的SecondActivity
已启动,因此作为应用模块,此时点击R.id.broadcast
按钮,MainBroadcastReceiver
即可接收广播,然后终止app模块的进程,单击R.id.broadcast
按钮,MainBroadcastReceiver
可以再次接收广播,再次杀死app模块,然后单击R.id.broadcast
按钮{ {1}}永远无法接收广播。
第二部分:
当我删除MainBroadcastReceiver
的行<data android:scheme="SteveqiBroadcast" />
并重复 第一部分 步骤时,MainBroadcastReceiver
永远不会接收广播。
我的问题是:
1.是否应用程序模块必须处于活动状态,以便MainBroadcastReceiver
可以接收广播?
2.为什么BroadcastReceiver
可能会在BroadcastReceiver
存在时收到广播,并且在线路未退出时无法接收广播?
答案 0 :(得分:1)
我已经解决了这个问题,因为ROM,我认为MIUI限制了Broadcast
,我已经在SamSung手机上成功运行了演示。
答案 1 :(得分:0)
如果你为它设置 WAKE_LOCK 权限,应用程序仍然可以从广播接收消息:
<uses-permission android:name="android.permission.WAKE_LOCK" />
答案 2 :(得分:0)
我对你问题的回答
1)除了动态广播接收器之外,您的广播接收器无需激活,直到 unRegisterReceiver 被调用
2)在播放意图时,你正在设置dada
Intent broadcastIntent = new Intent();
broadcastIntent.setAction("Broadcast");
// add this the app module may be wakeup.
broadcastIntent.setData(Uri.parse("SteveqiBroadcast://"));//Check this
sendBroadcast(broadcastIntent);
在你的Manifest内你的Intent过滤器期望通过广播意图发送的数据( SteveqiBroadcast:// )
<data android:scheme="SteveqiBroadcast" />
因此,如果从清单中删除上述架构,它将不会收到广播。 如果您想在这种情况下接收广播,请删除
broadcastIntent.setData(Uri.parse("SteveqiBroadcast://"));