0

我是新來的android開發...試圖建立應用程序發送通知在特定的時間daily.First第一次,如果我點擊通知它打開應用程序和通知不會再來。但之後如果我打開應用程序它再次顯示通知..如何停止再次顯示它?但只在特定時間顯示? ..Android - 如何停止顯示通知時打開應用程序

MainAcitivty代碼:

public class MainActivity extends AppCompatActivity { 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Calendar calendar = Calendar.getInstance(); 
     calendar.set(Calendar.HOUR_OF_DAY, 8); 
     calendar.set(Calendar.MINUTE, 36); 
     calendar.set(Calendar.SECOND, 0); 
     Intent intent = new Intent(MainActivity.this, AlarmReceiver.class); 
     pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
     AlarmManager am = (AlarmManager) MainActivity.this.getSystemService(MainActivity.this.ALARM_SERVICE); 
     am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent); 
     Intent i = getIntent(); 
     if (i.getBooleanExtra("STARTED_BY_RECEIVER", false)) { 
      pendingIntent.cancel(); 
     } 
    } 

AlarmReceiver類是:

public class AlarmReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 

     intent = new Intent(context, MainActivity.class); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     intent.putExtra("STARTED_BY_RECEIVER", true); 
     PendingIntent pendingIntent = PendingIntent.getActivity(context, 100, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
     NotificationCompat.Builder builder = (NotificationCompat.Builder) new NotificationCompat.Builder(context) 
       .setSmallIcon(R.mipmap.ic_launcher) 
       .setContentIntent(pendingIntent) 
       .setContentText("notification text") 
       .setContentTitle("notification title") 
       .setAutoCancel(true) 
       .setOngoing(true); 
     notificationManager.notify(100, builder.build()); 
} 
} 
+0

我認爲你必須運行am.setRepeating一次。不要把它寫在onCreate上。 –

+0

可能是因爲我重新啓動手機..所以我從我的問題刪除該行 –

回答

1

你的主要活動是這樣的: -

public class MainActivity extends AppCompatActivity { 

private PendingIntent pendingIntent; 

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

    Intent i = getIntent(); 

    Calendar calendar = Calendar.getInstance(); 
    calendar.set(Calendar.HOUR_OF_DAY, 1); 
    calendar.set(Calendar.MINUTE, 49); 
    calendar.set(Calendar.SECOND, 0); 
    calendar.set(Calendar.AM_PM,Calendar.PM); 

    if(calendar.getTimeInMillis()>System.currentTimeMillis()){ 

     Intent intent = new Intent(MainActivity.this, AlarmReceiver.class); 
     pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
     AlarmManager am = (AlarmManager) MainActivity.this.getSystemService(MainActivity.this.ALARM_SERVICE); 
     am.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 24*60*60*1000, pendingIntent); //Repeat every 24 h 


    } 
    else{ 

     Toast.makeText(getApplicationContext(),"Always set value with greater than current time",Toast.LENGTH_SHORT).show(); 
    } 




} 

}

,並把下面的代碼對你reciever: -

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

    intent = new Intent(context, MainActivity.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    intent.putExtra("STARTED_BY_RECEIVER", true); 
    context.startActivity(intent); 

    PendingIntent pendingIntent = PendingIntent.getActivity(context, 100, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    NotificationCompat.Builder builder = (NotificationCompat.Builder) new NotificationCompat.Builder(context) 
      .setSmallIcon(R.mipmap.ic_launcher) 
      .setContentIntent(pendingIntent) 
      .setContentText("notification text") 
      .setContentTitle("notification title") 
      .setAutoCancel(true) 
      .setOngoing(true); 
    notificationManager.notify(100, builder.build()); 
+0

感謝兄弟問題解決:) –

+0

@KhizarMurad: - 最受歡迎。 –

相關問題