Android實現(xiàn)定時自動靜音小助手
定時靜音助手的實現(xiàn)方法,供大家參考,具體內(nèi)容如下
背景
突發(fā)奇想,剛好這學期剛上安卓課程,想設(shè)計一個時間助手。工作、學習中經(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每隔一分鐘掃描一次,在掃描過程中從文件獲取當前時間(時:分)的value,如果成功獲得value就說明當前時間為時間點,此時調(diào)用audioManager ,當掃描掉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)
恢復正常狀態(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)在靜音模式下關(guān)閉camera拍照聲音的方法
- Android音頻錄制MediaRecorder之簡易的錄音軟件實現(xiàn)代碼
- Android簡單的利用MediaRecorder進行錄音的實例代碼
- Android實現(xiàn)錄音功能實現(xiàn)實例(MediaRecorder)
- Android實現(xiàn)錄音靜音降噪
相關(guān)文章
Android實現(xiàn)右邊抽屜Drawerlayout效果
這篇文章主要為大家詳細介紹了Android實現(xiàn)右邊抽屜Drawerlayout效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-11-11Android ListView實現(xiàn)ImageLoader圖片加載的方法
這篇文章主要介紹了Android ListView實現(xiàn)ImageLoader圖片加載的方法,結(jié)合實例形式簡單分析了開源框架Imageloader的功能、使用方法與相關(guān)注意事項,需要的朋友可以參考下2017-07-07RxJava 1升級到RxJava 2過程中踩過的一些“坑”
RxJava2相比RxJava1,它的改動還是很大的,那么下面這篇文章主要給大家總結(jié)了在RxJava 1升級到RxJava 2過程中踩過的一些“坑”,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下來要一起看看吧。2017-05-05Android編程Widget創(chuàng)建與使用方法簡明教程
這篇文章主要介紹了Android編程Widget創(chuàng)建與使用方法,結(jié)合實例形式分析了Widget的功能、使用方法與相關(guān)注意事項,需要的朋友可以參考下2016-10-10Android入門之在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)常會遇到一些輸入框要懸浮到軟鍵盤上方的需求,下面這篇文章主要給大家介紹了關(guān)于如何使用Android實現(xiàn)一個懸浮在軟鍵盤上的輸入欄的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2022-04-04