Android实现定时自动静音小助手
定时静音助手的实现方法,供大家参考,具体内容如下
背景
突发奇想,刚好这学期刚上安卓课程,想设计一个时间助手。工作、学习中经常会被突如其来的电话所打扰,在上班,上课时这突如其来的铃声会惹来别人的反感,而只靠人们的记性是很难在准确的时间记得静音。如果一直静音,那么在休息时间又有可能漏接重要的电话。基于这种考虑,设计了这样一自动静音小助手,来帮助人们在忙碌的生活中定时静音,定时开启正常模式,简单方便。
界面设计
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <button android:id="@+id/btnaddalarm1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="添加静音开始时间" /> <textview android:id="@+id/tvalarmrecord1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textsize="16dp" /> <button android:id="@+id/btnaddalarm2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="添加静音停止时间" /> <textview android:id="@+id/tvalarmrecord2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textsize="16dp" / </linearlayout>
点击完按钮的会出现一个时间点设置的对话框 代码如下
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <timepicker android:id="@+id/timepicker1" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </linearlayout>
效果图
功能设计
原理介绍
先简单介绍一下工作原理。在添加时间点之后,需要将所添加的时间点保存在文件或者数据库中,我使用了sharedprefences来保存时间点,key和value都是时间点,然后用到alarmmanager每隔一分钟扫描一次,在扫描过程中从文件获取当前时间(时:分)的value,如果成功获得value就说明当前时间为时间点,此时调用audiomanager ,当扫描掉button1设置的文件信息,就调用audiomanager.ringer_mode_silent,如果扫描到button2设置的文件信息,就调用audiomanager.ringer_mode_normal,时期出去正常模式。
此程序包含两个java文件,分别是mainactivity.java和timereceiver.java,timereceiver主要是判断是否到达时间点,mainactivity 主要是整体的框架和逻辑。
mainactivity代码如下:
package com.example.timesilent; import android.os.bundle; import android.app.activity; import android.app.alarmmanager; import android.app.pendingintent; import android.view.view; import android.view.view.onclicklistener; import android.widget.button; import android.widget.textview; import android.widget.timepicker; import android.app.alertdialog; import android.content.context; import android.content.dialoginterface; import android.content.intent; import android.content.sharedpreferences; public class mainactivity extends activity implements onclicklistener { private sharedpreferences sharedpreferences1; private sharedpreferences sharedpreferences2; private textview tvalarmrecord1; private textview tvalarmrecord2; @override public void onclick(view v) { view view =getlayoutinflater().inflate(r.layout.time,null); final timepicker timepicker1=(timepicker)view.findviewbyid(r.id.timepicker1); timepicker1.setis24hourview(true); switch(v.getid()) { case r.id.btnaddalarm1: { new alertdialog.builder(this).settitle("设置静音开始时间").setview(view).setpositivebutton("确定",new dialoginterface.onclicklistener(){ @override public void onclick(dialoginterface dialog,int which) { string timestr=string.valueof(timepicker1.getcurrenthour())+":"+string.valueof(timepicker1.getcurrentminute()); tvalarmrecord1.settext(tvalarmrecord1.gettext().tostring()+"\n"+timestr); sharedpreferences1.edit().putstring(timestr,timestr).commit(); } }).setnegativebutton("取消",null).show(); break; } case r.id.btnaddalarm2: { new alertdialog.builder(this).settitle("设置静音结束时间").setview(view).setpositivebutton("确定",new dialoginterface.onclicklistener(){ @override public void onclick(dialoginterface dialog,int which) { string timestr=string.valueof(timepicker1.getcurrenthour())+":"+string.valueof(timepicker1.getcurrentminute()); tvalarmrecord2.settext(tvalarmrecord2.gettext().tostring()+"\n"+timestr); sharedpreferences2.edit().putstring(timestr,timestr).commit(); } }).setnegativebutton("取消",null).show(); break; } } } @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); button btnaddalarm1 = (button) findviewbyid(r.id.btnaddalarm1); button btnaddalarm2 = (button) findviewbyid(r.id.btnaddalarm2); tvalarmrecord1 = (textview) findviewbyid(r.id.tvalarmrecord1); tvalarmrecord2 = (textview) findviewbyid(r.id.tvalarmrecord2); btnaddalarm1.setonclicklistener(this); btnaddalarm2.setonclicklistener(this); sharedpreferences1 = getsharedpreferences("alarm_record1", activity.mode_private); sharedpreferences2 = getsharedpreferences("alarm_record2", activity.mode_private); alarmmanager alarmmanager = (alarmmanager) getsystemservice(context.alarm_service); intent intent = new intent(this, timereceiver.class); pendingintent pendingintent = pendingintent.getbroadcast(this, 0, intent, 0); alarmmanager.setrepeating(alarmmanager.rtc, 0, 60 * 1000, pendingintent); } }
timereceiver的代码如下:
package com.example.timesilent; import java.util.calendar; import android.app.activity; import android.content.broadcastreceiver; import android.content.context; import android.content.intent; import android.media.audiomanager; import android.content.sharedpreferences; public class timereceiver extends broadcastreceiver { @override public void onreceive(context context, intent intent) { sharedpreferences sharedpreferences1 = context.getsharedpreferences( "alarm_record1", activity.mode_private); sharedpreferences sharedpreferences2 = context.getsharedpreferences( "alarm_record2", activity.mode_private); string hour = string.valueof(calendar.getinstance().get( calendar.hour_of_day)); string minute = string.valueof(calendar.getinstance().get( calendar.minute)); string time1 = sharedpreferences1.getstring(hour + ":" + minute, null); string time2 = sharedpreferences2.getstring(hour + ":" + minute, null); audiomanager audiomanager = (audiomanager)context.getsystemservice(context.audio_service); if (time1!= null) { audiomanager.setringermode(audiomanager.ringer_mode_silent); } if (time2!= null) { audiomanager.setringermode(audiomanager.ringer_mode_normal); } } }
程序运行效果
初始状态
开始静音状态
恢复正常状态
源码地址
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 2021年国内编程语言排行榜(最具影响力的编程语言分析)
下一篇: 关于java中反射的小结