android – 从我的应用程序设置警报

我想从我的应用程序创建一个警报对象.我正在写一个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);

我尝试使用上面的代码设置闹钟,但我无法.我也没有得到任何错误:(

解决方法

正如@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" />

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...