2016-09-19 67 views
0

我試圖設置一個鬧鐘,它會在特定日期的特定時間給予通知一次,但它會在給定的時間後連續發出通知。並且在應用程序關閉時通知不起作用。但是我想在後臺運行通知過程.Essential權限已被添加到清單中,廣播接收器也被使用。代碼如下。如何創建非重複警報?

private PendingIntent pendingIntent; 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Calendar calendar = Calendar.getInstance(); 

    calendar.set(Calendar.MONTH, Calendar.SEPTEMBER); 
    //calendar.set(Calendar.YEAR, 2016); 
    calendar.set(Calendar.DAY_OF_MONTH, 15); 

    calendar.set(Calendar.HOUR_OF_DAY, 22); 
    calendar.set(Calendar.MINUTE, 30); 
    calendar.set(Calendar.SECOND, 05); 
    //calendar.set(Calendar.AM_PM,Calendar.PM); 
    final int id = (int) System.currentTimeMillis(); 
    Intent myIntent = new Intent(MainActivity.this, AlarmReceiver.class); 
    PendingIntent pendingIntent= PendingIntent.getBroadcast(MainActivity.this, id, myIntent,PendingIntent.FLAG_UPDATE_CURRENT); 

    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
    alarmManager.set(AlarmManager.RTC_WAKEUP, 
      calendar.getTimeInMillis(), pendingIntent); 
    // If the alarm has been set, cancel it. 
    /*if (alarmManager!= null) { 
     alarmManager.cancel(pendingIntent); 
    }*/ 



} //end onCreate 

}

回答

0

而是在活動中做這個報警的工作,使用服務所以它會在後臺運行,而不需要對GUI的佈局的。這將解決您的通知問題。 你可以開始here

0

檢查此鏈接 Alarm Manager Example 並更換該 am.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis的(),1000 * 60 * 10,PI);由此 am.set(AlarmManager.RTC_WAKEUP,1000 * 60 * 10,pi);

0
new java.util.Timer().schedule(
     new java.util.TimerTask() { 
      @Override 
      public void run() { 
       //instert youre function here 
      } 
     }, 
     50000//or any time until it happend 
); 

希望這對你的工作......

+0

但它有時會重複。我想永久關閉它 – Murtaza

0

試試這個

一個處理程序,您可以發送和處理信息,並與一個線程的MessageQueue Handler

Handler handler = new Handler(); 

    Runnable runnable = new Runnable() { 
    public void run() { 
     //your code 
    handler.postDelayed(runnable, 1000); 
    } 
}; 
handler.post(runnable); 
0
相關Runnable對象

是的,我測試了你的代碼,通知沒有重複。

  1. Alarm Manager保存所有報警,直到重新啓動設備。一旦重新啓動設備(關閉和打開),它將釋放所有警報。所以你應該在「boot_completed」之後額外設置鬧鐘。

    public class DeviceBootReceiver extends BroadcastReceiver { 
    
    private static final String TAG = "DeviceBootReceiver"; 
    private Context mContext; 
    
    @Override 
    public void onReceive(Context context, Intent intent) { 
    mContext = context; 
    if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) { 
    // set the Alarm again here... 
    setReminderAlarm(context); 
        } 
    } 
    
  2. 你應該在Android清單文件註冊。

    <receiver android:name="com.tcalender.calendartelugu.activity.DeviceBootReceiver" 
    android:enabled="true"> 
    <intent-filter> 
        <action android:name="android.intent.action.BOOT_COMPLETED"/> 
    </intent-filter> 
    </receiver> 
    

3 alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),的PendingIntent);應該只執行一次。

  1. 即使我們關閉了它應該工作的應用程序。