Android широковещательный приемник для средств управления мультимедиа перестает работать после закрытия приложения - PullRequest
0 голосов
/ 07 апреля 2020

Итак, я пытался создать приложение для игрока c, и, несмотря на посещение всех страниц в stackoverflow, я все еще застрял в одной проблеме. Код работает нормально по большей части, но когда я нажимаю кнопку «Назад», чтобы закрыть приложение, кнопки действий перестают работать, даже если они работают нормально, когда я нажимаю кнопку «Домой». Я думаю, что приемник вещания становится незарегистрированным, когда приложение закрыто, хотя я этого не хочу. Вот код:

public BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getExtras().getString("actionname");
        Helper.makeToast(context, action);

        switch (action) {
            case CreateNotification.ACTION_PREVIUOS:
//play previous
            case CreateNotification.ACTION_PLAY:

                if (isPlaying) {
                    //pause
                } else {
                   // play
                }


                break;
            case CreateNotification.ACTION_NEXT:
               //play next
        }
    }
};

Это метод onresume для основной деятельности

 @Override
  protected void onResume() {
    super.onResume();


    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        registerReceiver(broadcastReceiver, new IntentFilter("TRACKS_TRACKS"));
        startService(new Intent(getBaseContext(), OnClearFromRecentService.class));
    }

}

Это служба

public class OnClearFromRecentService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    return START_STICKY_COMPATIBILITY;
}

@Override
public void onDestroy() {
    super.onDestroy();
}

@Override
public void onTaskRemoved(Intent rootIntent) {
    stopSelf();
}
}

В манифесте:

<receiver .services.OnClearFromRecentService" />

Итак, мои вопросы: автоматически ли регистрируется приемник при закрытии приложения? Если так, как я могу предотвратить это? Как сохранить работающий приемник при закрытии приложения?

1 Ответ

0 голосов
/ 07 апреля 2020

Этот тип приемников отменяется автоматически при закрытии приложения. Это правильно. Однако вы должны отменить регистрацию в приемнике в onStop (). Потому что, если вы этого не сделаете, вы получите сообщение об ошибке LeakIntentMemory в LogCat, но ваше приложение не падает. Вы можете проверить это из своего logcat. Я думаю, что если вы хотите получить что-то, когда ваше приложение закрыто, вы должны объявить получателя в AndroidManifest с именем действия.

 <receiver android:name=".YourReceiver" >
        <intent-filter>
            <action android:name="first.custom.action"> </action>
        </intent-filter>
    </receiver>
...