定时静音助手的实现方法,供大家参考,具体内容如下
背景
突发奇想,刚好这学期刚上安卓课程,想设计一个时间助手。工作、学习中经常会被突如其来的电话所打扰,在上班,上课时这突如其来的铃声会惹来别人的反感,而只靠人们的记性是很难在准确的时间记得静音。如果一直静音,那么在休息时间又有可能漏接重要的电话。基于这种考虑,设计了这样一自动静音小助手,来帮助人们在忙碌的生活中定时静音,定时开启正常模式,简单方便。
界面设计
<?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,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,intent,0); alarmManager.setRepeating(AlarmManager.RTC,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); } } }
程序运行效果
初始状态
开始静音状态
恢复正常状态
源码地址
github
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
总结以上是内存溢出为你收集整理的Android实现定时自动静音小助手全部内容,希望文章能够帮你解决Android实现定时自动静音小助手所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)