定时静音助手的实现方法,供大家参考,具体内容如下

背景

突发奇想,刚好这学期刚上安卓课程,想设计一个时间助手。工作、学习中经常会被突如其来的电话所打扰,在上班,上课时这突如其来的铃声会惹来别人的反感,而只靠人们的记性是很难在准确的时间记得静音。如果一直静音,那么在休息时间又有可能漏接重要的电话。基于这种考虑,设计了这样一自动静音小助手,来帮助人们在忙碌的生活中定时静音,定时开启正常模式,简单方便。

界面设计

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实现定时自动静音小助手相关推荐

  1. android自动夜间模式,Android实现日夜间模式的深入理解

    在本篇文章中给出了三种实现日间/夜间模式切换的方案,三种方案综合起来可能导致文章的篇幅过长,请耐心阅读. 1.使用 setTheme的方法让 Activity重新设置主题: 2.设置 Android ...

  2. android自动夜间模式,Android 夜间模式初探

    当下各种阅读类APP(如各种浏览器,某日头条等)都会有夜间模式,也顺应了大家的睡前必须玩一下手机的作息习惯.关于夜间模式的实现,有很多种方法.这篇日志学习一下最简单的实现方式,通过setTheme(i ...

  3. android静音模式,android静音模式下仍可以播放媒体声音以及调节其大小。。。。...

    不多说,先上图,先看一张我开发板的截图  ... 首先我先解释一下: 由于我的开发板硬件没有调节声音的按键,因而只能在图中所示 处调节,但是在静音之后,那个声音调节又不可点击,所以我们要在静音模式下使 ...

  4. android menu夜间模式,Android常用技巧夜间模式开发浅析

    前言 Android的夜间模式主要主用于阅读方面,在QQ,微信读书,新闻阅读类一般会有相应的功能,本文主要介绍整体APP的夜间模式以及webview中夜间模式的实现. 效果图展示 功能实现简介 APP ...

  5. android 省电模式,android省电模式设置

    关于android省电模式设置技巧大全 一.屏幕显示 降低屏幕的亮度,可以有效的节省电能,尤其是摩托罗拉产的Android手机目前为止均为TFT屏幕,同时自动锁屏幕的时间设置的短一些也会带来一些电量的 ...

  6. android系统recovery模式,Android系统Recovery模式中文详细说明

    Recovery具体功能: 1.刷系统:新下载好的rom,,直接放sd卡上刷(进nand),,无需windows! 2.像电脑的ghost,,允许用户随意将系统和里面的个人资料备份成一个文件,,并允许 ...

  7. android q 桌面模式,Android Q带来全新桌面模式

    IT之家3月14日消息 谷歌在美国当地时间3月13日(北京时间14日凌晨)正式推送了Android Q的首个Beta版本,"亲儿子"Pixel系列全系手机可以尝鲜体验这最新的系统. ...

  8. oracle数据库定时每天自动备份语句,Oracle数据库定时自动备份

    Oracle数据库定时自动备份批处理代码(Windows) 这是最近写的一个Oracle数据库自动备份的批处理,经过测试正常运行,记录如下.包括两部分,逻辑备份和冷备份,如有不完整之处,还往看到本文的 ...

  9. android l art模式,Android ART模式简介

    Android4.4最大的变化就是引入ART模式来代替Dalvik虚拟机.ART是Android Runtime的缩写,它提供了以AOT(Ahead-Of-Time)的方式运行Android应用程序的 ...

最新文章

  1. ubuntu bless 16字节每行
  2. Visual Studio 2013 中如何设置断点
  3. 清华集训2014 day2 task1 简单回路
  4. python转义字符r 列表_通过在列表前面添加反斜杠来转义列表中的保留字符 - python...
  5. 天合汽车安全技术(张家港)有限公司
  6. asp.net FileUpload上传文件夹并检测所有子文件
  7. 如何下服务器上文件是否存在问题,怎么读取服务器数据库文件是否存在
  8. 跟我学spring3 电子书下载(完)
  9. 听了那么多语音识别,你知道它的发展史吗?
  10. python的基本语法while true_Python正课15 —— 流程控制之while循环
  11. Python学习之面向对象(一)
  12. directshow
  13. 计步器 c语言,ADXL345单片机计步器程序
  14. ROS(indigo) 安装和使用更新版本的Gazebo----3,4,5,6,7 附:中国机器人大赛中型组仿真比赛说明
  15. SpringBoot的幕后推手,五年Java开发者小米、阿里面经
  16. 【观察】首款7nm芯片服务器亮相,联想驱动数据中心再创新
  17. axios中的拦截器
  18. winserver-记录共享文件夹操作日志
  19. 版本管理工具Cliosoft SOS安装并使用
  20. thinkphp5简介

热门文章

  1. bad apple项目试制
  2. Pascal语言在线代码运行编译工具推荐
  3. jQuery遍历数组
  4. 用python写一个聊天小程序!和女朋友的专属聊天工具!
  5. 烽火星空(软件测试)面试总结
  6. 重装系统如何快速恢复Oracle11g数据库
  7. Windows 10:千万别用360安全浏览器
  8. Django 多进程多线程的一些个人理解
  9. css3伪元素::_CSS荧光笔:使用:: selection伪选择器
  10. ARM64移动处理器解惑 iphone5s