android 自动静音模式,Android实现定时自动静音小助手
定时静音助手的实现方法,供大家参考,具体内容如下
背景
突发奇想,刚好这学期刚上安卓课程,想设计一个时间助手。工作、学习中经常会被突如其来的电话所打扰,在上班,上课时这突如其来的铃声会惹来别人的反感,而只靠人们的记性是很难在准确的时间记得静音。如果一直静音,那么在休息时间又有可能漏接重要的电话。基于这种考虑,设计了这样一自动静音小助手,来帮助人们在忙碌的生活中定时静音,定时开启正常模式,简单方便。
界面设计
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
android:id="@+id/btnAddAlarm1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="添加静音开始时间" />
android:id="@+id/tvAlarmRecord1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="16dp" />
android:id="@+id/btnAddAlarm2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="添加静音停止时间" />
android:id="@+id/tvAlarmRecord2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="16dp" /
点击完按钮的会出现一个时间点设置的对话框 代码如下
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
android:layout_width="fill_parent" android:layout_height="wrap_content" />
效果图
功能设计
原理介绍
先简单介绍一下工作原理。在添加时间点之后,需要将所添加的时间点保存在文件或者数据库中,我使用了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);
}
}
}
程序运行效果
初始状态
开始静音状态
恢复正常状态
源码地址
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
android 自动静音模式,Android实现定时自动静音小助手相关推荐
- android自动夜间模式,Android实现日夜间模式的深入理解
在本篇文章中给出了三种实现日间/夜间模式切换的方案,三种方案综合起来可能导致文章的篇幅过长,请耐心阅读. 1.使用 setTheme的方法让 Activity重新设置主题: 2.设置 Android ...
- android自动夜间模式,Android 夜间模式初探
当下各种阅读类APP(如各种浏览器,某日头条等)都会有夜间模式,也顺应了大家的睡前必须玩一下手机的作息习惯.关于夜间模式的实现,有很多种方法.这篇日志学习一下最简单的实现方式,通过setTheme(i ...
- android静音模式,android静音模式下仍可以播放媒体声音以及调节其大小。。。。...
不多说,先上图,先看一张我开发板的截图 ... 首先我先解释一下: 由于我的开发板硬件没有调节声音的按键,因而只能在图中所示 处调节,但是在静音之后,那个声音调节又不可点击,所以我们要在静音模式下使 ...
- android menu夜间模式,Android常用技巧夜间模式开发浅析
前言 Android的夜间模式主要主用于阅读方面,在QQ,微信读书,新闻阅读类一般会有相应的功能,本文主要介绍整体APP的夜间模式以及webview中夜间模式的实现. 效果图展示 功能实现简介 APP ...
- android 省电模式,android省电模式设置
关于android省电模式设置技巧大全 一.屏幕显示 降低屏幕的亮度,可以有效的节省电能,尤其是摩托罗拉产的Android手机目前为止均为TFT屏幕,同时自动锁屏幕的时间设置的短一些也会带来一些电量的 ...
- android系统recovery模式,Android系统Recovery模式中文详细说明
Recovery具体功能: 1.刷系统:新下载好的rom,,直接放sd卡上刷(进nand),,无需windows! 2.像电脑的ghost,,允许用户随意将系统和里面的个人资料备份成一个文件,,并允许 ...
- android q 桌面模式,Android Q带来全新桌面模式
IT之家3月14日消息 谷歌在美国当地时间3月13日(北京时间14日凌晨)正式推送了Android Q的首个Beta版本,"亲儿子"Pixel系列全系手机可以尝鲜体验这最新的系统. ...
- oracle数据库定时每天自动备份语句,Oracle数据库定时自动备份
Oracle数据库定时自动备份批处理代码(Windows) 这是最近写的一个Oracle数据库自动备份的批处理,经过测试正常运行,记录如下.包括两部分,逻辑备份和冷备份,如有不完整之处,还往看到本文的 ...
- android l art模式,Android ART模式简介
Android4.4最大的变化就是引入ART模式来代替Dalvik虚拟机.ART是Android Runtime的缩写,它提供了以AOT(Ahead-Of-Time)的方式运行Android应用程序的 ...
最新文章
- ubuntu bless 16字节每行
- Visual Studio 2013 中如何设置断点
- 清华集训2014 day2 task1 简单回路
- python转义字符r 列表_通过在列表前面添加反斜杠来转义列表中的保留字符 - python...
- 天合汽车安全技术(张家港)有限公司
- asp.net FileUpload上传文件夹并检测所有子文件
- 如何下服务器上文件是否存在问题,怎么读取服务器数据库文件是否存在
- 跟我学spring3 电子书下载(完)
- 听了那么多语音识别,你知道它的发展史吗?
- python的基本语法while true_Python正课15 —— 流程控制之while循环
- Python学习之面向对象(一)
- directshow
- 计步器 c语言,ADXL345单片机计步器程序
- ROS(indigo) 安装和使用更新版本的Gazebo----3,4,5,6,7 附:中国机器人大赛中型组仿真比赛说明
- SpringBoot的幕后推手,五年Java开发者小米、阿里面经
- 【观察】首款7nm芯片服务器亮相,联想驱动数据中心再创新
- axios中的拦截器
- winserver-记录共享文件夹操作日志
- 版本管理工具Cliosoft SOS安装并使用
- thinkphp5简介