我想从我的应用程序创建一个警报对象.我正在写一个To-Do应用程序,它可以选择在手机上设置闹钟.
我想设置日期和时间以及警报的标签.
Calendar c = Calendar.getInstance(); c.setTimeInMillis(System.currentTimeMillis()); c.clear(); c.set(Calendar.YEAR,mYear); c.set(Calendar.MONTH,mMonth); c.set(Calendar.DAY_OF_MONTH,mDay); c.set(Calendar.HOUR,mHour); c.set(Calendar.MINUTE,mMinute); Intent activate = new Intent(this,alaram.class); AlarmManager alarams ; PendingIntent alarmIntent = PendingIntent.getBroadcast(this,activate,0); alarams = (AlarmManager) getSystemService(this.ALARM_SERVICE); alarams.set(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(),alarmIntent);
@R_301_323@@H_301_10@
正如@stealthcopter所说,AlarmManager用于引发应用程序可以捕获的警报,然后执行某些操作.这是我从其他帖子,教程和我已完成的工作中汇总的一个小例子.
Main.java
Intent i = new Intent(this,OnAlarmReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(this,i,PendingIntent.FLAG_ONE_SHOT);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.SECOND,calendar.get(Calendar.SECOND) + 10);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pi);
OnAlarmReceiver.java
public class OnAlarmReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context,Intent intent) {
WakeIntentService.acquireStaticLock(context);
Intent i = new Intent(context,AlarmService.class);
context.startService(i);
}}
WakeIntentService.java
public abstract class WakeIntentService extends IntentService {
abstract void doReminderWork(Intent intent);
public static final String LOCK_NAME_STATIC = "com.android.voodootv.static";
private static PowerManager.WakeLock lockStatic = null;
public static void acquireStaticLock(Context context) {
getLock(context).acquire();
}
synchronized private static PowerManager.WakeLock getLock(Context context) {
if (lockStatic == null) {
PowerManager powManager = (PowerManager) context
.getSystemService(Context.POWER_SERVICE);
lockStatic = powManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,LOCK_NAME_STATIC);
lockStatic.setReferenceCounted(true);
}
return (lockStatic);
}
public WakeIntentService(String name) {
super(name);
}
@Override
final protected void onHandleIntent(Intent intent) {
try {
doReminderWork(intent);
} finally {
getLock(this).release();
}
}}
AlarmService.java
public class AlarmService extends WakeIntentService {
public AlarmService() {
super("AlarmService");
}
@Override
void doReminderWork(Intent intent) {
NotificationManager manager = (NotificationManager)
getSystemService(NOTIFICATION_SERVICE);
Intent notificationIntent = new Intent(this,Main.class);
PendingIntent pi = PendingIntent.getActivity(this,notificationIntent,PendingIntent.FLAG_ONE_SHOT);
Notification note = new Notification(R.drawable.icon,"Alarm",System.currentTimeMillis());
note.setLatestEventInfo(this,"Title","Text",pi);
note.defaults |= Notification.DEFAULT_ALL;
note.flags |= Notification.FLAG_AUTO_CANCEL;
int id = 123456789;
manager.notify(id,note);
}
}
此示例将在10秒后在状态栏上创建通知.
希望能帮助到你.
还先发帖在这里:)
哦差点忘了,
AndroidManifest.xml中
<receiver android:name="com.android.alarmmanagertest.OnAlarmReceiver" />
<service android:name="com.android.alarmmanagertest.AlarmService" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
Main.java
Intent i = new Intent(this,OnAlarmReceiver.class); PendingIntent pi = PendingIntent.getBroadcast(this,i,PendingIntent.FLAG_ONE_SHOT); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.SECOND,calendar.get(Calendar.SECOND) + 10); AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); alarmManager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pi);
OnAlarmReceiver.java
public class OnAlarmReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context,Intent intent) { WakeIntentService.acquireStaticLock(context); Intent i = new Intent(context,AlarmService.class); context.startService(i); }}
WakeIntentService.java
public abstract class WakeIntentService extends IntentService { abstract void doReminderWork(Intent intent); public static final String LOCK_NAME_STATIC = "com.android.voodootv.static"; private static PowerManager.WakeLock lockStatic = null; public static void acquireStaticLock(Context context) { getLock(context).acquire(); } synchronized private static PowerManager.WakeLock getLock(Context context) { if (lockStatic == null) { PowerManager powManager = (PowerManager) context .getSystemService(Context.POWER_SERVICE); lockStatic = powManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,LOCK_NAME_STATIC); lockStatic.setReferenceCounted(true); } return (lockStatic); } public WakeIntentService(String name) { super(name); } @Override final protected void onHandleIntent(Intent intent) { try { doReminderWork(intent); } finally { getLock(this).release(); } }}
AlarmService.java
public class AlarmService extends WakeIntentService { public AlarmService() { super("AlarmService"); } @Override void doReminderWork(Intent intent) { NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); Intent notificationIntent = new Intent(this,Main.class); PendingIntent pi = PendingIntent.getActivity(this,notificationIntent,PendingIntent.FLAG_ONE_SHOT); Notification note = new Notification(R.drawable.icon,"Alarm",System.currentTimeMillis()); note.setLatestEventInfo(this,"Title","Text",pi); note.defaults |= Notification.DEFAULT_ALL; note.flags |= Notification.FLAG_AUTO_CANCEL; int id = 123456789; manager.notify(id,note); } }
此示例将在10秒后在状态栏上创建通知.
希望能帮助到你.
还先发帖在这里:)
哦差点忘了,
AndroidManifest.xml中
<receiver android:name="com.android.alarmmanagertest.OnAlarmReceiver" /> <service android:name="com.android.alarmmanagertest.AlarmService" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.VIBRATE" />