У меня есть приложение, в которое я хочу отправить широковещательную рассылку, для которой определен приемник широковещательной передачи в файле AndroidManifest. xml, как показано ниже:
<receiver android:name="com.example.android.widget">
<intent-filter>
<action android:name="com.example.android.widget.TOGGLE"/>
<action android:name="com.example.android.widget.Change_STATUS"/>
<action android:name="com.example.android.widget.Change_STATE"/>
</intent-filter>
<reciever>
Я хочу вызвать действие com.example.android.widget.TOGGLE
отправка трансляции из другого приложения, которое не работает. Однако я могу отправить широковещательную рассылку с тем же действием намерения с помощью следующей команды adb:
adb shell am broadcast -a com.example.android.widget.TOGGLE -n com.example.android/com.example.android.widget
Для моего устройства android версия API - 29, и я попытался с помощью следующего кода отправить широковещательную рассылку, которая не работала :
Код 1:
Intent intent = new Intent("com.example.android.widget.TOGGLE");
intent.setPackage("com.example.android");
sendBroadcast(intent);
Код 2:
Intent intent = new Intent("com.example.android.widget.TOGGLE");
PackageManager packageManager=getPackageManager();
List<ResolveInfo> resolveInfos=packageManager.queryBroadcastReceivers(intent, 0);
for (ResolveInfo info:resolveInfos){
ComponentName componentName=new ComponentName(info.activityInfo.packageName, info.activityInfo.name);
intent.setComponent(componentName);
sendBroadcast(intent);
Код 3: Я ввел здесь регистрацию, чтобы увидеть, может ли мое приложение разрешить приложение, которое зарегистрировал это широковещательное действие.
Intent outIntent = new Intent("com.example.android.widget.TOGGLE");
PackageManager pm = this.getPackageManager();
List<ResolveInfo> receivers = pm.queryBroadcastReceivers(outIntent, 0);
if (receivers != null)
for (ResolveInfo receiver : receivers) {
Log.d("Sender", String.format("Polling %s/%s",
receiver.activityInfo.applicationInfo.packageName,
receiver.activityInfo.name));
ComponentName cn = new ComponentName(
receiver.activityInfo.applicationInfo.packageName,
receiver.activityInfo.name);
outIntent = new Intent("com.example.android.widget.TOGGLE");
outIntent.setComponent(cn);
sendBroadcast(outIntent);
}
Вывод:
Моему приложению удалось успешно разрешить целевое приложение и получателя, так как я получил следующее в logcat:
Polling com.example.android/com.example.android.widget
но все равно ничего не происходит, активность получателя не сработала: (