2016-04-02 11 views
2

alarmmanagerとサービスを使用してアプリケーションを開発しており、通知をキャンセルできないことがあります。私は断片を使用しています。通知をクリックしてもAlarmmanagerがキャンセルされない

私のアプリは「x」分ごとに2つの通知を送信します。サービスを開始するボタンと停止するボタンがあります。私がサービスを開始すると通知が出され、停止ボタンを押すと正しく通知されます。しかし、サービスを開始してアプリを終了すると、通知は正常に開始されますが、通知をクリックすると、アプリが開いてから停止ボタンが押されますが、通知は一度も停止しません。

私がalarmanager.cancel(pendingintent)と呼ぶ関数は、同じフラグメントにあります(最初のフラグメントであるMainFragment.class)。 BroadcastReceiver

NotificationCompat.Builder mBuilder2 = new NotificationCompat.Builder(context) 
       .setSmallIcon(R.drawable.icon2) 
       .setContentTitle("..") 
       .setContentText(".."); 

     Intent resultIntent = new Intent(context, MainActivity.class); 
     TaskStackBuilder stackBuilder = TaskStackBuilder.create(context); 
     stackBuilder.addParentStack(MainActivity.class); 
     stackBuilder.addNextIntent(resultIntent); 
     PendingIntent resultPendingIntent = 
       stackBuilder.getPendingIntent(1, PendingIntent.FLAG_UPDATE_CURRENT); 

     mBuilder2.setContentIntent(resultPendingIntent); 

     mBuilder2.setAutoCancel(true); 

     mBuilder2.build().flags |= Notification.FLAG_AUTO_CANCEL | Notification.FLAG_ONGOING_EVENT; 
     NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
     mNotificationManager.notify(1, mBuilder2.build()); 

おかげで、よろしく拡張BroadcastReceiver

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context) 
       .setSmallIcon(R.drawable.icon) 
       .setContentTitle("...") 
       .setContentText("..."); 

Intent resultIntent = new Intent(context, MainActivity.class); 
     TaskStackBuilder stackBuilder = TaskStackBuilder.create(context); 
     stackBuilder.addParentStack(MainActivity.class); 
     stackBuilder.addNextIntent(resultIntent); 
     PendingIntent resultPendingIntent = 
       stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 
     mBuilder.setContentIntent(resultPendingIntent); 

     mBuilder.setAutoCancel(true); 

     mBuilder.build().flags |= Notification.FLAG_AUTO_CANCEL | Notification.FLAG_ONGOING_EVENT; 

     NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
     mNotificationManager.notify(0, mBuilder.build()); 

TimeAlarm2.class拡張

MainFragment.class

intent = new Intent(getContext(), TimeAlarm.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY); 
    intent.setAction(Long.toString(System.currentTimeMillis())); 
    pendingIntent = PendingIntent.getBroadcast(mContext, 0, 
      intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
       SystemClock.elapsedRealtime() + 15000, 
       15000, 
       pendingIntent); 

    intent2 = new Intent(getContext(), TimeAlarm2.class); 
    intent2.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY); 
    intent2.setAction(Long.toString(System.currentTimeMillis())); 
    pendingIntent2 = PendingIntent.getBroadcast(getContext(), 1, 
      intent2, PendingIntent.FLAG_UPDATE_CURRENT); 

    am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
         SystemClock.elapsedRealtime() + 15000, 
         15000, 
         pendingIntent2); 

TimeAlarm.class!

+0

のために働いている

intent2.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY); intent2.setAction(Long.toString(System.currentTimeMillis())); 

これは、あなたがこの問題を解決するのに役立つかもしれないが、私はわかりません。 Ref:http://stackoverflow.com/questions/36347187/how-to-stop-alarmmanager-when-activity-start/36349036#36349036 – Sabari

+0

@佐波里ありがとう、私はコードを混合して解決しました。しかし今、問題は私が手動でアプリを殺すときです..通知は発射され続け、私は再びアプリケーションを開いて、私はアラームマネージャがキャンセルされていない停止ボタンを押してください。 –

+0

停止ボタンのクリックイベントを完全に共有できますか? – Sabari

答えて

1

これらの行を両方のインテントから削除して、もう一度試してください。それは私

0

これを試して、エラーが表示されたら何が起こるか教えてください。

そのためには、停止ボタンでサービスを破棄し、開始ボタンをクリックしてサービスを再開する必要があります。

0

大丈夫です。 cancel()AlarmManagerに、setRepeating()メソッドで使用したものと同等のPendingIntentで呼び出すことをお勧めします。

ここでは、同等のpendingIntentの両方をキャンセルできます。

am.cancel(pendingIntent); 

am.cancel(pendingIntent2); 

それはあなたを助けることを願っています。

関連する問題