我想要一个应用程序向其他几个应用程序发送广播。我无法让它发挥作用: - (
在发送广播的应用中,我只是这样做:
sendBroadcast((new Intent("myBusiness.intent.action.MY_ACTION"))
.putExtra("some_extra_data", "the_extra_data"), "my_receiver_permission");
在应该接收广播的应用中,我使用上下文注册的接收器来最小化系统负载,但它无法正常工作......这些应用针对的是SDK 26,我已在多个版本上对其进行了测试。我在MainActivity类中声明了一个成员变量来保持接收器的注册:
public class MainActivity extends AppCompatActivity {
...
public static BroadcastReceiver mMyReceiver = null;
...
}
我在onCreate()和onDestroy()方法中注册和取消注册接收器:
@Override
protected void onCreate(Bundle savedInstanceState) {
...
if (savedInstanceState == null) {
...
this.registerReceiver(mMyReceiver = new MyReceiver(),
new IntentFilter("myBusiness.intent.action.MY_ACTION"),
"my_receiver_permission", null);
...
}
}
@Override
protected void onDestroy() {
...
if (mMyReceiver != null)
this.unregisterReceiver(mMyReceiver);
}
并宣布了接收器类:
public class MyReceiver extends BroadcastReceiver {
public MyReceiver() {
super();
}
@Override
public void onReceive(Context context, Intent intent) {
// And here is where I would like to do my stuff...
}
}
当我使用权限时,我认为应用程序安装的顺序可能很重要。所以我正在做的是我首先安装,执行和关闭,"接收"应用。然后我安装并执行" broadcast"应用程序,并关闭它。最后我执行了一个"接收"应用程序期望Broacastreceiver.onReceive()触发...但没有......
根据Roey的评论,我将接收器合并到Manifest中,并使用FLAG_INCLUDE_STOPPED_PACKAGES标志发送广播。如果我不使用权限来保护接收器,那么是什么使它工作。但是如果我使用权限它仍然无法工作:-(这就是Manifest的样子:
<manifest ...>
...
<uses-permission android:name="my_receiver_permission" />
<permission android:name="my_receiver_permission"/>
...
<application ...>
...
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true"
android:permission="my_receiver_permission">
<intent-filter>
<action android:name="myBusiness.intent.action.MY_ACTION" />
</intent-filter>
</receiver>
...
</application>
</manifest>
知道为什么它不工作? Thaaank yoouuuu
答案 0 :(得分:0)
避免广播注册问题的好方法是在APP B中声明清单本身的意图:
<receiver android:name=".BroadcastReceiverExample">
<intent-filter>
<action android:name="myBusiness.intent.action.MY_ACTION" />
</intent-filter>
</receiver>
此外,为了确保APP B能够获得广播是通过使用以下代码添加标志,然后发送消息:intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
这样,即使APP不在后台等待,APP B也会收到广播。
答案 1 :(得分:0)
终于找到了权限问题的问题:必须在发送广播的应用程序的清单中声明权限...
但是,它现在适用于最多25个API,但不适用于API 26: - (