2014-09-18 4 views
1

Моя проблема заключается в том, что я хочу отменить текущее уведомление, только если в приложении выбрана опция отмены , но всякий раз, когда я очищаю память на вкладке «Задача « Диспетчер/ОЗУ »моего устройства Android, мое уведомление исчезает.Исходящее уведомление исчезает при очистке памяти

Что я могу сделать, чтобы мое постоянное уведомление оставалось, даже если я очищаю память?

Я создал текущее уведомление в классе, который расширяет BroadcastReciever class.In мой OnGoingNotificationReciever (распространяется BroadcastReciever):

Intent mainAct = new Intent(context, MainActivity.class); 
PendingIntent contentIntent = PendingIntent.getActivity(context, 555, mainAct, PendingIntent.FLAG_UPDATE_CURRENT); 
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context).setSmallIcon(resID).setContentTitle(city).setContentText(temperature); 
mBuilder.setContentIntent(contentIntent); 
mBuilder.setOngoing(true); 
NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
mNotificationManager.notify(1, mBuilder.build()); 

Затем я установил AlarmManager, чтобы начать этот BroadcastReciever и повторять каждые 5 минут:

AlarmManager alarmManager = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); 
NotificationManager mNotificationManager = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE); 
Intent i7 = new Intent(getApplicationContext(), OnGoingNotificationReciever.class); 
PendingIntent ServiceManagementIntent = PendingIntent.getBroadcast(getApplicationContext(), 1111111, i7, 0); 
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME,SystemClock.elapsedRealtime(), 5 * 60 * 1000, ServiceManagementIntent); 

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

Примечание: в приложении Yahoo Weather оно делает то, что я хочу сделать, но я не мог найти, как в Интернете.

ответ

0

После большого поиска я наконец нашел решение этой проблемы.

В моей Manifest.xml я написал следующее:

<receiver android:name=".OnGoingNotificationReciever" > 
    <intent-filter> 
     <action android:name="android.intent.action.PACKAGE_RESTARTED" /> 
     <data android:scheme="package" android:path="com.example.havadurumumenu" /> 
    </intent-filter> 
</receiver> 

PACKAGE_RESTARTED вызывается, когда вы очистите память, и установка этого перезапускает приемник после очистки памяти.

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