热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

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

这篇文章主要为大家详细介绍了Android实现定时自动静音小助手,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

背景

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

界面设计

<&#63;xml version="1.0" encoding="utf-8"&#63;>


 

点击完按钮的会出现一个时间点设置的对话框 代码如下

<&#63;xml version="1.0" encoding="utf-8"&#63;>

 
 

效果图

功能设计

原理介绍

先简单介绍一下工作原理。在添加时间点之后,需要将所添加的时间点保存在文件或者数据库中,我使用了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);
  }
  
 }

 
 
}

程序运行效果

初始状态

开始静音状态

恢复正常状态

源码地址

github

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


推荐阅读
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 解决微信电脑版无法刷朋友圈问题:使用安卓远程投屏方案
    在工作期间想要浏览微信和朋友圈却不太方便?虽然微信电脑版目前不支持直接刷朋友圈,但通过远程投屏技术,可以轻松实现在电脑上操作安卓设备的功能。 ... [详细]
  • 本文详细介绍了 Java 中 org.apache.xmlbeans.SchemaType 类的 getBaseEnumType() 方法,提供了多个代码示例,并解释了其在不同场景下的使用方法。 ... [详细]
  • 资源推荐 | TensorFlow官方中文教程助力英语非母语者学习
    来源:机器之心。本文详细介绍了TensorFlow官方提供的中文版教程和指南,帮助开发者更好地理解和应用这一强大的开源机器学习平台。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 构建基于BERT的中文NL2SQL模型:一个简明的基准
    本文探讨了将自然语言转换为SQL语句(NL2SQL)的任务,这是人工智能领域中一项非常实用的研究方向。文章介绍了笔者在公司举办的首届中文NL2SQL挑战赛中的实践,该比赛提供了金融和通用领域的表格数据,并标注了对应的自然语言与SQL语句对,旨在训练准确的NL2SQL模型。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 本文介绍如何使用 NSTimer 实现倒计时功能,详细讲解了初始化方法、参数配置以及具体实现步骤。通过示例代码展示如何创建和管理定时器,确保在指定时间间隔内执行特定任务。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文介绍了在Windows环境下使用pydoc工具的方法,并详细解释了如何通过命令行和浏览器查看Python内置函数的文档。此外,还提供了关于raw_input和open函数的具体用法和功能说明。 ... [详细]
  • 从零开始构建完整手机站:Vue CLI 3 实战指南(第一部分)
    本系列教程将引导您使用 Vue CLI 3 构建一个功能齐全的移动应用。我们将深入探讨项目中涉及的每一个知识点,并确保这些内容与实际工作中的需求紧密结合。 ... [详细]
author-avatar
海纳百川2602902033
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有