Android设置闹钟

从API 19以后,setRepeating不再准确。因此,采用了如下方法:

setWindow(int, long, long, PendingIntent)
setExact(int, long, PendingIntent)

从上面的两个方法我们可以看出,没有了repeat,就是设置了闹钟只能响一次了,而且这两种方法都可以设置精确的,第一个相对于第二种方法来说,应该是比较省电的。因为setWindow这个方法允许应用程序利用电池优化来自交货批处理即使它适度的及时性要求警报。

因此需要解决如下几个主要问题:

1.如何设置一个闹钟每天都准确提醒呢?
2.手机重启之后,设置的闹钟是否还有效?
3.应用程序被杀死之后,闹钟是否还有效?

1.如何设置一个闹钟每天都准确提醒呢?

提醒完毕可以再重新设置一次

public class AlarmReceiver extends BroadcastReceiver {
    private AlarmManager alarmManager;
    private PendingIntent operation;

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("test", "ProcessAlarmReceiver..........");

        // context.startActivity(new Intent(context, MainActivity.class)
        // .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
        // 不能用startActivity,会导致生成无数个activity

        alarm(context, intent);
    }

    /**
     * 如何设置一个闹钟每天都准确提醒呢?提醒完毕可以再重新设置一次
     */
    private void alarm(Context context, Intent intent) {
        alarmManager = (AlarmManager) context
                .getSystemService(Context.ALARM_SERVICE);

        long triggerAtTime = System.currentTimeMillis();

        long interval = 1000 * 5;// 5s

        operation = PendingIntent.getBroadcast(context, 0, intent, 0);
        alarmManager.setWindow(AlarmManager.RTC_WAKEUP, triggerAtTime,
                interval, operation);
    }
}

2.手机重启之后,设置的闹钟是否还有效?

监听开机启动(这项功能最好在虚拟机里测试,我的华为手机貌似把这项功能给屏蔽了)

public class BootCompleteReceiver extends BroadcastReceiver {

    /**
     * 手机重启之后,设置的闹钟是否还有效?
     */
    @Override
    public void onReceive(Context arg0, Intent arg1) {
        arg0.startService(arg1);
    }
}

3.应用程序被杀死之后,闹钟是否还有效?

在Service的onDestroy函数中调用startService

public class AlarmService extends Service {
    private Intent intent;

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        this.intent = intent;
        sendBroadcast(new Intent("com.example.alarmtest.PROCESS_ALARM"));
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        /**
         * 应用程序被杀死之后,闹钟是否还有效?
         * 只要手机开机,应用程序就永久运行
         */
        startService(intent);
    }
}

参考文章:http://mp.weixin.qq.com/s?__biz=MjM5NDkxMTgyNw==&mid=2653057518&idx=1&sn=5ec26db7c8a3e887845935eae77113fd&scene=4#wechat_redirect

代码地址:http://download.csdn.net/detail/lxj1137800599/9532156

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值