欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android实现定时自动静音小助手

程序员文章站 2023-11-24 22:06:40
定时静音助手的实现方法,供大家参考,具体内容如下 背景 突发奇想,刚好这学期刚上安卓课程,想设计一个时间助手。工作、学习中经常会被突如其来的电话所打扰,在上班,...

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

背景

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

界面设计

<?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>

效果图

Android实现定时自动静音小助手

功能设计

原理介绍

先简单介绍一下工作原理。在添加时间点之后,需要将所添加的时间点保存在文件或者数据库中,我使用了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实现定时自动静音小助手

源码地址

github

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。