标题

偶然间翻到公司的祖传代码,发现AlarmManager这个东西,原来确实没用过,找了点资料自己学习了下,在这记录下

主AlarmManagerActivity 代码

package com.jph.simple;import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.View;
import android.widget.Toast;import com.jph.simple.service.AlarmService;import java.util.Calendar;/*** Created by wyb on 2018/2/24.* <p>* FLAG_CANCEL_CURRENT:如果当前系统中已经存在一个相同的PendingIntent对象,那么就将先将已有的PendingIntent取消,然后重新生成一个PendingIntent对象。* <p>* FLAG_NO_CREATE:如果当前系统中不存在相同的PendingIntent对象,系统将不会创建该PendingIntent对象而是直接返回null。* <p>* FLAG_ONE_SHOT:该PendingIntent只作用一次。在该PendingIntent对象通过send()方法触发过后,PendingIntent将自动调用cancel()进行销毁,那么如果你再调用send()方法的话,系统将会返回一个SendIntentException。* <p>* FLAG_UPDATE_CURRENT:如果系统中有一个和你描述的PendingIntent对等的PendingInent,那么系统将使用该PendingIntent对象,但是会使用新的Intent来更新之前PendingIntent中的Intent对象数据,例如更新Intent中的Extras*/public class AlarmManagerActivity extends Activity {private AlarmManager alManager;private AlarmReceiver alarmReceiver;/******receiver_action*******/public final static String ALARM_RECEIVER_ACTION = "receiver_alarm_action";/******activity_action*******/public final static String ALARM_ACTIVITY_ACTION = "activity_alarm_action";@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.alarmmanager_layout);alManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);//        System.out.println("----getLocalClassName---------" + getLocalClassName());
//        System.out.println("----getPackageName---------" + getPackageName());
//        System.out.println("----getComponentName---------" + getComponentName());
//        System.out.println("----getCallingPackage---------" + getCallingPackage());
//        System.out.println("----getTitle---------" + getTitle());/***********alarmManager广播注册*************/alarmReceiver = new AlarmReceiver();registerReceiver(alarmReceiver,new IntentFilter(ALARM_RECEIVER_ACTION));}/*** 开启定时任务* @param view*/public void startAlarmTask(View view) {Log.d(getLocalClassName(), "--------------you clicked me!");//showToastByCalendar();//showToastByMillis();//showToastReceiver();showToastActivity();}/*** service* 定时到秒*/void showToastByMillis() {Intent intent = new Intent(this, AlarmService.class);intent.setAction(AlarmService.ACTION_ALARM);PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);if (Build.VERSION.SDK_INT < 19) {alManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 5000, pendingIntent);} else {alManager.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 5000, pendingIntent);}}/*** serice* 定时到年月日*/void showToastByCalendar() {//定时时间为2018年2月24日15点25分0秒Calendar calendar = Calendar.getInstance();calendar.set(Calendar.YEAR, 2018);calendar.set(Calendar.MONTH, Calendar.FEBRUARY);calendar.set(Calendar.DAY_OF_MONTH, 24);calendar.set(Calendar.HOUR_OF_DAY, 15);calendar.set(Calendar.MINUTE, 25);calendar.set(Calendar.SECOND, 0);Intent intent = new Intent(this, AlarmService.class);intent.setAction(AlarmService.ACTION_ALARM);PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);if (Build.VERSION.SDK_INT < 19) {alManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);} else {alManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);}}/*** BroadcastReceiver* 接收定时任务*/void showToastReceiver(){Intent intent = new Intent();intent.setAction(ALARM_RECEIVER_ACTION);intent.putExtra("AlARMTASK","I am AlarmManager Timer Task by BroadcastReceiver");//sendBroadcast(intent); 这里不用写,否则会接收到两次PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);if (Build.VERSION.SDK_INT < 19) {alManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 5000, pendingIntent);} else {alManager.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 5000, pendingIntent);}}/*** activity* 接收定时任务*/void showToastActivity(){Intent intent = new Intent(this,ReceiverAlarmTaskActivity.class);intent.setAction(ALARM_ACTIVITY_ACTION);intent.putExtra("AlARMTASK","I am AlarmManager Timer Task by Activity");PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);if (Build.VERSION.SDK_INT < 19) {alManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 5000, pendingIntent);} else {alManager.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 5000, pendingIntent);}}/********************************************广播接收定时任务************************************************************/public class AlarmReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {if (!intent.getAction().equals(ALARM_RECEIVER_ACTION)){return;}Toast.makeText(AlarmManagerActivity.this,intent.getStringExtra("AlARMTASK"),Integer.valueOf(1)).show();}}@Overrideprotected void onDestroy() {super.onDestroy();if (alarmReceiver!=null){unregisterReceiver(alarmReceiver);}}
}

AlarmService

package com.jph.simple.service;import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
import android.util.Log;
import android.widget.Toast;public class AlarmService extends Service {public static String ACTION_ALARM = "action_alarm";private Handler alarmHandler = new Handler(Looper.getMainLooper());public AlarmService() {}@Overridepublic IBinder onBind(Intent intent) {// TODO: Return the communication channel to the service.return null;}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {if (!intent.getAction().equals(ACTION_ALARM)){Log.d(getPackageName(),"--------no fitter action-------------");}alarmHandler.post(new Runnable() {@Overridepublic void run() {Log.d(getPackageName(),"---------I am coming");Toast.makeText(AlarmService.this,"我是闹钟",Toast.LENGTH_SHORT).show();}});return super.onStartCommand(intent, flags, startId);}
}

AlarmManagerActivity 布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Button
        android:layout_width="match_parent"android:layout_height="wrap_content"android:onClick="startAlarmTask"android:text="@string/start_alarmTask" /></LinearLayout>

ReceiverAlarmTaskActivity代码

package com.jph.simple;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;public class ReceiverAlarmTaskActivity extends AppCompatActivity {private TextView alarmTaskActivity_tv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_receiver_alarm_task);alarmTaskActivity_tv = findViewById(R.id.alarmTaskActivity_tv);try {boolean actionIs = getIntent().getAction().equals(AlarmManagerActivity.ALARM_ACTIVITY_ACTION);if (actionIs){String taskString = getIntent().getStringExtra("AlARMTASK");Toast.makeText(this,taskString,Integer.valueOf(1)).show();alarmTaskActivity_tv.setText(taskString);}}catch (Exception e){e.printStackTrace();}}
}

