Rexsee API介绍:Android定时任务Alarm,附基本的闹钟功能示例

Android调用系统闹钟AlarmClock 一、效果展示 二、代码实现 https://developer.android.com/reference/android/provider/AlarmClock?hl=enhttps://developer.android.com/reference/android/provider/AlarmClock?hl=en1、设置权限 <uses-permission android:name="com.android.alarm.permission.SET_ALARM" /&g... 阅读详情
利用Rexsee扩展的Alarm可以快速实现关于任务定时的相关功能,基本的闹钟事件如下


【函数】 void set(String argu)
【说明】 设置闹钟。
【返回】 无
【参数】 argu:型如“key1=value1;key2=value2;......”的参数表。首先,该参数表支持rexseeNotification.show()函数的所有参数,用于显示通知(调用rexseeNotification.show()),请参见rexseeNotification。另外,该参数表增加了以下参数:
  • forcerepeat:true或false。当该闹钟是由推送信息而非页面设定时,如果id和之前的推送信息的id重复,由该参数决定是否强制重新执行,默认为false,即不会重复执行任何id重复的推送信息。
  • command:闹钟响时要执行的命令,目前支持的命令包括:
    • notification:发送通知,默认值。
    • startApplication:启动程序。
    • cleanApplicationData:清除本程序的业务数据(私有内存中的所有数据)。
  • notificationimmediately:true或false,无论命令是否notification,该参数都允许系统在设置闹钟的第一时间先发送一个通知,然后在指定的时间延迟后再执行命令,默认为false。
  • notificationafterexec:true或false,无论命令是否notification,该参数都允许系统在执行完命令后发送一个通知,默认为false。
  • alermname:闹钟的名称,默认为"defaultAlerm"。
  • alermfirsttime:时间戳,第一次闹钟响(即执行命令)的时间,如果设为0或其他小于当前时间的时间戳,命令将立即执行,默认为立即执行。
  • alermrepeatinterval:毫秒数,第一次闹钟响之后,间隔该时间后重复执行命令,如果小于零,将不会重复执行。
  • startApplicationUrl:如果命令为startApplication,程序启动后访问的URL地址。
【示例】
rexseeAlarm.set('command=startApplication;startApplicationUrl=http://www.rexsee.com/rexsee/alarmClock.html;alermName=test;alermfirsttime='+(rexseeAlarm.getCurrentTime()+5000)+';title=闹钟测试;message=闹钟测试内容;url=http://www.rexsee.com/rexsee/alarmClock.html');
rexseeDialog.toast('设置完毕!');

【函数】 JsonObjectArray get()
【说明】 读取所有的闹钟信息。
【返回】 JSON对象数组,使用eval('('+json+')')转换为JavaScript对象数组。
【参数】 无
【示例】
alert(rexseeAlarm.get());

【函数】 void cancel(String name)
【说明】 取消闹钟。
【返回】 无
【参数】 name:闹钟名称。
【示例】
rexseeAlarm.cancel('test');
rexseeDialog.toast('取消完毕!');

rexseeAlarm.java源码如下:
/* 
* Copyright (C) 2011 The Rexsee Open Source Project 
* 
* Licensed under the Rexsee License, Version 1.0 (the "License"); 
* you may not use this file except in compliance with the License. 
* You may obtain a copy of the License at 
* 
*      http://www.rexsee.com/CN/legal/license.html 
* 
* Unless required by applicable law or agreed to in writing, software 
* distributed under the License is distributed on an "AS IS" BASIS, 
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
* See the License for the specific language governing permissions and 
* limitations under the License. 
*/ 
 
package rexsee.core.alarm;  
 
import rexsee.core.browser.JavascriptInterface;  
import rexsee.core.browser.RexseeBrowser;  
import rexsee.core.device.NotificationArgumentsSheet;  
import rexsee.core.device.RexseeNotification;  
import rexsee.core.receiver._Receiver;  
import android.app.AlarmManager;  
import android.app.PendingIntent;  
import android.content.Context;  
import android.content.Intent;  
import android.database.Cursor;  
import android.database.sqlite.SQLiteDatabase;  
 
public class RexseeAlarm implements JavascriptInterface {  
 
