3

我有每天运行的代码;为此,我正在尝试使用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"/>

被宣布。

4

1 回答 1

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);

因为你AlarmReciever是一个BroadcastReceiver. 使用PendingIntent.getBroadcast().

如果你在接收者的方法中有很多工作要做onReceive(),你也可以将它委托给一个IntentService. 如果您决定这样做,请参阅此答案。

于 2013-08-25T05:08:09.297 回答