2012-08-25 48 views
0

我有我的通知在Android的問題我不知道我在做什麼錯... 此通知是在我的服務類(AfterBootService)中創建的,並且該服務啓動時啓動完成在我的Receiver類(MyReceiver)代碼以下兩個類:爲什麼我的android通知一直消失?

MyReceiver.class

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 

public class MyReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Intent service = new Intent(context, AfterBootService.class); 
     context.startService(service);  
    } 

} 

這裏AfterBootService.class

public class AfterBootService extends Service { 
    private NotificationManager mNotificationManager; 
    private static final int NOTIFICATION_ID = 1; 

    @Override 
    public void onCreate() {   
     mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
     showNotification();  
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) {  
     return START_STICKY; 
    } 

    @Override 
    public void onDestroy() { 
     mNotificationManager.cancel(NOTIFICATION_ID); 
     Toast.makeText(this, "Service Stopped", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    /** 
    * Show a notification while this service is running. 
    */ 
    private void showNotification() { 

     int icon = R.drawable.icon_notification_ribbon; 
     String tickerText = "Your Notification"; 
     long when = System.currentTimeMillis();  

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

     String expandedText = "Sample Text"; 
     String expandedTitle = "Program Name Here"; 

     Context context = getApplicationContext(); 

     Intent notificationIntent = new Intent(this, IconActivity.class); 
     PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);   

     notification.flags |= Notification.FLAG_FOREGROUND_SERVICE; 
     //notification.flags |= Notification.FLAG_NO_CLEAR; 

     // Set the info for the views that show in the notification panel. 
     notification.setLatestEventInfo(context, expandedTitle, expandedText, contentIntent);    

     // Send the notification. 
     mNotificationManager.notify(NOTIFICATION_ID, notification); 

    } 
} 

現在,當我啓動一切都OK了接收器啓動服務和服務啓動通知,但當它顯示在狀態欄,並在通知窗口後有適當的消息IT DISAPPEAR後一些(2-3)秒......我沒有'設置任何允許消息消失的東西(我想我不是專家)。我想知道的內容:

  1. 如何在我的服務運行時始終保持該通知消息?
  2. 可以保留所有時間通知而不運行啓動該通知的服務?爲了更仔細地解釋它,可以在使用stopSelf()銷燬服務之後啓動服務通知,並仍然保留該通知消息?

我可以貼在這裏我的清單,如果需要的話。 THX

回答

2

編輯您的銷燬方法

來自:

public void onDestroy() { 
    mNotificationManager.cancel(NOTIFICATION_ID); 
    Toast.makeText(this, "Service Stopped", Toast.LENGTH_SHORT).show(); 
} 

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

} 

,因爲它取消您的通知,它會保持,直到用戶將其清除;)

你可以在沒有來自reciver的服務的情況下觸發notiffication,並且可以添加

notification.flags = Notification.FLAG_ONGOING_EVENT; 

現在將其設置爲不清除的

+0

是它的工作原理,但我錯了太現在還有一件事我試圖解釋它:我的程序工作,但我做了什麼只有一次,在這裏:1.I按下來清除虛擬的所有信息。 2.擦拭時,我將其關閉,然後按下Run-> MyProgram,然後在此完成後... ... .apk安裝成功。 3.現在我按了Window-> Android AVD Manager,安裝了.apk後我啓動了MyVirtual,並且我已經有了正確的工作程序(沒有錯過通知)。 4.I關閉了虛擬,我再次按Run-> MyProgram,現在發生了什麼事我有錯誤(不成功安裝)。 – user1624360

+0

任何錯誤日誌? –

+0

但是現在,當我將代碼更改爲即使當我第二次按下時寫入的代碼Run-> MyApplication我沒有得到錯誤,並且我的.apk被成功安裝了:)。現在當我需要看我的程序如何工作時,我需要從Window-> AVD Manager NOT FROM Run-> MyAplication啓動MyVirtual,因爲我沒有做任何更改,並且我已經安裝了我的.APK。這是我的錯誤之前(當我搜索我做錯了什麼),因爲我按了所有的時間運行 - > MyAplication,而不是窗口 - > AVD管理器和我的通知消失,因爲它和錯誤的代碼。 – user1624360