       private static final String INTERFACE_NAME = "Alarm";  
       @Override  
       public String getInterfaceName() {  
               return mBrowser.application.resources.prefix + INTERFACE_NAME;  
       }  
       @Override  
       public JavascriptInterface getInheritInterface(RexseeBrowser childBrowser) {  
               return this;  
       }  
       @Override  
       public JavascriptInterface getNewInterface(RexseeBrowser childBrowser) {  
               return new RexseeAlarm(childBrowser);  
       }  
 
       public static final String ALARM_ACTION = "action.alarm.id_";  
       public static final String ALARM_EXTRA_ARGU = "argu";  
 
       public static final String DATABASE_ALARM = "alarm.db";  
       public static final String TABLE_ALARM = "alarm";  
 
       private final Context mContext;  
       private final RexseeBrowser mBrowser;  
 
       public RexseeAlarm(RexseeBrowser browser) {  
               mBrowser = browser;  
               mContext = browser.getContext();  
       }  
       public RexseeAlarm(Context context) {  
               mBrowser = null;  
               mContext = context;  
       }  
 
       private static void _setAlarm(Context context, AlarmManager mgr, String body, boolean save) {  
               NotificationArgumentsSheet argu = (new NotificationArgumentsSheet()).parseArguments(body);  
               if (argu.notificationimmediately) {  
                       (new RexseeNotification(context)).show(argu);  
               }  
               if (argu.getAlermFirstTime() > System.currentTimeMillis()) {  
                       Intent intent = new Intent(context, _Receiver.class);  
                       intent.setAction(ALARM_ACTION + argu.alermname);  
                       intent.putExtra(ALARM_EXTRA_ARGU, body);  
                       PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);  
                       mgr.cancel(pendingIntent);  
                       long interval = argu.getAlermRepeatInterval();  
                       if (interval > 0) {  
                               mgr.setRepeating(AlarmManager.RTC_WAKEUP, argu.getAlermFirstTime(), interval, pendingIntent);  
                       } else {  
                               mgr.set(AlarmManager.RTC_WAKEUP, argu.getAlermFirstTime(), pendingIntent);  
                       }  
                       if (save) {  
                               SQLiteDatabase db = context.openOrCreateDatabase(DATABASE_ALARM, Context.MODE_PRIVATE, null);  
                               try {  
                                       db.execSQL("CREATE TABLE if not exists " + TABLE_ALARM + " (name TEXT, argu TEXT, Primary key(name));");  
                                       db.execSQL("DELETE FROM " + TABLE_ALARM + " WHERE name='" + argu.alermname + "';");  
                                       db.execSQL("INSERT INTO " + TABLE_ALARM + " VALUES ('" + argu.alermname + "', '" + body + "');");  
                               } catch (Exception e) {  
                               }  
                               db.close();  
                       }  
               } else {  
                       exec(context, body);  
               }  
       }  
       private static void _deleteAlarm(Context context, String name) {  
               SQLiteDatabase db = context.openOrCreateDatabase(DATABASE_ALARM, Context.MODE_PRIVATE, null);  
               try {  
                       db.execSQL("DELETE FROM " + TABLE_ALARM + " WHERE name='" + name + "';");  
               } catch (Exception e) {  
               }  
               db.close();  
       }  
 
       public static void exec(Context context, String body) {  
               NotificationArgumentsSheet argu = (new NotificationArgumentsSheet()).parseArguments(body);  
               if (argu.getAlermRepeatInterval() <= 0) {  
                       _deleteAlarm(context, argu.alermname);  
               }  
               (new RexseeRemoteCommand(context, body)).exec();  
       }  
       public static void updateAlarm(Context context) {  
               SQLiteDatabase db = context.openOrCreateDatabase(DATABASE_ALARM, Context.MODE_PRIVATE, null);  
               AlarmManager mgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);  
               try {  
                       db.execSQL("CREATE TABLE if not exists " + TABLE_ALARM + " (name TEXT, argu TEXT, Primary key(name));");  
                       Cursor cursor = db.rawQuery("SELECT * from " + TABLE_ALARM + ";", null);  
                       if (cursor != null && cursor.getCount() != 0) {  
                               for (int i = 0; i < cursor.getCount(); i++) {  
                                       cursor.moveToPosition(i);  
                                       _setAlarm(context, mgr, cursor.getString(1), false);  
                               }  
                       }  
                       cursor.close();  
               } catch (Exception e) {  
               }  
               db.close();  
       }  
 
       //JavaScript Interface  
       public void set(String body) {  
               _setAlarm(mContext, (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE), body, true);  
       }  
       public String get() {  
               SQLiteDatabase db = mContext.openOrCreateDatabase(DATABASE_ALARM, Context.MODE_PRIVATE, null);  
               String rtn = "";  
               try {  
                       Cursor cursor = db.rawQuery("SELECT * from " + TABLE_ALARM + ";", null);  
                       if (cursor != null && cursor.getCount() != 0) {  
                               for (int i = 0; i < cursor.getCount(); i++) {  
                                       cursor.moveToPosition(i);  
                                       if (i > 0) rtn += ",";  
                                       rtn += "{";  
                                       rtn += "\"name\":\"" + cursor.getString(0) + "\"";  
                                       rtn += ",\"argu\":\"" + cursor.getString(1) + "\"";  
                                       rtn += "}";  
                               }  
                       }  
                       cursor.close();  
               } catch (Exception e) {  
                       if (mBrowser != null) mBrowser.exception(getInterfaceName(), e);  
               }  
               db.close();  
               return "[" + rtn + "]";  
       }  
       public void cancel(String name) {  
               Intent intent = new Intent(mContext, _Receiver.class);  
               intent.setAction(ALARM_ACTION + name);  
               PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);  
               AlarmManager mgr = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);  
               mgr.cancel(pendingIntent);  
               _deleteAlarm(mContext, name);  
       }  
 
       public long getCurrentTime() {  
               return System.currentTimeMillis();  
       }  
       public long getMillisPerHour() {  
               return 3600 * 1000;  
       }  
       public long getMillisPerDay() {  
               return 3600 * 1000 * 24;  
       }  
 
}

