Я создаю музыкальное приложение, которое отображает уведомление во время воспроизведения звука.При нажатии это уведомление открывает основное действие (UI) через намерение.
Хотя это должен быть довольно простой процесс, по какой-то причине, независимо от того, что я делаю, основное действие всегда уничтожается при нажатии уведомления,Я пробовал singleTop, singleTask (как флаги намерений и значения манифеста), сохраняя пакеты состояний экземпляров, onNewIntent, практически все, что близко к решению, которое я могу найти.Но деятельность ВСЕГДА уничтожена.Я могу получить намерение только через getIntent.
Основная активность: https://pastebin.com/32uuK33E
Аудио-сервис: https://pastebin.com/ShiUfBMc
Манифест: https://pastebin.com/kPp7RSYK
, поскольку "ссылки на pastebin должны сопровождаться кодом"
вот намерение (я пробовал каждую комбинацию соответствующих флагов, поэтому я действительно сомневаюсь, что проблема)
// creates an intent which opens the application when the notification is pressed
private PendingIntent getPendingIntent(Context context) {
Intent intent = getIntent(this);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addNextIntent(intent);
return stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
}
// returns an intent which resumes the Main Activity and passes various song information
private Intent getIntent(Context context) {
int duration = player != null ? player.getDuration() : 0;
boolean playing = player != null && player.isPlaying();
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
intent.putExtra(MediaPlayerContract.INTENT_EXTRA_SONG_INFO, getSongInfo());
intent.putExtra(MediaPlayerContract.INTENT_EXTRA_POS, currentQueuePos);
intent.putExtra(MediaPlayerContract.INTENT_EXTRA_DURATION, duration);
intent.putExtra(MediaPlayerContract.INTENT_EXTRA_IS_PLAYING, playing);
return intent;
}
и вот где я пытаюсь прочитать данные
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Log.e(LOG_TAG, "flag got intent");
String[] info = intent.getStringArrayExtra(MediaPlayerContract.INTENT_EXTRA_SONG_INFO);
int pos = intent.getIntExtra(MediaPlayerContract.INTENT_EXTRA_POS, 0);
int duration = intent.getIntExtra(MediaPlayerContract.INTENT_EXTRA_DURATION, 0);
unpackageSongInfo(info);
currentQueuePos = pos;
seekBar.setMax(duration);
setIntent(intent);
}