Приемники вещания, зарегистрированные в контексте Android 14, не работают после обновления SDK 34

private BroadcastReceiver syncStatusReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        /** This method can trigger multiple times. So we are unregistering after first received it. */
        Log.e("sucess","#"+syncStatusReceiver);
        unRegisterReceiver();
        initiateMainActivity(true);
    }
 };
 
 

Ниже функция с использованием

 private void registerReceiver() {
    try {
        registerReceiver(syncStatusReceiver,
                new IntentFilter(Config.getUCHAction(getApplicationContext(), SYNC_NOTIFY)));
    } catch (Exception e) {
        e.printStackTrace();
    }
 }
 
 
    public static String getUCHAction(Context appContext, String actionName) {
     return appContext.getPackageName() + actionName;
 }

public static final String SYNC_NOTIFY = ".sync_notification";

        

Добавлен зарегистрированный код BroadcastReceiver и код, связанный с приемником. Он работает хорошо, но после обновления SDK 34 на основе android14

Ошибка, которую я получаю:

java.lang.SecurityException: One of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED should be specified when a receiver isn't being registered exclusively for system broadcasts
    android.os.Parcel.createExceptionOrNull(Parcel.java:3057)
    android.os.Parcel.createException(Parcel.java:3041)
    android.os.Parcel.readException(Parcel.java:3024)
    android.os.Parcel.readException(Parcel.java:2966)
    android.app.IActivityManager$Stub$Proxy.registerReceiverWithFeature(IActivityManager.java:6085)
    android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1863)
    android.app.ContextImpl.registerReceiver(ContextImpl.java:1803)
    android.app.ContextImpl.registerReceiver(ContextImpl.java:1791)
    android.content.ContextWrapper.registerReceiver(ContextWrapper.java:755)
    android.content.ContextWrapper.registerReceiver(ContextWrapper.java:755)
    

Как решить эту ошибку на Android 14.

1
0
824
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Отметьте приемник вещания как экспортированный, чтобы ваше приложение могло слушать трансляции других приложений, например

registerReceiver(syncStatusReceiver,  new IntentFilter(Config.getUCHAction(getApplicationContext(), SYNC_NOTIFY)), RECEIVER_EXPORTED);

это требуется, начиная с Android 14

Другие вопросы по теме