我在系统应用中有一个BroadcastReciever
,我想发送Intent
(用于测试,因为我正在修改该系统应用)。
系统应用的AndroidManifest.xml
如下所示:
<application android:label="@string/app_name">
<receiver android:label="StateReceiver" android:name=".abstractor.StateReceiver" android:enabled="true" android:exported="true">
<intent-filter>
<action android:name="com.sec.android.contextaware.HEADSET_PLUG" />
<action android:name="android.intent.action.LOCALE_CHANGED" />
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.bluetooth.headset.profile.action.CONNECTION_STATE_CHANGED" />
<category android:name="android.intent.category.HOME" />
</intent-filter>
</receiver>
<provider android:name=".manager.LoggingDataProvider" android:authorities="com.sec.android.contextaware.manager.LoggingDataProvider" />
</application>
我使用测试应用程序并检查目标系统应用程序是否确实可以通过以下方式接收该意图:
Intent intent = new Intent();
intent.setAction("com.sec.android.contextaware.HEADSET_PLUG");
PackageManager pm = getPackageManager();
for (ResolveInfo resolveInfo : pm.queryBroadcastReceivers(bt, 0)) {
Log.d("APP: ", resolveInfo.toString());
}
并使用系统应用的信息获取ResolveInfo
,因此它应该能够接收到意图。然后我用以下方式广播了意图:
sendBroadcast(intent);
然而,没有任何反应,意图没有收到。我完全控制了目标系统应用程序的清单文件和代码。是否有可能以某种方式获得意图? 设备已植根。
答案 0 :(得分:0)
你试过sendStickyBroadcast(意图)吗?注册空接收器后,您应该能够检索最后发送的接收器。不确定它会有所帮助。 BTW您发送的目标系统应用程序是什么?它没有到达那里因为它不被允许或因为你解决它的方式有问题:intent.setAction(“com.sec.android.contextaware.HEADSET_PLUG”);
我猜测com.sec.android.contextaware.HEADSET_PLUG不允许接收权限或地址不正确。特别是双击com.sec.android.contextaware.HEADSET_PLUG。