2013-10-10 3 views
0

здесь есть две проблемы. Я пытаюсь позволить пользователю выбрать определенное время, чтобы пользователи приложений могли использовать приложение. Как только пользователь установит время, скажем, 20:00. Уведомление должно появляться каждый день. Однако после того, как я использовалandroid no notification popup в строке состояния

"NotificationManager" and "Notification" 

Прежде всего, нет ничего всплывающего. Например, сейчас 1:19 в AU, тогда я настроил это приложение до 1:20 утра, чтобы отобразить уведомление в строке состояния в качестве теста.

Во-вторых, если в моем классе TabBar я использую

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

Это исключения нулевого указателя

Вот мой код:

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

} 
+0

Использование 'набор()' может дать вам время в прошлом, если час/минута/секунда в современном прошлом. Вам нужно проверить это и добавить день, если это необходимо. – CommonsWare

ответ

0

Вам нужно позвонить notify() на вашем NotificationManager на самом деле показать уведомление. Поскольку вы никогда не вызываете этот метод, ваше уведомление никогда не отображается.

Ваше исключение NullPointer, вероятно, представляет собой другую проблему. Для этого вам нужно выполнить некоторую отладку. Во-первых, вам нужно определить, что такое null. Затем определите, почему это значение null и исправить. В вашем коде наиболее вероятными кандидатами на вызывание NPE в TabBar являются nm, getIntent() и getExtras().

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); 
Смежные вопросы