前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android设置闹钟

Android设置闹钟

作者头像
提莫队长
发布2019-02-21 11:02:13
1.5K0
发布2019-02-21 11:02:13
举报
文章被收录于专栏:刘晓杰刘晓杰

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

代码语言:javascript
复制
setWindow(int, long, long, PendingIntent)
setExact(int, long, PendingIntent)

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

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

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

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

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

代码语言:javascript
复制
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.手机重启之后,设置的闹钟是否还有效?

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

代码语言:javascript
复制
public class BootCompleteReceiver extends BroadcastReceiver {

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

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

在Service的onDestroy函数中调用startService

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年05月26日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.如何设置一个闹钟每天都准确提醒呢?
  • 2.手机重启之后,设置的闹钟是否还有效?
  • 3.应用程序被杀死之后,闹钟是否还有效?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档