java 手机声音提醒功能_Android基于广播事件机制实现简单定时提醒功能代码
本文实例讲述了Android基于广播事件机制实现简单定时提醒功能代码。分享给大家供大家参考,具体如下:
1.Android广播事件机制
Android的广播事件处理类似于普通的事件处理。不同之处在于,后者是靠点击按钮这样的组件行为来触发,而前者是通过构建Intent对象,使用sentBroadcast()方法来发起一个系统级别的事件广播来传递信息。广播事件的接收是通过定义一个继承Broadcast Receiver的类实现的,继承该类后覆盖其onReceive()方法,在该方法中响应事件。Android系统中定义了很多标准的Broadcast Action来响应系统广播事件。例如:ACTION_TIME_CHANGED(时间改变时触发)。但是,我们也可以自己定义Broadcast Receiver接收广播事件。
2.实现简单的定时提醒功能
主要包括三部分部分:
1) 定时 - 通过定义Activity发出广播
2) 接收广播 - 通过实现BroadcastReceiver接收广播
3) 提醒 - 并通过Notification提醒用户
现在我们来具体实现这三部分:
2.1 如何定时,从而发出广播呢?
现在的手机都有闹钟的功能,我们可以利用系统提供的闹钟功能,来定时,即发出广播。具体地,在Android开发中可以用AlarmManager来实现。
AlarmManager 提供了一种系统级的提示服务,允许你安排在某个时间执行某一个服务。
AlarmManager的使用步骤说明如下:
1)获得AlarmManager实例: AlarmManager对象一般不直接实例化,而是通过Context.getSystemService(Context.ALARM_SERVIECE) 方法获得
2)定义一个PendingIntent来发出广播。
3)调用AlarmManager的相关方法,设置定时、重复提醒等功能。
详细代码如下(ReminderSetting.java):
package com.Reminder;
import java.util.Calendar;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
/**
* trigger the Broadcast event and set the alarm
*/
public class ReminderSetting extends Activity {
Button btnEnable;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/* create a button. When you click the button, the alarm clock is enabled */
btnEnable=(Button)findViewById(R.id.btnEnable);
btnEnable.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setReminder(true);
}
});
}
/**
* Set the alarm
*
* @param b whether enable the Alarm clock or not
*/
private void setReminder(boolean b) {
// get the AlarmManager instance
AlarmManager am= (AlarmManager) getSystemService(ALARM_SERVICE);
// create a PendingIntent that will perform a broadcast
PendingIntent pi= PendingIntent.getBroadcast(ReminderSetting.this, 0, new Intent(this,MyReceiver.class), 0);
if(b){
// just use current time as the Alarm time.
Calendar c=Calendar.getInstance();
// schedule an alarm
am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi);
}
else{
// cancel current alarm
am.cancel(pi);
}
}
}
2.2 接收广播
新建一个class 继承BroadcastReceiver,并实现onReceive()方法。当BroadcastReceiver接收到广播后,就会去执行OnReceive()方法。所以,我们在OnReceive()方法中加上代码,当接收到广播后就跳到显示提醒信息的Activity。具体代码如下( MyReceiver.java):
package com.Reminder;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
/**
* Receive the broadcast and start the activity that will show the alarm
*/
public class MyReceiver extends BroadcastReceiver {
/**
* called when the BroadcastReceiver is receiving an Intent broadcast.
*/
@Override
public void onReceive(Context context, Intent intent) {
/* start another activity - MyAlarm to display the alarm */
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setClass(context, MyAlarm.class);
context.startActivity(intent);
}
}
注意:创建完BroadcastReceiver后,需要在AndroidManifest.xml中注册:
2.3 提醒功能
新建一个Activity,我们在这个Activity中通过Android的Notification对象来提醒用户。我们将添加提示音,一个TextView来显示提示内容和并一个button来取消提醒。
其中,创建Notification主要包括:
1)获得系统级得服务NotificationManager,通过 Context.getSystemService(NOTIFICATION_SERVICE)获得。
2)实例化Notification对象,并设置各种我们需要的属性,比如:设置声音。
3)调用NotificationManager的notify()方法显示Notification
详细代码如下:MyAlarm.java
package com.Reminder;
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore.Audio;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
/**
* Display the alarm information
*/
public class MyAlarm extends Activity {
/**
* An identifier for this notification unique within your application
*/
public static final int NOTIFICATION_ID=1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_alarm);
// create the instance of NotificationManager
final NotificationManager nm=(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// create the instance of Notification
Notification n=new Notification();
/* set the sound of the alarm. There are two way of setting the sound */
// n.sound=Uri.parse("file:///sdcard/alarm.mp3");
n.sound=Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "20");
// Post a notification to be shown in the status bar
nm.notify(NOTIFICATION_ID, n);
/* display some information */
TextView tv=(TextView)findViewById(R.id.tvNotification);
tv.setText("Hello, it's time to bla bla...");
/* the button by which you can cancel the alarm */
Button btnCancel=(Button)findViewById(R.id.btnCancel);
btnCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
nm.cancel(NOTIFICATION_ID);
finish();
}
});
}
}
希望本文所述对大家Android程序设计有所帮助。
java 手机声音提醒功能_Android基于广播事件机制实现简单定时提醒功能代码相关推荐
- vue实现留言板的功能_基于vue和bootstrap实现简单留言板功能
本文实例为大家分享了vue实现简单留言板功能的具体代码,供大家参考,具体内容如下 作为一个刚开始接触vue的前端小白,我想在这里记录一些学习过程,希望和大家一起进步,如有不妥处之处,请多多指教呦. 今 ...
- java程序如何解代数方程_基于代数方程库Algebra.js解二元一次方程功能示例
本文实例讲述了基于代数方程库Algebra.js解二元一次方程功能.分享给大家供大家参考,具体如下: 假设二元一次方程如下: x + y = 11 x - y = 5 解方程如下: 测试algebra ...
- python报时功能_python3多线程实现一个语音报时,定时关机功能的应用
我是您的朋友义县游学电子科技,今天我跟大家分享一个小应用.利用python实现一个网络应用,具有定时关机功能和语音报时功能. 下面我先来介绍一下python.python这门语言想必大家都听说过,就算 ...
- java 手机声音提醒功能_java – 同时播放声音Android
我在 Android上创造了一个游戏,而且我已经把这个问题放在一段时间了,现在我刚刚回来了.在我的游戏中,我有一个背景拍摄,枪声,爆炸等等,我需要能够同时玩.现在,当我在SoundPool类上打电话时 ...
- java工作日报管理系统_GitHub - LovebuildJ/book-manager: JavaWeb图书管理系统,简单易用功能强大,可拓展性高,集成主流框架...
book-manager 介绍 图书管理系统 请勿忽略更新日志, 会有详细的版本更新说明! 软件截图 在线API接口文档 登录 首页轮播 图书列表 图书上架 图书编辑 图书删除 图书借阅 图书检索 图 ...
- java web聊天室原理_java web利用mvc结构实现简单聊天室功能
简单聊天室采用各种内部对象不适用数据库实现. 一个聊天室要实现的基本功能是: 1.用户登录进入聊天室, 2.用户发言 3.用户可以看见别人发言 刚才算是简单的需求分析了,现在就应该是进行mvc结构的设 ...
- 一文实现Mac 上简单定时提醒小脚本
借鉴了这位老哥的文章,在文章的基础上总结更细了一点,并且适当添加了一些内容,这里付上原文链接:https://blog.csdn.net/lp351539365/article/details/103 ...
- 设计两个程序要求用消息队列实现简单的聊天功能linux,Linux C 消息队列实现简单的聊天功能...
消息队列是提供一种带有数据标识的特殊管道,使得每一段被写入的数据都变成带标识的消息,读取该段消息的进程只要指定这个标识就可以正确地读取,而不会受到其他消息的干扰,.一个带标识的消息队列,就像并存的管道 ...
- java实现定时提醒功能
上班看股票不方便,做个股价监控软件 偷菜时间到了,做个定时提醒软件 还有10分20秒,要订票了,做个定时提醒软件 时间任意设置,总之就是一个定时提醒软件,比如设置5分钟时间到了,会弹出提示窗口,显示提 ...
最新文章
- HTML5 学习笔记(一)- video
- 中国编程第一人,李开复欣赏他,百度留不住他...
- Nginx基于IP,端口,域名配置虚拟主机
- php引用地址,关于php的引用
- java正则表达式对象_Java正则表达式之Pattern类
- URAL 1033 Labyrinth
- [html] html6即将到来,你最期待的是什么特性呢?
- Hologres+Flink流批一体首次落地4982亿背后的营销分析大屏
- 使用Python快速获取公众号文章定制电子书(一)
- shell调用hive客户端导致nohup后台进程stopped
- 如何查看K/3数据库表及字段详细信息
- C++ 实现反射机制(转载)
- linux内核类型lagency,使用u盘安装linux(manjaro)时Grub报错
- 2.SQL之条件查询
- 计算机辅助机械设计实训教程,机械设计教学中计算机辅助设计应用
- H3CSE路由-配置OSPF高级
- win10计算机护眼,win10系统开启电脑护眼的操作方法
- 李飞飞:我更像物理学界的科学家,而不是工程师|深度学习崛起十年
- 微星MS16j9鼠标面板可以移动指针,无法通过面板点击
- ThinkAdmin学习总结
热门文章
- 【C】牛客网 编程入门训练138道题
- 第六篇 VGGNet——模型精讲
- W5500+DHCP+DNS+MQTT
- CodeForces 786A Berzerk 博弈?BFS瞎搞
- OG0VA1B 全局曝光、高速感光芯片
- NB IoT LWM2M Object or/and Resource Identifier: (Object ID) or (ResourceID)
- 用行列式展开计算n阶行列式【c++/递归】
- NS3下的802.15.4模块(lr-wpan)
- go mod拉取gitlab私有仓库代码问题最全总结
- ubuntu 编译安装opencv官网教程