сообщение отложено - PullRequest
       7

сообщение отложено

0 голосов
/ 01 августа 2011

Я пытаюсь опубликовать уведомления через AlarmManager с задержкой.Для этого я создал AlarmReciever, который в настоящее время выглядит следующим образом:

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, где я пытаюсь запустить Alarm следующим образом:

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);
}

, как только alarmManager.set is set Я получаю исключение NullPointerException:

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)

Я не знаю, что я делаю неправильно.

1 Ответ

1 голос
/ 02 августа 2011

Ознакомьтесь с документацией AlarmManager.set (...) .

Там вы можете видеть, что первый параметр 'type' не может быть 333. Он может быть установлен либо в ELAPSED_REALTIME, ELAPSED_REALTIME_WAKEUP, RTC или RTC_WAKEUP, которые соответствуют целочисленным значениям 3, 2, 1 и 0. Это ваш выбор .

...