定时静音助手

定时静音助手

背景

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

界面设计

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值