仅对Rexsee的源码和函数事件做了整理,相关的demo或源码解析可以在Rexsee社区了解,目前Rexsee已提供了近2000个扩展,覆盖Android原生功能超过90%,且全部开放: h ttp://www.rexsee.com/
windows api闹钟 可以自己输入设定时间,开始倒计时,用C实现,windos api实现。 立即下载

相关推荐

Android调用系统闹钟

最近在做调用系统闹钟,在网上找了半天发现很多人都遇到同样的问题,由于厂商不同闹钟的包名也是不同的,比如HTC:com.htc.android.worldclock,三星:com.sec.android.app.clockpackage。在经过深思之后写了一个全面捕获的办法,可以调用到任何厂商自带的系统闹钟。分数高了点,但是对于需要的人还是很值得的!毕竟花了很多时间在研究。。。呵呵经常下载没有积分了就靠这些赚点积分。。。。相互学习。。。!

物联网开发框架Niagara - Part2模块概述

模块概述 物联网开发框架Niagara - Part1概述中介绍了,Niagara是模块化的,我们在其基础上开发的项目,最终也打包成模块。 Niagara的已编译的模块在安装目录下的modules中,通常一个模块包含1-5个部分,文件名格式:模块名称-部分名, 比如: alerm-rt    表示模块alerm的运行时定义,类似于MVC架构的C和M; alerm-wb  表示模块aler...

拥抱AI的老粽子 3274

android调用系统闹钟类

android调用系统闹钟类,可以直接调用,因为不是完整工程,所以需要看懂代码先哦.

【算法设计与分析】算法的时间复杂度(介绍O渐近上界,Ω渐近下界,θ准确的界)

什么是时间复杂度? 我们先看看一些函数的渐近表达式: 关于时间复杂度的基本要点: 时间复杂度反映的是随着问题规模的变大,计算所需的时间的增长速度,与系数的多少关系不大 算法的渐近时间复杂度,简称时间复杂度,很多时候为了便于理解,直接把时间复杂度等同于O()是可以的。 常见的时间复杂度,及其增长速度比较: O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)O(1)<O(log_2n)<O(n)<O(nlog_2n)<

