Приложение не принимает трансляцию из другого приложения, но принимает, когда я отправляю трансляцию с помощью adb - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть приложение, в которое я хочу отправить широковещательную рассылку, для которой определен приемник широковещательной передачи в файле 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

но все равно ничего не происходит, активность получателя не сработала: (

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...