布局文件

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.jph.simple.ReceiverAlarmTaskActivity"><TextView
        android:id="@+id/alarmTaskActivity_tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="8dp"android:layout_marginEnd="8dp"android:layout_marginStart="8dp"android:layout_marginTop="8dp"android:text="TextView"android:textSize="@dimen/textview_22sp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>

清单文件

<activity
            android:name=".AlarmManagerActivity"android:launchMode="singleTop"android:screenOrientation="portrait"android:windowSoftInputMode="adjustPan" /><service
            android:name=".service.AlarmService"android:enabled="true"android:exported="false" /><activity android:name=".ReceiverAlarmTaskActivity"><intent-filter><action android:name="activity_alarm_action" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></activity>

代码都很简单,看注释都应该可以看懂了

AlarmManager的简单使用相关推荐

  1. php闹钟功能实现,基于Alarmmanager实现简单闹钟功能

    本文实例为大家分享了Alarmmanager实现简单闹钟功能的具体代码,供大家参考,具体内容如下 代码: activity_main.xml MainActivity.java package com ...

  2. Alarmmanager制作简单闹钟功能

     代码: activity_main.xml <?xml version="1.0" encoding="utf-8"?> <Relative ...

  3. Android系统(62)---Alarm的机制

    Android中Alarm的机制 本次给大家分析的是Android中Alarm的机制所用源码为最新的Android4.4.4.首先简单介绍如何使用Alarm并给出其工作原理,接着分析Alarm和Tim ...

  4. Android中Alarm的机制

    本次给大家分析的是Android中Alarm的机制所用源码为最新的Android4.4.4.首先简单介绍如何使用Alarm并给出其工作原理,接着分析Alarm和Timer以及Handler在完成定时任 ...

  5. android系统的alarm机制,Android中Alarm的机制

    本次给大家分析的是Android中Alarm的机制所用源码为最新的Android4.4.4.首先简单介绍如何使用Alarm并给出其工作原理,接着分析Alarm和Timer以及Handler在完成定时任 ...

  6. Android 轮询最佳实践 Service + AlarmManager+Thread

    为什么80%的码农都做不了架构师?>>>    android中涉及到将服务器中数据变化信息通知用户一般有两种办法,推送和轮询. 消息推送是服务端主动发消息给客户端,因为第一时间知道 ...

  7. 【Android 电量优化】电量优化 ( 使用 AlarmManager 保持 CPU 唤醒 )

    文章目录 一.AlarmManager 简介 二.使用 AlarmManager 保持 CPU 唤醒流程 ( 省电操作 ) 三.使用 WeakLock 保持 CPU 唤醒 代码示例 1.Service ...

  8. AlarmManager深入浅出

    原文链接:侯 亮,https://my.oschina.net/youranhongcha/blog/149564 1.概述 在Android系统中,闹钟和唤醒功能都是由Alarm Manager S ...

  9. android:catation=quot;90quot;,Android中的AlarmManager的使用.htm

    var protocol = window.location.protocol; document.write(' Android中的AlarmManager的使用 - wangxingwu_314的 ...

最新文章

  1. socket编程:I/O模型
  2. 在domain中验证cron表达式
  3. python – 处理psycopg2中的错误 psycopg2.errors.InFailedSqlTransaction: current transaction is aborted, comm
  4. Python基础知识实例讲解
  5. [转自天涯]很多年以前,我是一个中锋
  6. sniffer 和 debug flow
  7. 服务降级-启动时检查
  8. ICPC 南昌现场赛 K:Tree(dsu on tree + 动态开点线段树)
  9. iOS 为tableview添加新的cell类
  10. linux kill命令使用方法,Linux初学者的killall命令(8个例子)
  11. Beta冲刺(9/7)——2019.5.31
  12. 数据科学 IPython 笔记本 8.4 简单的折线图
  13. Android/Linux性能分析工具推荐
  14. java equals() output_Java中的==和equals
  15. Windows phone 8.1 MessageBox 变了哦!
  16. redhat7 配置静态ip
  17. 王道考研操作系统同步与互斥(王道大题详解)
  18. (八:2020.08.27)CVPR 2020 追踪之论文纲要(译)
  19. 找回HDFS corrupted文件残留数据
  20. 63.QT-重写QStackedWidget模仿iphone的home界面,实现左右滑动

热门文章

  1. 专杀工具编写思路(转)
  2. FPGA项目开发——信号发生器(DDS)
  3. 苹果手机以旧换新活动_苹果中国宣布以旧换新活动延期至3月25日
  4. 极客日报:阿里将投入1000亿元助力共同富裕;Siri偷听用户对话被起诉 ;Linux Lite 5.6最终版正式发布
  5. 中电标协提出并归口:《政务APP评价指标》团体标准开启制订工作
  6. Hdoj 3486 Interviewer(二分加RMQ)
  7. 大专计算机应用论文摘要,计算机应用大专论文摘要怎么写 计算机应用大专论文摘要范文参考...
  8. Linux网络学习第七部分:ip协议+数据链路层详解
  9. 【20181020T1】蛋糕
  10. 计算机网络验证性实验