2012-05-11 50 views
4

我正在使用BroadCastReceiver,其中收到BOOT_COMPLETED操作。接收到該廣播後,在AlarmManager被設置,並且這AlarmManager觸發一個通知: 廣播reciver的代碼:爲什麼noftifications在android通知欄中出現一段時間然後消失

package pit.opensource.events; 

import java.util.Calendar; 

import android.app.AlarmManager; 
import android.app.PendingIntent; 
import android.app.Service; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 

public class BootReciver extends BroadcastReceiver { 

    Context c; 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 

    // Intent i = new Intent(context,SetAlarmService.class); 
    // context.startService(i); 
     setAlarm(context); 
     Log.d("Alarm","Boot Reciver"); 

    } 
    private void setAlarm(Context c){ 
     Log.d("Alarm","Set alarm service--------------"); 
     AlarmManager alarm = (AlarmManager)c.getSystemService(Service.ALARM_SERVICE); 


     Calendar cal = Calendar.getInstance(); 

     cal.setTimeInMillis(System.currentTimeMillis()); 
     cal.clear(); 
     cal.set(2012,5,11,5,11); 


     Intent i = new Intent(c,ShowNotificationService.class); 
     PendingIntent pendingIntent = PendingIntent.getService(c, 12345,i, 0); 

     // alarm.set(AlarmManager.RTC_WAKEUP, dateNotif.getTime(), pendingIntent); 
     //alarm.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent); 
     alarm.set(AlarmManager.RTC_WAKEUP, 5000, pendingIntent); 


     Log.d("Alarm","Alarm is alreday set*****************"); 

    } 


} 

ShowNotificationService的代碼:

package pit.opensource.events; 

import android.app.Notification; 
import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.app.Service; 
import android.content.Intent; 
import android.os.IBinder; 
import android.util.Log; 
import android.widget.Toast; 

public class ShowNotificationService extends Service { 

    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO Auto-generated method stub 
     return null; 
    } 
    @Override 
    public void onStart(Intent intent,int startId){ 

     Toast.makeText(getApplicationContext(), "Alaraaaaaaaam", Toast.LENGTH_LONG).show(); 
     Log.d("Alarm","Notification Service"); 
     showNotification(); 
    } 
    private void showNotification(){ 
     Intent i = new Intent(getApplicationContext(), DetailsActivity.class); 

     Toast.makeText(getApplicationContext(), "Dowanlod finished!", Toast.LENGTH_LONG).show(); 

     int notificationID = 1; 
     NotificationManager nm = (NotificationManager) getSystemService(getApplicationContext().NOTIFICATION_SERVICE); 

     Log.d("Notification","Notification is set--------------------"); 
     PendingIntent contentIntent = PendingIntent.getActivity(getApplicationContext(), 0, i, 0); 

     CharSequence tickerText = "Alaraaaaaaaam!"; 
     long when = System.currentTimeMillis(); 
     int icon = R.drawable.ic_launcher; 

     Notification notification = new Notification(icon,tickerText,when); 

     CharSequence contentTitle = "Alarm Alarm Alarm Alarm !!"; 
     CharSequence contentText = "Please click here to display more details"; 


     notification.setLatestEventInfo(getApplicationContext(), contentTitle, contentText, contentIntent); 

     //---100ms delay, vibrate for 250ms, pause for 100 ms and 
     // then vibrate for 500ms--- 
     notification.vibrate = new long[] { 100, 250, 100, 500}; // Needs vibrate permissions 

     nm.notify(notificationID, notification); 
    } 
} 

回答

1

通知消失了,因爲後BroadcastReceiver已完成您的申請不再有效。並且來自非活動應用程序的通知將自動刪除。

+0

解決方案是什麼? – Adham

+0

我沒有親自檢查過,但是你可以嘗試在你的服務中覆蓋'onStartCommand()'並且返回START_STICKY;'讓系統知道你的服務應該運行直到它自行終止。 – lenik

相關問題