小胡同的诗 1万+

Obsidian笔记同步实战:基于Git的私有化部署与自动化管理

本文详细介绍了如何利用Git为Obsidian笔记构建私有化、自动化且免费的同步方案。通过安装配置Git与Obsidian-git插件,结合Gitee等远程仓库,实现笔记的版本管理、多设备同步与自动备份,打造安全可靠的知识管理体系。

y7z8a的博客 272

安卓端目标检测模型部署血泪史:从NCNN/TFLite/MNN全军覆没到Torchscipts终见光明

公司需在Android设备部署目标检测模型,要求: ✅ 实时检测速度≥15FPS ✅ 模型精度损失<5% ✅ 兼容中低端安卓设备👉 GitHub项目地址:pytorch/android-demo-app/ObjectDetection我已上传这份源码到csdn下载准备模型(必须走这步才能跑通安卓端源码)如果您没有设置PyTorch环境来运行该脚本,可以下载模型文件此处转到“android演示app/ObjectDetection/app/src/main/assets”文件夹,然后跳过此步骤的其余部分,直

机器学习、深度学习、强化学习、迁移学习 1567

时钟设置API

CS001037 设备, 软件 版本: S60 3rd Edition, FP2 Contents[hide] 1 详细描述  2 头文件  3 链接库  4 能力  5 需用的实例变量  6 代码示例 [edit] 详细描述这个API不是公开SDK的一部分,可以在SDK API Plug-in找到。 这个时钟设置API可以用来设置和获得时钟程序的设置信息。如闹钟声音文

World of iOs 1333

制造业私有化LLM部署实战:从RAG到智能体,构建企业专属知识大脑

大型语言模型(LLM)作为人工智能的核心技术,通过在海量文本数据上进行预训练,具备了强大的语言理解和生成能力。其原理在于基于Transformer架构,通过自注意力机制捕捉长距离语义依赖。这一技术价值在于能将非结构化信息转化为可计算、可推理的知识,从而赋能企业实现知识的高效管理与应用。在制造业等强数据安全与知识密集型领域,私有化部署的LLM结合检索增强生成(RAG)和智能体(Agent)技术,能够深入业务流程,构建安全、专属的智能知识中枢。本文聚焦于如何利用Qwen、LangChain、向量数据库等技术栈,

weixin_42523711的博客 247

android中的闹钟管理器AlarmManager&PendingIntent

AlarmManager 1.主要功能是在指定的时间执行指定的任务,要注意所有的定时任务在手机重启后会消失,如果需要重启后继续用,可以加个开机自启,然后重新设置. 2.用法:设置AlarmManager在指定的时间发送广播,在接收器中写任务 例子: 定时广播 AlarmManager am=(AlarmManager)getSystemService(ALARM_SERVICE); I

linchunhua的专栏 3976

GD32F407工程模板搭建全记录:从零整理固件库、创建文件夹到编译通过

本文详细记录了GD32F407工程模板的搭建过程,从固件库整理、目录规划到Keil环境配置,帮助开发者快速搭建可维护的嵌入式工程结构。重点介绍了开发环境搭建、工程目录设计、Keil配置及常见编译问题解决方案,适合嵌入式开发者参考。

weixin_29164497的博客 118

vscode配置matlab工作环境

前面有两篇文章我们分别讲了在vscode里面如何配置C语言环境和python环境,那两篇文章总体来说比较复杂,当然这篇也有许多有趣的问题。 附上链接: 文章目录matlab简介基本要求code runner插件与matlab相关的插件添加路径小结code runner是否支持更多语言更多选择另一个选择 matlab简介 MATLAB是美国MathWorks公司出品的商业数学软件,用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人,控制系统等领域。 MATLAB是ma

Cachel Wood的博客 4540

Android 通过AlarmManager实现单次闹钟和周期闹钟

实现闹钟的实例要通过闹钟管理者AlarmManager,使用闹钟管理者触发事件,这些事件可在特定的时刻或以固定的时间间隔发生 我们只需要五步就可以创建一个简单的闹铃 1》通过getSystemService获得闹钟管理者AlarmManager 2》确定设置闹钟的时刻 3》创建要调用的接受程序 4》创建一个挂起的PendingIntent,它可传递给闹钟管理器来调用接受程序 5》使用刚开

