8***@qq.com
8***@qq.com
  • 发布:2019-07-09 18:42
  • 更新:2022-04-30 17:08
  • 阅读:6416

native.js实现AlarmManager定时任务

分类:Native.js

由于公司业务需要,必须需要定时任务,以前从来没用过JAVA写代码,只能先研究了原生代码,再研究了《Android平台通过native.js实现接收系统消息,如监听安装卸载apk事件》,有了以下代码,在android9.0通过测试,代码如下:

var AlarmManager;  
var PendingIntent;  
var Intent;  
var IntentFilter;  
var Context;  
var Calendar;  
var main;  
var System;  
var receiver;  
var ALARM_EVENT = "com.kkaass.alarm";  

mui.plusReady(function(){  
    AlarmManager = plus.android.importClass('android.app.AlarmManager');  
    PendingIntent = plus.android.importClass('android.app.PendingIntent');  
    Intent = plus.android.importClass('android.content.Intent');  
    IntentFilter = plus.android.importClass('android.content.IntentFilter');  
    Context = plus.android.importClass('android.content.Context');  
    receiver = plus.android.implements('io.dcloud.android.content.BroadcastReceiver',{  
        onReceive:function(context,intent){  
            if(intent != null){  
                console.log('闹铃来了');  
                SetAlarm();  
            }  
        }  
    });  
    main = plus.android.runtimeMainActivity();  
    Calendar = plus.android.importClass('java.util.Calendar');  
    System = plus.android.importClass('java.lang.System');  
    var intentfilter = new IntentFilter();  
    intentfilter.addAction(ALARM_EVENT);  
    main.registerReceiver(receiver,intentfilter)  

});  

function SetAlarm(){  
    var intent = new Intent(ALARM_EVENT);  
    var pendingintent = PendingIntent.getBroadcast(main,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);  
    var alarmManager =main.getSystemService(Context.ALARM_SERVICE);  
    var calendar = Calendar.getInstance();  
    calendar.setTimeInMillis(System.currentTimeMillis());  
    calendar.add(Calendar.SECOND,20);  
    alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pendingintent);//setAndAllowWhileIdle方法API>=23才能使用  

}
3 关注 分享
DCloud_heavensoft SimpleJalon linnian

要回复文章请先登录注册

深蓝的一片海

深蓝的一片海

没效果啊
2022-04-30 17:08
1***@qq.com

1***@qq.com

var pendingintent = PendingIntent.getBroadcast(main,0,intent,PendingIntent.FLAG_UPDATE_CURRENT); 这段代码直接报错了,不知道为啥
2021-08-30 22:09
linnian

linnian

回复 l***@21cn.com :
虽然很古老了,但还有一定的参考价值。
它放到里面是为了接收器接收到的时候再次创建闹钟啊,大哥
2020-09-25 17:01
l***@21cn.com

l***@21cn.com

回复 l***@21cn.com :
还有就是,退出app后,无法执行
2020-04-27 20:53
l***@21cn.com

l***@21cn.com

这是一段扯蛋的代码,SetAlarm()怎么房租receive里面?应该是先调用SetAlarm(),然后在receive里处理逻辑。
2020-04-27 20:48
1***@qq.com

1***@qq.com

顶,字数补丁
2020-03-06 10:39
DCloud_heavensoft

DCloud_heavensoft

欢迎提交到插件市场[https://ext.dcloud.net.cn/](https://ext.dcloud.net.cn/),选Native.js分类
2019-08-01 21:32
6***@qq.com

6***@qq.com

我的华为P30 pro。程序运行到 main = plus.android.runtimeMainActivity()停止不走了
2019-07-17 17:31
it_dyh

it_dyh

谢谢哦。我是用红米手机 安卓系统7.1.2 测试您的这段代码,发现没执行定时接收的代码,哈哈。尴尬了
2019-07-14 22:38
8***@qq.com

8***@qq.com (作者)

回复 it_dyh :
本代码我在华为安卓9。0,小米8。0,OPPO8。1测试通过,除OPPO有延时外,其余一切正常,需要api23以上,本来需要做api版本判断。手机上要设置后台运行,电池设置关闭省电模式,你说的这个代码我没去跑过
2019-07-14 22:17