当前位置: 移动技术网 > IT编程>移动开发>Android > Android闹钟的一些注意事项

Android闹钟的一些注意事项

2018年03月02日  | 移动技术网IT编程  | 我要评论

最新笑话,鬼遮眼吓你不是目的,win 8.1 激活

Android闹钟的一些注意事项,关于Android系统的闹钟,接触过的各位肯定都是一把辛酸泪,这玩意坑的一逼,各种隐藏的问题,用起来需要格外注意。但是在一些业务中(比如后台定时心跳等),闹钟往往又是最好的方案,因此不得不去搞清楚闹钟的一些注意事项。鉴于笔者被闹钟坑的不轻,特此作文以记之。
Android系统的闹钟服务AlarmManager有两种用法,第一种是每隔一段时间响应一次,第二种是在固定的时间响应。其实这两种方式本质都是一样的,因为你把第一种的间隔时间设置成24h的话,他就是第二种闹钟了。下面看代码:

//设置闹钟
    private void setAlarmEveryday(int hour, int minute, int second, int milliSecond, String action) {
        AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT+08"));
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.set(Calendar.HOUR_OF_DAY, hour);
        calendar.set(Calendar.MINUTE, minute);
        calendar.set(Calendar.SECOND, second);
        calendar.set(Calendar.MILLISECOND, milliSecond);

        Intent intent = new Intent();
        intent.setAction(action);
        //intent.putExtra("test_alarm", "test 20s");
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
    }

这个闹钟就是在每天指定的时间点去响应一次。这里对这个指定的时间有一个要注意的地方,即:如果闹钟设置的时间比设备当前时间晚,那么设备的闹钟是正常的,它会等到设置的时间再响应;如果设置的时间比当前时间早,那么他会在设置完成后立刻响应(我有句mmp!)。响应的代码如下:

package com.xxx.receiver;

import android.app.Application;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

/**
 *
 * Created by jxl on 2017/8/24.
 */

public class StepReceiver extends BroadcastReceiver {

    private static final String TAG = "Step_Receiver";

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        Log.i(TAG, "action = " + action);
        //业务实现,注意此处的context生命周期很短
    }
}

注册一个广播接收器,针对上面设置的action进行监听。一旦闹钟响应,就会触发广播接收器,此时可以执行相关的操作。
为什么要设置action呢?其实是为了防止一个坑,就是如果前后两次设置相同时间的闹钟,后面一个会覆盖前一个闹钟,而这两个闹钟往往是实现不一样的功能。为了防止这种情况,我们需要保证两个闹钟的PendingIntent 值不相同。怎样保证不相同呢?网络上有很多种说法,在此不去赘述,只说一下,设置不同的action即可。
如果是需要某段时间之后响应,那更简单:

    Intent intent =new Intent(this, AlarmReceiver.class);  
    PendingIntent sender= PendingIntent.getBroadcast(this, 0, intent, 0);  
    long firstime = SystemClock.elapsedRealtime();  
    AlarmManager am=(AlarmManager)getSystemService(ALARM_SERVICE);  
    //5秒一个周期,不停的发送广播  
    am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstime, 5 * 1000, sender);  

    //这个是设置一次性的闹钟
    //am.set(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(),pendingIntent);

好了,关于闹钟就是这些,希望对刚接触闹钟的你有所帮助。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网