该应用程序未启动时会收到广播吗?
Will the app receive Broadcast when it's not launched?
在我的项目中,我有两个模块:"app" 和 "outerscheme"。在应用程序中,有一个 MainBroadcastReceiver
(扩展 Broadcast
)。在 outerscheme 中,有一个 MainActivity
(扩展 Activity
)。代码如下:
外部方案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
按钮时,app模块中的SecondActivity
就起来了,所以作为app模块,此时点击R.id.broadcast
按钮,MainBroadcastReceiver
可以接收广播,然后杀掉app模块进程,点击R.id.broadcast
按钮,MainBroadcastReceiver
可以再次接收广播,再次杀掉app模块进程,点击R.id.broadcast
按钮MainBroadcastReceiver
永远收不到广播。
第二部分:
当我删除 MainBroadcastReceiver
的行 <data android:scheme="SteveqiBroadcast" />
并重复 第 I 部分 步骤时, MainBroadcastReceiver
永远收不到广播。
我的问题是:
1.Is 应用程序模块必须处于活动状态以便 BroadcastReceiver
可以接收广播?
2.Why当<data android:scheme="SteveqiBroadcast" />
存在时BroadcastReceiver
可以接收广播,不退出则收不到广播?
如果您为它设置WAKE_LOCK权限,该应用程序仍然可以接收来自广播的消息:
<uses-permission android:name="android.permission.WAKE_LOCK" />
我对你问题的回答
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);
在您的清单中,您的 Intent 过滤器期望数据(SteveqiBroadcast://)通过广播意图发送
<data android:scheme="SteveqiBroadcast" />
因此,如果您从清单中删除上述架构,它将不会收到广播。
如果你也想在这种情况下接收广播,请删除
broadcastIntent.setData(Uri.parse("SteveqiBroadcast://"));
我已经解决了问题,是ROM的原因,我认为MIUI限制了Broadcast
,我已经成功运行三星phone.
在我的项目中,我有两个模块:"app" 和 "outerscheme"。在应用程序中,有一个 MainBroadcastReceiver
(扩展 Broadcast
)。在 outerscheme 中,有一个 MainActivity
(扩展 Activity
)。代码如下:
外部方案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
按钮时,app模块中的SecondActivity
就起来了,所以作为app模块,此时点击R.id.broadcast
按钮,MainBroadcastReceiver
可以接收广播,然后杀掉app模块进程,点击R.id.broadcast
按钮,MainBroadcastReceiver
可以再次接收广播,再次杀掉app模块进程,点击R.id.broadcast
按钮MainBroadcastReceiver
永远收不到广播。
第二部分:
当我删除 MainBroadcastReceiver
的行 <data android:scheme="SteveqiBroadcast" />
并重复 第 I 部分 步骤时, MainBroadcastReceiver
永远收不到广播。
我的问题是:
1.Is 应用程序模块必须处于活动状态以便 BroadcastReceiver
可以接收广播?
2.Why当<data android:scheme="SteveqiBroadcast" />
存在时BroadcastReceiver
可以接收广播,不退出则收不到广播?
如果您为它设置WAKE_LOCK权限,该应用程序仍然可以接收来自广播的消息:
<uses-permission android:name="android.permission.WAKE_LOCK" />
我对你问题的回答
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);
在您的清单中,您的 Intent 过滤器期望数据(SteveqiBroadcast://)通过广播意图发送
<data android:scheme="SteveqiBroadcast" />
因此,如果您从清单中删除上述架构,它将不会收到广播。 如果你也想在这种情况下接收广播,请删除
broadcastIntent.setData(Uri.parse("SteveqiBroadcast://"));
我已经解决了问题,是ROM的原因,我认为MIUI限制了Broadcast
,我已经成功运行三星phone.