Android實現(xiàn)定時自動靜音小助手
定時靜音助手的實現(xiàn)方法,供大家參考,具體內(nèi)容如下
背景
突發(fā)奇想,剛好這學(xué)期剛上安卓課程,想設(shè)計一個時間助手。工作、學(xué)習(xí)中經(jīng)常會被突如其來的電話所打擾,在上班,上課時這突如其來的鈴聲會惹來別人的反感,而只靠人們的記性是很難在準確的時間記得靜音。如果一直靜音,那么在休息時間又有可能漏接重要的電話?;谶@種考慮,設(shè)計了這樣一自動靜音小助手,來幫助人們在忙碌的生活中定時靜音,定時開啟正常模式,簡單方便。
界面設(shè)計
<?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)一個時間點設(shè)置的對話框 代碼如下
<?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è)計
原理介紹
先簡單介紹一下工作原理。在添加時間點之后,需要將所添加的時間點保存在文件或者數(shù)據(jù)庫中,我使用了SharedPrefences來保存時間點,key和value都是時間點,然后用到AlarmManager每隔一分鐘掃描一次,在掃描過程中從文件獲取當(dāng)前時間(時:分)的value,如果成功獲得value就說明當(dāng)前時間為時間點,此時調(diào)用audioManager ,當(dāng)掃描掉button1設(shè)置的文件信息,就調(diào)用AudioManager.RINGER_MODE_SILENT,如果掃描到button2設(shè)置的文件信息,就調(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("設(shè)置靜音開始時間").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("設(shè)置靜音結(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)

恢復(fù)正常狀態(tài)

源碼地址
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android給通知channel靜音的方法實例
- Android實現(xiàn)靜音檢測功能
- Android 判斷網(wǎng)絡(luò)狀態(tài)對音頻靜音的實現(xiàn)方法
- Android EasyPlayer聲音自動停止、恢復(fù),一鍵靜音等功能
- android實現(xiàn)來電靜音示例(監(jiān)聽來電)
- android系統(tǒng)在靜音模式下關(guān)閉camera拍照聲音的方法
- Android音頻錄制MediaRecorder之簡易的錄音軟件實現(xiàn)代碼
- Android簡單的利用MediaRecorder進行錄音的實例代碼
- Android實現(xiàn)錄音功能實現(xiàn)實例(MediaRecorder)
- Android實現(xiàn)錄音靜音降噪
相關(guān)文章
Android自定義控件實現(xiàn)溫度旋轉(zhuǎn)按鈕效果
這篇文章主要給大家介紹了關(guān)于Android如何通過自定義控件實現(xiàn)溫度旋轉(zhuǎn)按鈕的效果,文中通過思路與方法一步步介紹的很詳細,相信對大家的理解和學(xué)習(xí)具有一定的參考借鑒價值,有需要的朋友們下面來一起看看吧。2016-12-12
Android仿網(wǎng)易新聞圖片詳情下滑隱藏效果示例代碼
這篇文章主要給大家介紹了關(guān)于利用Android如何仿網(wǎng)易新聞圖片詳情下滑隱藏效果的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07
Android?Studio調(diào)試Gradle插件詳情
這篇文章主要介紹了Android?Studio調(diào)試Gradle插件詳情,文章圍繞主題展開詳細的內(nèi)容戒殺,具有一定的參考價值,需要的小伙伴可以參考一下2022-09-09
Android開發(fā)之圖片壓縮實現(xiàn)方法分析
這篇文章主要介紹了Android開發(fā)之圖片壓縮實現(xiàn)方法,結(jié)合實例形式分析了Android圖片壓縮的原理、實現(xiàn)方法及相關(guān)操作注意事項,需要的朋友可以參考下2019-03-03
Android入門之Fragment嵌套Fragment的用法詳解
這篇文章主要為大家詳細介紹了Android中如何實現(xiàn)Fragment嵌套Fragment的相關(guān)資料,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以參考一下2023-02-02
Android中實現(xiàn)滑動的七種方式總結(jié)
這篇文章主要介紹了Android中實現(xiàn)滑動的七種方式總結(jié),具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-02-02

