Android开发之AlarmManager的使用(开启Activity、开启服务、开启广播)
来源:互联网 发布:家装设计软件 编辑:程序博客网 时间:2024/06/10 00:27
Android开发之AlarmManager的使用(开启Activity、开启服务、开启广播)
a.
void set(int type, long triggerAtMillis, PendingIntent operation)
该方法用于设置一次性闹钟,type表示闹钟类型,triggerAtMillis闹钟执行时间,operation表示闹钟响应动作。
b.
void setRepeating(int type, long triggerAtMillis, long intervalMillis, PendingIntent operation)
该方法用于设置重复闹钟,type表示闹钟类型,triggerAtMillis表示闹钟首次执行时间,intervalTime表示闹钟两次执行的间隔时间,operation表示闹钟响应动作。
c.
void setInexactRepeating(int type, long triggerAtMillis, long intervalMillis, PendingIntent operation)
该方法用于设置重复闹钟,type表示闹钟类型,triggerAtMillis表示闹钟首次执行时间,operation表示闹钟响应动作。该方法与上一个方法相似,只是两次闹钟执行的间隔时间不是固定的!
d.
void cancel(PendingIntent operation)
AlarmManager.ELAPSED_REALTIME表示闹钟在手机睡眠状态下不可用
该状态下闹钟使用相对时间(相对于系统启动开始),状态值为3;
AlarmManager.ELAPSED_REALTIME_WAKEUP表示闹钟在睡眠状态下会唤醒系统并执行提示功能,
该状态下闹钟也使用相对时间,状态值为2;
AlarmManager.RTC表示闹钟在睡眠状态下不可用,
该状态下闹钟使用绝对时间,即当前系统时间,状态值为1;
AlarmManager.RTC_WAKEUP表示闹钟在睡眠状态下会唤醒系统并执行提示功能
该状态下闹钟使用绝对时间,状态值为0;
longtriggerAtMillis:
闹钟的第一次执行时间,以毫秒为单位
特别注意:
本属性根据type的不同而使用不同的时间
若type对应的闹钟使用的是相对时间ELAPSED_REALTIME或ELAPSED_REALTIME_WAKEUP,则triggerAtMillis就得使用相对时间(从系统启动时间算起)
eg:当前时间即:SystemClock.elapsedRealtime();
如果第一个参数对应的闹钟使用的是绝对时间 RTC、RTC_WAKEUP或POWER_OFF_WAKEUP,则triggerAtMillis就得使用绝对时间
eg:当前时间即:System.currentTimeMillis();
long intervalTime:
表示闹钟两次执行的间隔时间,以毫秒为单位
PendingIntent operation:
绑定了闹钟的执行动作
通过
public static PendingIntent getActivity(Context context, int requestCode, Intent intent, @Flags int flags) { return getActivity(context, requestCode, intent, flags, null);}
public static PendingIntent getBroadcast(Context context, int requestCode, Intent intent, @Flags int flags) { return getBroadcastAsUser(context, requestCode, intent, flags, new UserHandle(UserHandle.myUserId()));}
public static PendingIntent getService(Context context, int requestCode, @NonNull Intent intent, @Flags int flags) { String packageName = context.getPackageName(); String resolvedType = intent != null ? intent.resolveTypeIfNeeded( context.getContentResolver()) : null; try { intent.prepareToLeaveProcess(); IIntentSender target = ActivityManagerNative.getDefault().getIntentSender( ActivityManager.INTENT_SENDER_SERVICE, packageName, null, null, requestCode, new Intent[] { intent }, resolvedType != null ? new String[] { resolvedType } : null, flags, null, UserHandle.myUserId()); return target != null ? new PendingIntent(target) : null; } catch (RemoteException e) { } return null;}这三个方法进行实例化,在intent中指定动作即可
科普完毕,直接贴代码了:
核心代码:
package com.hxht.testalarmmanager;import android.app.AlarmManager;import android.app.PendingIntent;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import com.hxht.testalarmmanager.service.AlarmService;public class MainActivity extends AppCompatActivity { private AlarmManager manager; private PendingIntent pendingIntent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } /** * 初始化 */ private void init() { manager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE); } /** * 广播 * * @param view */ public void toStartAlarmForBroadcast(View view) { Intent intent = new Intent("FlyingSnow2211"); pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent,0); /** * 定义重复提醒:间隔5秒后发送一次广播 */ manager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 5 * 1000, 5 * 1000, pendingIntent); } /** * 服务 * * @param view */ public void toStartAlarmForService(View view) { Intent intent = new Intent(MainActivity.this, AlarmService.class); pendingIntent = PendingIntent.getService(MainActivity.this, 0,intent,0); /** * 定义重复提醒:间隔不固定时间开启一次服务 */ manager.setInexactRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis() + 3 * 1000,3* 1000,pendingIntent); } /** * Activity * * @param view */ public void toStartAlarmForActivity(View view) { Intent intent = new Intent(MainActivity.this, AlarmActivity.class); pendingIntent = PendingIntent.getActivity(MainActivity.this, 0, intent,0); /** * 定义提醒,在指定时间内开启一次Activity */ manager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 3 * 1000, pendingIntent); } /** * 取消闹钟 * * @param view */ public void toStopAlarm(View view) { manager.cancel(pendingIntent); }}
效果图如下:
代码已贴出,正所谓取之于社会,回报于社会,还望各位大神批评指正,不喜勿喷,灰常感谢♪(^∇^*)
- Android开发之AlarmManager的使用(开启Activity、开启服务、开启广播)
- android之使用AlarmManager开启定时服务
- 广播中开启Activity
- android学习之广播发送与检测网络开启服务
- Android 通过adb发广播的形式开启activity
- Android开启Telnet服务
- Android开启Ftp服务
- Android 开启服务Service
- Android startService开启服务
- Android,开启wifi接收广播
- Android,开启wifi接收广播
- Android之AppWidget的按钮事件开启Activity
- Android之开启新的activity并获取返回值
- android系统服务 adbd服务的开启
- 系统开启的服务
- 服务的开启方式
- telnet 服务的开启
- 服务的开启方式
- android studio导入别人项目快速配置方式
- 将字符串转换为数字
- 理解MySQL——索引与优化
- LeetCode算法第5篇:242Valid Anagram
- 高性能web开发 - 如何加载JS,JS应该放在什么位置?
- Android开发之AlarmManager的使用(开启Activity、开启服务、开启广播)
- WordPress漏洞分析(CVE-2015-5714 & CVE-2015-5715)
- 吃豆子过桥问题
- Android 地图 —— 百度地图
- [UI基础]day01(代码)
- Lnmp修改php.ini配置以及使exec()函数可用
- 小强的HTML5移动开发之路(10)——在线画板
- 15_09_22 Java 中写方法注意事项
- SecureCRT安装及注册方法