2

C2DMメッセージを受信したときに簡単な通知を表示しようとしています。サービスはUIに提供されますが、メインスレッドで実行されます。サービスから通知を作成して表示できると人々が主張しているのを見てきました。

 @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    [stp.chrome@gmail.com]
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)

この例外がスローされる理由がわかりません。

4

2 に答える 2

10

まず、ビューオブジェクトが参照されていない(contentView属性がnullに設定されている)通知を作成したため、例外がスローされます。通知を表示する前に、 setLatestEventInfoを呼び出す必要があります。

次に、使用しているコンストラクターは非推奨になりました。通知の作成には、クラスNotification.Builderを使用してください。Android <APIレベル11をサポートしている場合は、サポートライブラリのNotificationCompat.Builderクラスを使用できます。

第三に、はい、実行中のサービスから通知を作成することは可能です。

于 2012-06-15T20:12:01.107 に答える
1

通知のドキュメントを読む必要があります。setLatestEventInfo()メソッドを呼び出さない場合は、コンテンツビューが必要です。

于 2012-06-15T20:15:26.163 に答える