AlarmManager提供了一种系统级的提示服务,允许你安排在将来的某个时间执行一个服务。AlarmManager对象一般通过Context.getSystemService(Context.ALARM_SERVICE)方法获得。
下面看一个例子加深理解:
package com.app;
import com.app.R;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
/**
*
* 测试AlarmManager
*/
public class MainActivity extends Activity {
// 声明Button
private Button setBtn, cancelBtn;
// 定义广播Action
private static final String BC_ACTION = "com.action.BC_ACTION";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 设置当前布局视图
setContentView(R.layout.main);
// 实例化Button
setBtn = (Button) findViewById(R.id.Button01);
cancelBtn = (Button) findViewById(R.id.Button02);
// 获得AlarmManager实例
final AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
// 实例化Intent
Intent intent = new Intent();
// 设置Intent action属性
intent.setAction(BC_ACTION);
intent.putExtra("msg", "你该去开会啦!");
// 实例化PendingIntent
final PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this, 0,
intent, 0);
// 获得系统时间
final long time = System.currentTimeMillis();
// 设置按钮单击事件
setBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 重复提示,从当前时间开始,间隔5秒
am.setRepeating(AlarmManager.RTC_WAKEUP, time,
5 * 1000, pi);
}
});
// 设置按钮单击事件
cancelBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
am.cancel(pi);
}
});
}
}
注:PendingIntent的一个静态方法,
public static PendingIntent getBroadcast(Context context,
int requestCode,
Intent intent,
int flags)
Context.sendBroadcast().
context - The Context in which this PendingIntent should perform the broadcast.requestCode - Private request code for the sender (currently not used).intent - The Intent to be broadcast.flags - May be FLAG_ONE_SHOT, FLAG_NO_CREATE,FLAG_CANCEL_CURRENT,
FLAG_UPDATE_CURRENT, or any of the flags as supported byIntent.fillIn() to control which unspecified parts of the intent that can be supplied when the actual send happens.FLAG_NO_CREATE has been supplied.
package com.app;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 获得提示信息
String msg = intent.getStringExtra("msg");
// 显示提示信息
Toast.makeText(context, msg, Toast.LENGTH_LONG).show();
}
}
<receiver android:name="MyReceiver">
<intent-filter>
<action android:name="com.action.BC_ACTION"/>
</intent-filter>
</receiver>结果:
原文:http://blog.csdn.net/itzyjr/article/details/19092433