Отказ в разрешении в приемнике вещания - PullRequest
1 голос
/ 29 марта 2019

Я пытаюсь сделать широковещательный приемник из приложения B в A, но не могу связаться из-за сообщения об ошибке (см. Ниже).Кроме того, я пытался найти в этом форуме ответ для решения указанной проблемы, но ни один из них не кажется мне полезным из-за различий в ситуациях.

Ошибка:

2019-03-28 07:24:23.973 1636-1650/? W/BroadcastQueue: Permission Denial: receiving Intent { act=com.example.cataloguemoviefinal.ACTION_UPDATE_WIDGET_DATA flg=0x30 } to com.example.cataloguemoviefinal/receiver.UpdateWidgetDataReceiver requires com.example.cataloguemoviefinal.UPDATE_WIDGET_DATA due to sender com.example.favoritefilmapp (uid 10147)

Манифест:

Разрешение в приложении A:

<!-- Permission declaration for updating widget content -->
    <permission
        android:name="com.example.cataloguemoviefinal.UPDATE_WIDGET_DATA" />

Приемник в приложении A:

<!-- Custom Broadcast receiver -->
        <receiver
            android:name=".receiver.UpdateWidgetDataReceiver"
            android:permission="com.example.cataloguemoviefinal.UPDATE_WIDGET_DATA"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="com.example.cataloguemoviefinal.ACTION_UPDATE_WIDGET_DATA"/>
            </intent-filter>
        </receiver>

Вещательный приемник в приложении A:

public class UpdateWidgetDataReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        // an Intent broadcast.
        Log.d("Action intent", intent.getAction());

        if(intent.getAction() != null){
            if(intent.getAction().equals("com.example.cataloguemoviefinal.ACTION_UPDATE_WIDGET_DATA")){
                // Log message
                Log.d("Testing receiver", "I got ur updates");

                AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);

                int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, FavoriteMovieItemWidget.class));

                appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds, R.id.favorite_movie_stack_view);
            }

        }
    }
}

Манифест вПриложение B:

 <!-- This code is used for custom BroadcastReceiver -->
    <uses-permission android:name="com.example.cataloguemoviefinal.UPDATE_WIDGET_DATA"/>

Сообщение отправителя в приложении B:

// Intent for broadcast receiver
        Intent broadcastIntent = new Intent();
        // Add flags to intent which can be communicated with closed app package (idk if its true)
        broadcastIntent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
        // Set action
        broadcastIntent.setAction("com.example.cataloguemoviefinal.ACTION_UPDATE_WIDGET_DATA");
        // Sent broadcast to receiver (use permission)
        sendBroadcast(broadcastIntent, "com.example.cataloguemoviefinal.UPDATE_WIDGET_DATA");

Что нужно сделать, чтобы получатель широковещания получил сообщение из приложения B в A (покажите Log.message)?

Извините, если я написал слишком много кода, но это необходимая часть для возможной ошибки.

Спасибо.

1 Ответ

0 голосов
/ 29 марта 2019

Android O имеет неявный лимит широковещательной рассылки, вы работаете на Android o или выше?https://developer.android.com/about/versions/oreo/background, поиск "Ограничения на вещание"

...