У меня в настоящее время есть Действие, что, когда оно отображено, Уведомление будет также отображено в панели Уведомления.
Это - то, так, чтобы, когда Пользователь теснит и Действие было продвинуто к фону, который они могут возвратить к Действию с помощью Уведомления.
Проблема возникает, когда Пользователь нажимает кнопку "Назад", мое Действие уничтожается, но Уведомление остается, поскольку я хочу, чтобы пользователь смог оттеснить, но все еще смочь добраться до Действия с помощью Уведомления. Но когда ПОЛЬЗОВАТЕЛЬ пробует это, я получаю Нулевых указателей как его попытку запустить новое действие вместо того, чтобы возвратить старое.
Таким образом, по существу я хочу, чтобы Кнопка "Назад" действовала то же самое как кнопка "Домой", и вот то, как я попробовал до сих пор:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (Integer.parseInt(android.os.Build.VERSION.SDK) < 5
&& keyCode == KeyEvent.KEYCODE_BACK
&& event.getRepeatCount() == 0) {
Log.d("CDA", "onKeyDown Called");
onBackPressed();
}
return super.onKeyDown(keyCode, event);
}
public void onBackPressed() {
Log.d("CDA", "onBackPressed Called");
Intent setIntent = new Intent(Intent.ACTION_MAIN);
setIntent.addCategory(Intent.CATEGORY_HOME);
setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(setIntent);
return;
}
Однако вышеупомянутый код все еще, кажется, позволяет моему Действию быть уничтоженным, Как я могу мешать своему Действию быть уничтоженным, когда кнопка "Назад" нажимается?
Удалите ключевой прослушиватель или верните true
, если у вас есть KEY_BACK
.
Вам просто нужно следующее, чтобы поймать клавишу возврата (не вызывайте super в onBackPressed ()
).
Кроме того, если вы планируете запускать службу в фоновом режиме, обязательно посмотрите на startForeground ()
и убедитесь, что у вас есть постоянное уведомление, иначе Android убьет вашу службу, если потребуется свободная память.
@Override
public void onBackPressed() {
Log.d("CDA", "onBackPressed Called");
Intent setIntent = new Intent(Intent.ACTION_MAIN);
setIntent.addCategory(Intent.CATEGORY_HOME);
setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(setIntent);
}
Я думаю, что вы хотите не переопределять кнопку назад (это просто не кажется хорошей идеей - Android OS определяет это поведение, зачем его менять?), а использовать Activity Lifecycle и сохранять ваши настройки/данные в событии onSaveInstanceState(Bundle).
@Override
onSaveInstanceState(Bundle frozenState) {
frozenState.putSerializable("object_key",
someSerializableClassYouWantToPersist);
// etc. until you have everything important stored in the bundle
}
Затем вы используете onCreate(Bundle), чтобы получить все из этого сохраняемого пакета и воссоздать состояние.
@Override
onCreate(Bundle savedInstanceState) {
if(savedInstanceState!=null){ //It could be null if starting the app.
mCustomObject = savedInstanceState.getSerializable("object_key");
}
// etc. until you have reloaded everything you stored
}
Считайте, что приведенный выше псевдокод указывает вам правильное направление. Чтение Жизненного цикла деятельности должно помочь вам определить лучший способ достижения того, что вы ищете.