本文将详细介绍如何在Android应用中实现重复报警功能。示例代码可在以下路径找到:
https://developer.android.com/samples/RepeatingAlarm/index.html
首先,我们从Manifest文件开始分析。
android:label="@string/app_name"
android:icon="@drawable/ic_launcher"
android:theme="@style/AppTheme">
android:label="@string/app_name"
android:uiOptiOns="splitActionBarWhenNarrow">
该应用程序仅包含一个名为MainActivity的Activity。
在MainActivity的onCreate()方法中,添加了一个名为RepeatingAlarmFragment的Fragment。
```java
public static final String TAG = "MainActivity";
public static final String FRAGTAG = "RepeatingAlarmFragment";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (getSupportFragmentManager().findFragmentByTag(FRAGTAG) == null) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
RepeatingAlarmFragment fragment = new RepeatingAlarmFragment();
transaction.add(fragment, FRAGTAG);
transaction.commit();
}
}
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.sample_action) {
Intent intent = new Intent(getActivity(), MainActivity.class);
intent.setAction(Intent.ACTION_MAIN);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
PendingIntent pendingIntent = PendingIntent.getActivity(getActivity(), REQUEST_CODE,
intent, 0);
int alarmType = AlarmManager.ELAPSED_REALTIME;
final int FIFTEEN_SEC_MILLIS = 15000;
AlarmManager alarmManager = (AlarmManager)
getActivity().getSystemService(getActivity().ALARM_SERVICE);
// setRepeating 方法接受启动延迟时间和报警间隔作为参数。
// 下面的代码在15秒后触发,并每15秒重复一次。这在演示中非常有用,但在生产环境中非常糟糕。
alarmManager.setRepeating(alarmType, SystemClock.elapsedRealtime() + FIFTEEN_SEC_MILLIS,
FIFTEEN_SEC_MILLIS, pendingIntent);
Log.i("RepeatingAlarmFragment", "Alarm set.");
}
return true;
}
```
如果用户点击了操作栏中的某个项,会创建一个新的PendingIntent来启动MainActivity。然后通过AlarmManager设置这个PendingIntent,使其每15000毫秒(即15秒)运行一次。也就是说,只要用户点击了这个项,MainActivity就会每15秒运行一次。