0

ここには2つの問題があります。ユーザーに特定の時間を選択させて、アプリのリマインダー ユーザーにアプリの使用を促すようにしています。ユーザーが時間を設定したら、午後 8:00 と言います。通知は毎日ポップアップするはずです。しかし、私が使用した後

"NotificationManager" and "Notification"

まず、何もポップアップしません。たとえば、現在 AU が午前 1 時 19 分である場合、このアプリを午前 1 時 20 分に設定して、テストとしてステータス バーに通知を表示します。

次に、TabBarクラスで使用する場合

nm.cancel(getIntent().getExtras().getInt("NotifID"));

nullポインタ例外が発生します

これが私のコードです:

TabBar.class

NotificationManager nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
nm.cancel(getIntent().getExtras().getInt("NotifID"));

Notification.class

package com.example.tabpro;

import java.util.Calendar;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TimePicker;

public class SettingNotification extends Activity{

TimePicker timePicker;

 @Override
 public void onCreate(Bundle savedInstanceState){
     super.onCreate(savedInstanceState);
     setContentView(R.layout.setting_notification);

     Button btnset = (Button) findViewById(R.id.btnSetAlarm);
     btnset.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            timePicker = (TimePicker) findViewById(R.id.timePicker_settime);

            AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

            Calendar calendar = Calendar.getInstance();  
            calendar.set(Calendar.HOUR_OF_DAY, timePicker.getCurrentHour());
            calendar.set(Calendar.MINUTE, timePicker.getCurrentMinute());
            calendar.set(Calendar.SECOND, 0);

            Intent i = new Intent("com.example.tabpro.DisplayNotification");
            Intent i2 = new Intent(SettingNotification.this, TabBar.class);
            i.putExtra("NotifID", 1);                                

            PendingIntent displayIntent = PendingIntent.getActivity(
                getBaseContext(), 0, i, 0); 

            alarmManager.set(AlarmManager.RTC_WAKEUP, 
                    calendar.getTimeInMillis(), displayIntent);
            startActivity(i2);

        }


     });



 }


}

DisplayNotification.class

package com.example.tabpro;

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;

public class DisplayNotification extends Activity {

 @Override
 public void onCreate(Bundle savedInstanceState){
     super.onCreate(savedInstanceState);
     int notifID = getIntent().getExtras().getInt("NotifID");

     Intent i = new Intent("com.example.tabpro.TabBar");

     i.putExtra("NotifID", notifID); 

     PendingIntent detailsIntent = PendingIntent.getActivity(this, 0, i, 0);

     NotificationManager nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
     Notification notif = new Notification(R.drawable.ic_launcher, "Time's up!", System.currentTimeMillis());

     CharSequence from = "AlarmManager - Time's up!";
     CharSequence message = "This is your alert, courtesy of the AlarmManager";        
     notif.setLatestEventInfo(this, from, message, detailsIntent);       

     finish();
 }

}
4

2 に答える 2

0

これが役に立てば幸いです: デバイスの通知トレイに通知を表示するには、notify() メソッドを呼び出す必要があります。

以下はそのためのコードです。

Notification notification;
PendingIntent contentIntent = PendingIntent.getActivity(context, 0,new Intent(context,      YourActivity.class), 0);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
notification = builder.setContentIntent(contentIntent)
                .setSmallIcon(icon).setTicker(yourappname).setWhen(0)
                .setAutoCancel(true).setContentTitle(yourappname)
                .setContentText(yourmessage).build();
notificationManager.notify(0, notification);
于 2013-10-14T11:22:18.570 に答える
0

実際に通知を表示するにはnotify()、あなたを呼び出す必要があります。NotificationManagerこのメソッドを呼び出すことはないため、通知は表示されません。

NullPointerException はおそらく別の問題です。そのためには、自分でデバッグを行う必要があります。最初に、null とは何かを判断する必要があります。次に、null である理由を特定し、修正します。あなたのコードでは、NPE を引き起こす可能性が最も高い候補TabBarnmgetIntent()、およびgetExtras()です。

于 2013-10-10T14:47:33.650 に答える