糯叽叽的博客 2538

【01】Python解释器的安装

工欲善其事必先利其器。君欲学PYthon,则必先安装Python解释器。安装过程相对简单,大致跟着如下步骤走即可。

侯小啾技术博客 1258

Android API19 设置Alarm闹钟

在Android API19及以上版本中,Android Alarm机制改变为非准确传递,操作系统将会转换闹钟,来最小化唤醒和电池使用,也就是以前使用的set()和setRepeating()已经变的不再准确。

精彩生活,不惧挑战 1482

【异常】OpenClaw 飞书端 OpenClaw: access not configured. Pairing code: [] Ask the bot owner to approve with

摘要: OpenClaw飞书机器人交互中出现的access not configured报错,是因用户或组织未配置访问权限触发的拦截提示。报错包含组织单元ID和配对校验码,需管理员审批开通权限。普通用户需提交完整报错信息给管理员处理;管理员可通过执行标准化命令单次审批,或批量配置组织白名单优化权限管理。建议提前梳理权限范围、及时同步组织架构变更,并定期审计权限列表以确保安全合规。

奶爸的编程之路,也就一周冷个三天 371

开源免费!ReaLTaiizor如何用MIT许可证打造专业级WinForm UI?

摘要: ReaLTaiizor是一款开源UI控件库,为WinForm应用提供现代化界面解决方案。支持100+组件、多主题切换(浅色/深色/自定义)和.NET 4.8-8.0全版本兼容,MIT许可证允许免费商用。通过NuGet快速安装,3步改造传统界面:1)注入主题(如this.Theme = new Dark()),2)替换原生控件为高颜值组件(如ModernGrid替代DataGridView),3)集成高级功能(分页/动画提示)。典型场景包括登录界面美化(进度动画+通知控件)和数据表格Material风

墨夶的博客 1521

Android应用中如何调用系统闹钟及日历

今天开发一个小应用需要添加一个响应事件实现跳转到闹钟和日历,在bianfang

张拭心的博客 shixinzhang 9313

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Android Manager之AlarmManager(闹钟服务)

1.获得AlarmManager实例对象AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);2.相关方法以及详解2.1.方法:set(int type,long startTime,PendingIntent pi)作用:一次性闹钟。2.2.方法:setRepeating(int type,long ...

听海的博客 2万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

自己的应用中调用android系统闹钟

/* 综合网上的资料,自己整理了比较简单的调用系统闹钟的方法!*/package com.lsd.CallSystemClock; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.ComponentName; import android

renwfy9的专栏 5753

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

AlarmManager 实现闹钟的基本功能

先上效果图 这是一个利用AlarmManager做的最简单的闹钟!迟点再把重复响铃(例如星期一,星期三,重复响铃) 1.MainActivity package com.example.domereflect; import java.util.Calendar; import android.os.Bundle; import android.os.H...

aige7874的博客 314

Android 闹钟设置最新版

Android 闹钟设置各种坑 直接给个工具类用吧 public class AlarmManagerUtil { // 起床铃 public static final String ALARM_ACTION_RING = "com.lskj.alarm.ring"; /** * 重新设置下次响铃时间 * * @param context...

dandan1106的博客 1466

关于Android中设置闹钟的相对完善的解决方案

前些时候,有人在我「非著名程序员」微信公众号的后台问我有没有设置闹钟的demo,我当时说承诺为大家写一个,一直没空,直到最近又有人跟我要,我决定抽时间写一个吧。确实设置闹钟是一个比较麻烦的东西。我在这里写的这个demo抽出来了封装了一个类库,大家直接调用其中的设置闹钟和取消闹钟的方法即可。可以设置每天的闹钟,周一到星期天之间多选的闹钟,也可以设置选择一次性闹钟,跟系统设置闹钟的方式基本差不多吧。 效

非著名程序员 1万+
上一篇: Rexsee API介绍:Android屏幕锁定,Keyguard函数与扩展源码
下一篇: Rexsee API介绍:基站定位功能,Android CellLocation源码
Lafay
博客等级 码龄15年 0粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值