0

アラームマネージャと保留中のインテントを使用してプッシュ通知をセットアップすると、異常な動作が表示されます。何らかの理由で、アプリを開いた後、通知が1分以内に表示されます。時には1分に1回より多くの場合、それはしばらく表示されません。私の考えは、ユーザーが24時間以上で私のアプリケーションにアクセスしていないと仮定して、通知を1日1回出すようにすることです。私は以前のタイマーをキャンセルし、ユーザーが次回に自分のアプリにアクセスしたときに1日間新しいタイマーを開始するつもりです。以下は私のコードです。プッシュ通知が不規則に繰り返されるのはなぜですか?

public class Main_Menu extends AppCompatActivity { 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main_menu); 

    this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 


    Button goToGame1; 

    goToGame1 = (Button) findViewById(R.id.Game1); 
    goToGame1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent beAtGame1 = new Intent(Main_Menu.this, memory_modes.class); 
      startActivity(beAtGame1); 
     } 
    }); 


Button goToGame2; 

    goToGame2 = (Button) findViewById(R.id.Game2); 
    goToGame2.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent beAtGame2 = new Intent(Main_Menu.this, computation_modes.class); 
      startActivity(beAtGame2); 
     } 
    }); 


Button goToGame3; 

    goToGame3 = (Button) findViewById(R.id.Game3); 
    goToGame3.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent beAtGame3 = new Intent(Main_Menu.this, evaluation_modes.class); 
      startActivity(beAtGame3); 
     } 
    }); 


    Button goToGame4; 

    goToGame4 = (Button) findViewById(R.id.Game4); 
    goToGame4.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent beAtGame4 = new Intent(Main_Menu.this, attention_modes.class); 
      startActivity(beAtGame4); 
     } 
    }); 


    Button goToTrackers; 

    goToTrackers = (Button) findViewById(R.id.Trackers); 
    goToTrackers.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent beAtTrackers = new Intent(Main_Menu.this,trackerMenu.class); 
      startActivity(beAtTrackers); 
     } 
    }); 



    Intent intent = new Intent(Main_Menu.this, Receiver.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(Main_Menu.this, 1, intent, 0); 
    AlarmManager alarm = (AlarmManager)getSystemService(ALARM_SERVICE); 
    alarm.cancel(pendingIntent); 
    alarm.setRepeating(alarm.RTC_WAKEUP, System.currentTimeMillis(), alarm.INTERVAL_DAY, pendingIntent); 


    } 

public void onBackPressed() { 
    Intent intent = new Intent(Intent.ACTION_MAIN); 
    intent.addCategory(Intent.CATEGORY_HOME); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(intent); 
} 

} 

public class Receiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
    showNotification(context); 
} 

public void showNotification(Context context) { 
    Intent intent = new Intent(context, Main_Menu.class); 
    PendingIntent pi = PendingIntent.getActivity(context, 1, intent, 0); 
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context) 
      .setSmallIcon(R.drawable.smalliconfinal) 
      .setColor(Color.argb(000,255,177,17)) 
      .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.icon4)) 
      .setContentTitle("Title") 
      .setContentText("Some text."); 
    mBuilder.setLights(0xffffb111, 750, 750); 
    mBuilder.setContentIntent(pi); 
    mBuilder.setDefaults(Notification.DEFAULT_SOUND); 
    mBuilder.setAutoCancel(true); 
    NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
    mNotificationManager.notify(1, mBuilder.build()); 
} 

} 

と私のマニフェストから:この問題が発生する理由

<receiver android:name=".Receiver"></receiver> 

誰もが知っていますか?

大変ありがとうございます。 ありがとうございます。

答えて

1

AlarmManager.setRepeatingメソッドの2番目のパラメータは、アラームが最初に消えるべき時間です。

あなたはこれらのパラメータを使用してこのメ​​ソッドを呼び出している:

あなたはできるだけ早くあなたが( Main_Menu活動が作成された)メソッドを呼び出すとオフに行くために繰り返しアラームを設定していることを意味し
alarm.setRepeating(alarm.RTC_WAKEUP, System.currentTimeMillis(), alarm.INTERVAL_DAY, pendingIntent); 

あなたの説明から、あなたはこのような何かを探しているように思える:感謝

alarm.setRepeating(AlarmManager.RTC_WAKEUP, (System.currentTimeMillis() + AlarmManager.INTERVAL_DAY), AlarmManager.INTERVAL_DAY, pendingIntent); 
+0

。 – 4u53r

関連する問題