Android實現(xiàn)定時自動靜音小助手
定時靜音助手的實現(xiàn)方法,供大家參考,具體內(nèi)容如下
背景
突發(fā)奇想,剛好這學期剛上安卓課程,想設計一個時間助手。工作、學習中經(jīng)常會被突如其來的電話所打擾,在上班,上課時這突如其來的鈴聲會惹來別人的反感,而只靠人們的記性是很難在準確的時間記得靜音。如果一直靜音,那么在休息時間又有可能漏接重要的電話?;谶@種考慮,設計了這樣一自動靜音小助手,來幫助人們在忙碌的生活中定時靜音,定時開啟正常模式,簡單方便。
界面設計
<?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>
點擊完按鈕的會出現(xiàn)一個時間點設置的對話框 代碼如下
<?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>
效果圖

功能設計
原理介紹
先簡單介紹一下工作原理。在添加時間點之后,需要將所添加的時間點保存在文件或者數(shù)據(jù)庫中,我使用了SharedPrefences來保存時間點,key和value都是時間點,然后用到AlarmManager每隔一分鐘掃描一次,在掃描過程中從文件獲取當前時間(時:分)的value,如果成功獲得value就說明當前時間為時間點,此時調(diào)用audioManager ,當掃描掉button1設置的文件信息,就調(diào)用AudioManager.RINGER_MODE_SILENT,如果掃描到button2設置的文件信息,就調(diào)用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("設置靜音結(jié)束時間").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);
}
}
}
程序運行效果
初始狀態(tài)

開始靜音狀態(tài)

恢復正常狀態(tài)

源碼地址
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- Android給通知channel靜音的方法實例
- Android實現(xiàn)靜音檢測功能
- Android 判斷網(wǎng)絡狀態(tài)對音頻靜音的實現(xiàn)方法
- Android EasyPlayer聲音自動停止、恢復,一鍵靜音等功能
- android實現(xiàn)來電靜音示例(監(jiān)聽來電)
- android系統(tǒng)在靜音模式下關閉camera拍照聲音的方法
- Android音頻錄制MediaRecorder之簡易的錄音軟件實現(xiàn)代碼
- Android簡單的利用MediaRecorder進行錄音的實例代碼
- Android實現(xiàn)錄音功能實現(xiàn)實例(MediaRecorder)
- Android實現(xiàn)錄音靜音降噪
相關文章
Android實現(xiàn)右邊抽屜Drawerlayout效果
這篇文章主要為大家詳細介紹了Android實現(xiàn)右邊抽屜Drawerlayout效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-11-11
Android ListView實現(xiàn)ImageLoader圖片加載的方法
這篇文章主要介紹了Android ListView實現(xiàn)ImageLoader圖片加載的方法,結(jié)合實例形式簡單分析了開源框架Imageloader的功能、使用方法與相關注意事項,需要的朋友可以參考下2017-07-07
RxJava 1升級到RxJava 2過程中踩過的一些“坑”
RxJava2相比RxJava1,它的改動還是很大的,那么下面這篇文章主要給大家總結(jié)了在RxJava 1升級到RxJava 2過程中踩過的一些“坑”,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下來要一起看看吧。2017-05-05
Android編程Widget創(chuàng)建與使用方法簡明教程
這篇文章主要介紹了Android編程Widget創(chuàng)建與使用方法,結(jié)合實例形式分析了Widget的功能、使用方法與相關注意事項,需要的朋友可以參考下2016-10-10
Android入門之在Activity之間穿梭的Intent
Intent可以用來啟動Activity(startActivity(Intent))、Serveice(startService(Intent))等組件,可以用來綁定Activity和Service以建立它們之間的通信(bindServiceConnaction(Intent,ServiceConnection,int)),可以作為Broadcast Intent發(fā)送給廣播接收器2021-10-10
使用Android實現(xiàn)一個懸浮在軟鍵盤上的輸入欄
app開發(fā)中經(jīng)常會遇到一些輸入框要懸浮到軟鍵盤上方的需求,下面這篇文章主要給大家介紹了關于如何使用Android實現(xiàn)一個懸浮在軟鍵盤上的輸入欄的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2022-04-04

