0

我有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);

然而,没有任何反应,没有收到意图。我可以完全控制目标系统应用程序的清单文件和代码。是否有可能以某种方式传达意图?设备已植根。

4

1 回答 1

0

你试过 sendStickyBroadcast(intent) 吗?注册一个空接收器后,您应该能够检索最后一个发送的接收器。不确定它会有所帮助。顺便说一句,您要发送到的目标系统应用程序是什么?它没有到达那里,要么是因为它不允许,要么是因为你处理它的方式有问题:intent.setAction("com.sec.android.contextaware.HEADSET_PLUG");

我猜 com.sec.android.contextaware.HEADSET_PLUG 不允许接收或寻址不正确。特别是仔细检查 com.sec.android.contextaware.HEADSET_PLUG。

于 2012-07-12T22:32:45.510 回答