2015-11-19 94 views
0

我正在使用鬧鐘管理器定期向服務器請求數據。我想在通知中顯示回覆。但是,每當我嘗試顯示通知時,應用程序都會崩潰。這是我寫的代碼:使用AlarmManager運行通知

主要活動

public class MainActivity extends AppCompatActivity { 

    private WebView mWebview; 
    private Alarm alarm; 
    private PendingIntent pendingIntent; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

     Intent alarmIntent = new Intent(MainActivity.this, Alarm.class); 
     alarmIntent.putExtra(Alarm.NOTIFICATION_ID, 1); 
     alarmIntent.putExtra(Alarm.NOTIFICATION, getNotification("HELLO")); 
     pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, alarmIntent, 0); 
     AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
     manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 10000, pendingIntent); 
     Toast.makeText(this, "Alarm Set", Toast.LENGTH_SHORT).show(); 
    } 

    private Notification getNotification(String content) { 
     Notification.Builder builder = new Notification.Builder(this); 
     builder.setContentTitle("Scheduled Notification"); 
     builder.setContentText(content); 
     return builder.build(); 
    } 
} 

,報警類

public class Alarm extends BroadcastReceiver 
    public static String NOTIFICATION_ID = "notification-id"; 
    public static String NOTIFICATION = "notification"; 

    public void onReceive(Context context, Intent intent) { 
     Toast.makeText(context, "I'm running", Toast.LENGTH_SHORT).show(); 

     NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 

     Notification notification = intent.getParcelableExtra(NOTIFICATION); 
     int id = intent.getIntExtra(NOTIFICATION_ID, 0); 
     notificationManager.notify(id, notification); // !!!!! CRASHES HERE 
    } 

我是一個完整的Android新手,所以任何幫助,將不勝感激。

+1

你能分享崩潰日誌? – jomartigcal

+0

嗨,感謝您的回覆。它突然開始工作......所以崩潰日誌被刪除了。但是,它仍然不顯示任何內容:/ – Tim

回答

0

它看起來像你試圖設置一個不準確的警報,每10秒重複一次。

試着改變你的報警類別如下,請務必把你的包名,和你的packageName.ActivityNameToLaunch在那裏我已經指定:

public class Alarm extends WakefulBroadcastReceiver { 
    public void onReceive(final Context context, Intent intent) { 
     Intent myIntent = new Intent(); 
     myIntent.setClassName("YourPackageName", "YourPackageName.ActivityToLaunchOnAlarmReceive"); 
     myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(myIntent); 
    } 
} 

這是怎樣我有一個工作報警設置我的一個應用程序。請注意,此代碼將啓動您在鬧鈴啓動時指定的活動。在那個活動中,你可以有你的吐司通知,或任何你想要的。

此外我認爲你需要一個AlarmService類來處理這個意圖:

public class AlarmService extends IntentService { 
    private NotificationManager alarmNotificationManager; 

    public AlarmService() { 
     super("AlarmService"); 
    } 

    @Override 
    public void onHandleIntent(Intent intent) { 

      sendNotification("Wake up sleepyhead"); 

    } 

    private void sendNotification(String msg) { 
     alarmNotificationManager = (NotificationManager) this 
       .getSystemService(Context.NOTIFICATION_SERVICE); 

     PendingIntent contentIntent = PendingIntent.getActivity(this, 0, 
       new Intent(this, MainActivity.class), 0); 

     NotificationCompat.Builder alarmNotificationBuilder = new NotificationCompat.Builder(
       this).setContentTitle("Reminder").setSmallIcon(R.mipmap.ic_launcher) 
       .setStyle(new NotificationCompat.BigTextStyle().bigText(msg)) 
       .setContentText(msg); 

     alarmNotificationBuilder.setContentIntent(contentIntent); 
     alarmNotificationManager.notify(1, alarmNotificationBuilder.build()); 
    } 
}