0

2分ごとに通知を作成しようとしていますが、通知が1つだけ作成されています(アプリ起動時)。 私のコードは次のとおりです。なぜ2分ごとにアンドロイド通知が行われないのですか?

notifyme.java:MainActivity.javaで

public class notifyme extends Service { 
    @Override 
    public void onCreate() { 
    super.onCreate(); 

    Intent intent=new Intent(this,MainActivity.class); 

    TaskStackBuilder stackBuilder=TaskStackBuilder.create(this); 
    stackBuilder.addParentStack(MainActivity.class); 
    stackBuilder.addNextIntent(intent); 

    PendingIntent pendingIntent=stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT); 
    NotificationCompat.Builder notify=new NotificationCompat.Builder(this) 
      .setSmallIcon(R.drawable.ic_launcher) 
      .setContentTitle("Hello") 
      .setContentText("Some random text") 
      .setDefaults(Notification.DEFAULT_ALL) 
      .setWhen(System.currentTimeMillis()) 
      .setContentIntent(pendingIntent) 
      .setAutoCancel(true); 

    NotificationManager nMgr=(NotificationManager)this.getSystemService(this.NOTIFICATION_SERVICE); 
    Random r=new Random(); 
    int nid=r.nextInt(50000)+1; 
    nMgr.notify(nid,notify.build()); 
} 





@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 
} 

:すべての

Intent notificationIntent = new Intent(this, notifyme.class); 
PendingIntent contentIntent =  PendingIntent.getService(getApplicationContext(), 0, notificationIntent,0); 
AlarmManager am = (AlarmManager) getSystemService(this.ALARM_SERVICE); 
am.cancel(contentIntent); 
am.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(),120*1000, contentIntent); 

答えて

0

まず通知を表示するためにサービス全体が必要なわけではありませんが、それがすべての場合はBroadcastReceiverを使用し、PendingIntent.getBroadcastメソッドを使用できます。 BroadcastReceiverはメモリを必要とせず、ライフサイクルを持たない(事態を複雑にする可能性がある)。

複数の通知を見ていない理由は、ラインnMgr.notify(119,notify.build());

この数119は通知IDである上にあります。だから、X秒後にもう一度そのコードを実行していると、新しい通知が古い通知を直接置き換えていて、変更されていないかのように見えます。

複数の通知(AKA。SPAMユーザー)を追加する場合は、常にその番号を変更する必要があります。おそらくaを使用Random

+0

それを 'BroadcastReceiver'に変更します。あなたのサービスは最初のものによって作成され、破壊されないので、再び作成されません。 – Budius

+0

BroadcastReceiverは同じ通知IDが提供されても、以前の通知がクリアされない場合でも通知音を出します1つ(必要に応じて)。ありがとうございました – abhi96

0

まず、ガイドラインに対して完全に2秒ごとに新しい通知を行います。 docsとして

は言う:

あなたがイベントの同じタイプ の通知を複数回発行する必要がある場合、あなたは完全に新しい通知を行うことは避けるべきです。 代わりに、以前の通知を更新することを検討する必要があります。 の値の一部を変更するか、またはその値を追加するか、またはその両方を行います。

ここで問題は、あなたが通知を作成するために同じIDを使用していることです。 (ここでは19)。

通知を発行するときに、同じIDを持つアクティブな通知がある場合。通知マネージャは既存のマネージャを更新します。したがって、サービスが実行されるたびに、通知がID「19」で更新されます。

2分ごとに通知を送信することに熱心であれば(あなたのアプリのユーザーエクスペリエンスに非常に悪影響を及ぼしますので、警告してください)、通知に異なるIDを付けてみてください。発行されたIDはSharedPreferencesなどで保存できます。

+0

チェックしたことがありますか? –

関連する問題