2017-06-01 48 views
0

我試圖建立應用程序,它會在特定的時間每天發送通知..我用.setOngoing(真)後重復.setAutoCancel(真)因爲我想堅持通知,除非用戶通過點擊通知打開應用程序。但當應用程序打開通知消失並在幾秒鐘後再次顯示..如何停止顯示通知時打開應用程序,但只在特定的時間?Android的 - 通知開幕活動

MainActivity代碼:

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, 16); 
     calendar.set(Calendar.MINUTE, 6); 
     calendar.set(Calendar.SECOND, 0); 
     Intent intent = new Intent(MainActivity.this, AlarmReceiver.class); 
     PendingIntent 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); 

    } 

} 

AlarmReceiver類是:

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

    Intent intent1 = new Intent(context, MainActivity.class); 
    intent1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

    PendingIntent pendingIntent = PendingIntent.getActivity(context, 100, intent1, PendingIntent.FLAG_UPDATE_CURRENT); 

    NotificationCompat.Builder builder = (NotificationCompat.Builder) new NotificationCompat.Builder(context) 
      .setSmallIcon(R.drawable.ic_stat_name) 
      .setContentIntent(pendingIntent) 
      .setContentText("notification text") 
      .setContentTitle("notification title") 
      .setAutoCancel(true) 
      .setOngoing(true); 
    notificationManager.notify(100, builder.build()); 

} 

}

+0

爲什麼使用'.setAutoCancel(true)',而您可以使用'notification_id'來取消通知,即在您的代碼中是100? – Wizard

+0

問題不在於取消通知,而是在幾秒鐘後再次出現通知,我該如何停止再次出現? –

+0

我嘗試使用通知ID取消通知,但通知再次出現.. :( –

回答

1

在你mainactivity把這個代碼: -

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

我很高興你幫助我..現在第一次,如果我通過點擊通知打開應用程序,通知消失,應用程序打開,並且通知不會再次出現..但是,如果我打開應用程序,然後幾秒鐘後再次出現通知 –

+0

所以你想怎麼樣?意味着根據您的要求我已經這樣做了,但是當你關閉應用程序並重新打開時,你會收到通知,因爲鬧鐘提醒你時間設定了你。 –