2014-02-09 3 views
2

У меня сегодня эта проблема не найдена и ничего не найдено. Мой сценарий следующий:Уведомление показывает, что приложение андроида закрыто силой

У меня есть приложение для Android, которое автоматически отвечает на входящие сообщения. У меня есть приведенный ниже код, чтобы создать постоянное уведомление (но не удаленное), а затем, когда приложение будет уничтожено с помощью onDestroy, уведомление будет удалено. Однако, когда я открываю панель ретентатов и удаляю приложение, приложение останавливает службу автоматического ответа, и приемник вещания останавливается, однако onDestroy не вызывается, и уведомление все еще отображается.

public void notifCreate() { 
    Intent i = new Intent(Main.this, Main.class); 
    PendingIntent pi = PendingIntent.getActivity(Main.this, 1, i, PendingIntent.FLAG_UPDATE_CURRENT); 
    NotificationManager notifManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
    Notification.Builder notifBuilder = new Notification.Builder(getApplicationContext()); 

    notifBuilder.setContentTitle(getString(R.string.app_name)); 
    notifBuilder.setContentText(getString(R.string.notification)); 
    notifBuilder.setContentIntent(pi); 
    notifBuilder.setSmallIcon(R.drawable.ic_launcher); 
    notifBuilder.setOngoing(true); 
    Notification notif = notifBuilder.getNotification(); 
    notifManager.notify(1, notif); 
} 

public void notifDestroy() { 
    NotificationManager notifManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
    notifManager.cancelAll(); 
} 

@Override 
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String s) { 
    loadPrefs(); 
} 

@Override 
public void onBackPressed() { 
    moveTaskToBack(true); 
} 

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

    notifCreate(); 
} 

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

    loadPrefs(); 
    checkStates(); 
    notifDestroy(); 
} 

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

    notifDestroy(); 
    service = false; 
} 

Моя цель заключается в следующем:

Я хотел бы просто уничтожить уведомление, если приложение силы закрыты и т.д., или, если это возможно, я бы не прочь приложение как услуга, так что даже когда прокатывается из ретентатов он все равно будет работать. Лучший сценарий будет, однако, когда мой широковещательный приемник работает (так что-то обнаруживает, когда он действительно работает), и всякий раз, когда он включен, выведите уведомление. Всякий раз, когда он не запускается, уведомление должно быть уничтожено. Если требуется больше кода и т. Д., Просто комментируйте, спасибо за помощь.

ответ

1

Насколько я могу судить, вы создаете новый объект NotificationManager для создания уведомления и другого объекта notificationManager для отмены уведомлений. Вы должны использовать один и тот же объект. То, как вы это делаете, вы не увольняете никакого уведомления с объектом в файле notifDestroy(), следовательно, возможно, оно не очистит уведомление для вас.

+0

Не могли бы вы дать мне пример того, как это сделать? То, как я это делал, было единственным способом, каким я знал. Спасибо (: – sociallymellow

+0

Все, что я говорю, используют тот же объект, который вы использовали для создания уведомления в notifDestroy. Удалите NotificationManager notifManager = (NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE), из метода notifDestroy и сделайте notifManager переменной уровня класса , так что все методы могут получить к нему доступ. – user2511882

+0

Хорошо, это то, что я думал, что вы имели в виду, но просто убедитесь, что я постараюсь сделать это очень быстро, и если это сработает, я отвечу на ваш ответ, еще раз спасибо за помощь. – sociallymellow

1

Вы попробуйте .setAutoCancel (истинную) в уведомлении и в вашем манифесте надстройки андроида: launchMode = «singleTask», андроид, clearTaskOnLauch = «истина» в XML-активности

вашего значок уведомления должен очистить момент вы нажимаете его на панели уведомлений.

1

Метод, который я использовал для уничтожения процессов при использовании приложений из ретентатов: в первом действии приложения, в методе OnDestroy я пишу, что «процесс должен убить». Таким образом я вызываю метод OnDestroy процесса, и поэтому процесс действительно убивает себя, и уведомление удаляется. В частности, в первой Активность:

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

    Intent intent = new Intent(); 
    intent.setAction(Service.MY_ACTION_FROMACTIVITY); 
    intent.putExtra(Service.CMD, Service.CMD_STOP); 
    sendBroadcast(intent); 

} 

Так следующие операции:

@Override 
public void onDestroy() { 
    // TODO Auto-generated method stub 
    barNotification.cancel(NOTIFICATION); 

    sensorManager.unregisterListener(this); 

    this.unregisterReceiver(myServiceReceiver); 
    super.onDestroy(); 
} 

Я надеюсь, что я могу вам помочь.

1

Если ваши уведомления обрабатываются сервисом, а целевой API - 14 или выше, тогда у вас есть возможность отменить уведомления в режиме «void onTaskRemoved (Intent rootIntent)».

Смежные вопросы