2012-06-15 2 views
2

Я пытаюсь показать простое уведомление при получении сообщения C2DM. Службы обеспечивают интерфейс, но все еще работают на основном потоке. Я видел, как люди утверждают, что вы можете создавать и показывать уведомления из службы.Уведомление об услуге

@Override 
public void onMessage(Context context, Intent intent) { 
    Log.w("Messsage","Message Received"); 
    Bundle extras = intent.getExtras(); 
    if (extras != null) { 
     String payload = (String) extras.get("test"); 
     createNotification(context,payload); 





    } 
} 

private void createNotification(Context context, String message){ 
    NotificationManager notificationmanager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
    Notification notification = new Notification(R.drawable.default1,message,System.currentTimeMillis()); 


    notificationmanager.notify(0,notification); 
} 

}

06-15 15:39:13.580: E/AndroidRuntime(11603): FATAL EXCEPTION: IntentService [[email protected]] 
06-15 15:39:13.580: E/AndroidRuntime(11603): java.lang.IllegalArgumentException: contentView required: pkg=com.upmc id=0 notification=Notification(contentView=null vibrate=null,sound=null,defaults=0x0,flags=0x0) 
06-15 15:39:13.580: E/AndroidRuntime(11603): at android.os.Parcel.readException(Parcel.java:1331) 
06-15 15:39:13.580: E/AndroidRuntime(11603): at android.os.Parcel.readException(Parcel.java:1281) 
06-15 15:39:13.580: E/AndroidRuntime(11603): at android.app.INotificationManager$Stub$Proxy.enqueueNotificationWithTag(INotificationManager.java:299) 
06-15 15:39:13.580: E/AndroidRuntime(11603): at android.app.NotificationManager.notify(NotificationManager.java:124) 
06-15 15:39:13.580: E/AndroidRuntime(11603): at android.app.NotificationManager.notify(NotificationManager.java:103) 
06-15 15:39:13.580: E/AndroidRuntime(11603): at com.upmc.C2DMReceiver.createNotification(C2DMReceiver.java:80) 
06-15 15:39:13.580: E/AndroidRuntime(11603): at com.upmc.C2DMReceiver.onMessage(C2DMReceiver.java:66) 
06-15 15:39:13.580: E/AndroidRuntime(11603): at com.google.android.c2dm.C2DMBaseReceiver.onHandleIntent(C2DMBaseReceiver.java:108) 
06-15 15:39:13.580: E/AndroidRuntime(11603): at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65) 
06-15 15:39:13.580: E/AndroidRuntime(11603): at android.os.Handler.dispatchMessage(Handler.java:99) 
06-15 15:39:13.580: E/AndroidRuntime(11603): at android.os.Looper.loop(Looper.java:137) 
06-15 15:39:13.580: E/AndroidRuntime(11603): at android.os.HandlerThread.run(HandlerThread.java:60) 

Я понятия не имею, почему это исключение бросают.

+0

услуги предоставляют NO ui, typo –

ответ

8

Во-первых, исключение выбрасывается из-за того, что вы создаете уведомление, для которого нет объекта вида, на который он ссылается (атрибут contentView имеет значение null). Прежде чем показывать уведомление, вы должны позвонить setLatestEventInfo.

Во-вторых, конструктор, который вы используете, - deprecated. Для создания уведомлений используйте класс Notification.Builder. Если вы поддерживаете Android < API уровня 11, вы можете использовать класс NotificationCompat.Builder из библиотеки поддержки.

В-третьих, да, возможно создание уведомлений с запущенной службы.

+0

setLatestEventInfo также устарел. Используйте конструктор для установки элементов контента. – Daddyboy

1

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

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