2011-08-01 15 views
0

私はAlarmManager経由で通知を送信しようとしています。投稿通知遅延

public class NotificationAlarmReciever extends BroadcastReceiver{ 

public static final String TAG = "NotificationAlarmReciever"; 

public static final String KEY_NOTIFICATION_EXTRA = "NotificationExtra"; 
public static final String KEY_NOTIFICATION_ID = "NotificationId"; 


@Override 
public void onReceive(Context context, Intent intent) { 
    LogCat.d(TAG, "AlarmReciever Triggered"); 
    LogIntent(intent); 
    Bundle b = intent.getExtras(); 
    if (b != null){ 
     if (b.containsKey(KEY_NOTIFICATION_EXTRA)){ 
      Notification n = b.<Notification>getParcelable(KEY_NOTIFICATION_EXTRA); 
        int request = 100 
        if(b.containsKey(KEY_NOTIFICATION_ID)){ 
         request = b.getInt(KEY_NOTIFICATION_ID) 
        } 
      NotificationManager manager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); 
      manager.notify(request, n); 
     } 
    } 
} 

private void LogIntent(Intent intent) { 
    //logs Intent.... 

} 
} 

私はこのようなアラーム起動しようTestActivty作成:できるだけ早くalarmManager.setはIと呼ばれるよう

public void onClick(View v) { 
      Context c = getApplicationContext(); 
      int requestCode = 333; 

      Notification notification = new Notification(R.drawable.balloon_overlay_close,"ticker", System.currentTimeMillis() + Integer.parseInt(mWhen.getText().toString())); 
      Intent notificationAction = new Intent(c, TestActivity.class); 
      PendingIntent notificationPendingOperation = PendingIntent.getActivity(c, requestCode, notificationAction, 0); 
      notification.setLatestEventInfo(c, "HEADER", "MESSAGE", notificationPendingOperation); 

      AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
      Intent alarmIntent = new Intent(c, NotificationAlarmReciever.class); 
      alarmIntent.putExtra(NotificationAlarmReciever.KEY_NOTIFICATION_EXTRA, notification); 
      PendingIntent alarmOperation = PendingIntent.getBroadcast(c, requestCode, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
//Line 127 
      alarmManager.set(requestCode, notification.when, alarmOperation); 
} 

をこの目的のために、私は現在、このようになりますAlarmRecieverを作成しました

08-01 16:37:15.592: ERROR/AndroidRuntime(4422): FATAL EXCEPTION: main 
08-01 16:37:15.592: ERROR/AndroidRuntime(4422): java.lang.NullPointerException 
08-01 16:37:15.592: ERROR/AndroidRuntime(4422):  at android.os.Parcel.readException(Parcel.java:1328) 
08-01 16:37:15.592: ERROR/AndroidRuntime(4422):  at android.os.Parcel.readException(Parcel.java:1276) 
08-01 16:37:15.592: ERROR/AndroidRuntime(4422):  at android.app.IAlarmManager$Stub$Proxy.set(IAlarmManager.java:174) 
08-01 16:37:15.592: ERROR/AndroidRuntime(4422):  at android.app.AlarmManager.set(AlarmManager.java:139) 
08-01 16:37:15.592: ERROR/AndroidRuntime(4422):  at de.eos.uptrade.android.core.TestActivity$1.onClick(TestActivity.java:127) 
08-01 16:37:15.592: ERROR/AndroidRuntime(4422):  at android.view.View.performClick(View.java:2485) 
08-01 16:37:15.592: ERROR/AndroidRuntime(4422):  at android.view.View$PerformClick.run(View.java:9080) 
08-01 16:37:15.592: ERROR/AndroidRuntime(4422):  at android.os.Handler.handleCallback(Handler.java:587) 
08-01 16:37:15.592: ERROR/AndroidRuntime(4422):  at android.os.Handler.dispatchMessage(Handler.java:92) 
08-01 16:37:15.592: ERROR/AndroidRuntime(4422):  at android.os.Looper.loop(Looper.java:130) 
08-01 16:37:15.592: ERROR/AndroidRuntime(4422):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
08-01 16:37:15.592: ERROR/AndroidRuntime(4422):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-01 16:37:15.592: ERROR/AndroidRuntime(4422):  at java.lang.reflect.Method.invoke(Method.java:507) 
08-01 16:37:15.592: ERROR/AndroidRuntime(4422):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
08-01 16:37:15.592: ERROR/AndroidRuntime(4422):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
08-01 16:37:15.592: ERROR/AndroidRuntime(4422):  at dalvik.system.NativeStart.main(Native Method) 

私が間違っていることを知っていると、NullPointerExceptionを取得します。

+0

あなたはonclickメソッドでnullpointerexceptionを取得します。例外が発生した正確な行を特定してから、その行にアクセスしたオブジェクトがnullであることを推測してください。それからあなたの質問を更新してください。 – Marmoy

+0

@videre私のOnClickメソッドは、2番目に表示されたものです - アラームを作成する場所 - Line 127はalarmManager.set –

+0

です。デバッグ方法は分かりますか?行127にブレークポイントを置き、アプリケーションを実行し、プログラムがブレークポイントに達すると、行127の各オブジェクトの上にカーソルを置いて、ヌルであるものを特定します。その後、ここをクリック – Marmoy

答えて

1

AlarmManager.set(...) documentationをご覧ください。

最初のパラメータ 'type'は333にできないことがわかります。ELAPSED_REALTIME、ELAPSED_REALTIME_WAKEUP、RTCまたはRTC_WAKEUPのいずれかに設定できます。これは整数値3,2,1および0に対応します。選択肢。

+0

thx、それは働いた...私は "NullPointerException"という表現が誤解を招くと思います。 "IllegalArgumentException"はより良いでしょう –

関連する問題