2013-08-25 64 views
3

我有要運行的代碼每天;爲此,我正在嘗試使用AlarmManager。這是我對觸發報警代碼:Android中的AlarmManager

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

    Intent i = new Intent(this, AlarmReciever.class); 
    PendingIntent pi = PendingIntent.getService(this, 0, i, 0); 
    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 
    am.cancel(pi); // cancel any existing alarms 
    am.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, 
     SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_DAY, 
     AlarmManager.INTERVAL_DAY, pi); 
} 

的這部分代碼在調用AlarmReciever類如預期,但我想在AlarmReciever類的代碼,每天執行一次。它被稱爲多次。我如何限制它?

這是AlarmReciever類:

public class AlarmReciever extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     System.out.println("in alarm reciever class"); 

    } 
} 

我想在onReceive()方法執行一些業務邏輯。

在manifest.xml文件:

<receiver android:name="com.xyz.reciever.AlarmReciever"></receiver> 

<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/> 

聲明。

+0

你的意思是它不斷令人震驚? – kabuto178

+0

@ kabuto178是它不斷警惕....我在AlarmReciever類中有一個sysout,並且它的打印不斷...沒有像預期的那樣。 –

+1

您是否嘗試使用日曆對象作爲時間參考? – kabuto178

回答

0

我相信你應該使用設置你的報警代碼將是這樣的:

Intent i = new Intent(this, AlarmReciever.class); 
PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0);  // <- HERE!! 
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 
am.cancel(pi); // cancel any existing alarms 
am.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, 
    SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_DAY, 
    AlarmManager.INTERVAL_DAY, pi); 

因爲你AlarmRecieverBroadcastReceiver。使用PendingIntent.getBroadcast()

如果您在接收方的onReceive()方法中有很多工作要做,您也可以將其委派給IntentService。如果您決定這樣做,請致電See this answer

+0

當使用'PendingIntent.getBroadcast()'時,'AlarmReciever'類不被調用。 –

+1

@AnilM,您需要確保接收器列在AndroidManifest.xml文件中。例如''receiver android:name ='your.mypackage.AlarmReceiver'>'。你可以[看到這個更完整的關於如何使用AlarmManager的教程](http://www.javacodegeeks.com/2012/09/android-alarmmanager-tutorial.html) – Nate

+0

@AnilM,同時,確保拼寫在清單xml文件中匹配代碼中的拼寫。你實際上拼寫錯誤'AlarmReceiver'(我<-> e)...但重要的是拼寫匹配,當然。 – Nate