Android編程之利用服務(wù)實(shí)現(xiàn)電話監(jiān)聽的方法
本文實(shí)例講述了Android編程之利用服務(wù)實(shí)現(xiàn)電話監(jiān)聽的方法。分享給大家供大家參考,具體如下:
1. 啟動(dòng)模擬器,部署應(yīng)用
2. 利用模擬器控制器發(fā)送短信啟動(dòng)服務(wù)(查看日志輸出判斷是否成功)
3. 向模擬器撥打電話,并接聽,掛斷電話后,利用文件管理查看對(duì)應(yīng)的cache目錄或者sdcard中生成了3gp文件,并將其復(fù)制到pc中播放以驗(yàn)證。
清單設(shè)置(一個(gè)receiver,一個(gè)service,若干權(quán)限)
<uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.RECEIVE_SMS"/> … <application …> <receiver android:name="BootBroadcastReceiver"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver> <service android:name="PhoneListenerService" />
電話監(jiān)聽器服務(wù)類:PhoneListenerService
package cn.class3g.phonelistener; ... public class PhoneListenerService extends Service { public IBinder onBind(Intent arg0) { return null; } public void onCreate() { super.onCreate(); Log.i("TAG", "服務(wù)啟動(dòng)了"); // 對(duì)電話的來(lái)電狀態(tài)進(jìn)行監(jiān)聽 TelephonyManager telManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE); // 注冊(cè)一個(gè)監(jiān)聽器對(duì)電話狀態(tài)進(jìn)行監(jiān)聽 telManager.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE); } private class MyPhoneStateListener extends PhoneStateListener { MediaRecorder recorder; File audioFile; String phoneNumber; public void onCallStateChanged(int state, String incomingNumber) { switch (state) { case TelephonyManager.CALL_STATE_IDLE: /* 無(wú)任何狀態(tài)時(shí) */ if (recorder != null) { recorder.stop();// 停止刻錄 recorder.reset();// 重設(shè) recorder.release();// 刻錄完成一定要釋放資源 } break; case TelephonyManager.CALL_STATE_OFFHOOK: /* 接起電話時(shí) */ try { recorder = new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 設(shè)置音頻采集原 recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);// 內(nèi)容輸出格式 recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); // 音頻編碼方式 // recorder.setOutputFile("/sdcard/myvoice.amr"); audioFile = new File( Environment.getExternalStorageDirectory(), phoneNumber + "_" + System.currentTimeMillis() + ".3gp"); recorder.setOutputFile(audioFile.getAbsolutePath()); Log.i("TAG", audioFile.getAbsolutePath()); recorder.prepare(); // 預(yù)期準(zhǔn)備 recorder.start(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } break; case TelephonyManager.CALL_STATE_RINGING: /* 電話進(jìn)來(lái)時(shí) */ phoneNumber = incomingNumber; break; default: break; } super.onCallStateChanged(state, incomingNumber); } } }
利用開機(jī)啟動(dòng)廣播啟動(dòng)服務(wù)(實(shí)驗(yàn)環(huán)境中為了方便起見可以先改用短消息廣播)
開機(jī)啟動(dòng)完成廣播action
package cn.class3g.phonelistener; ... public class BootBroadcastReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { Log.i("TAG", "廣播被接收了"); Intent serviceIntent = new Intent(context, PhoneListenerService.class); context.startService(serviceIntent); } }
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
- Android監(jiān)聽home鍵的方法詳解
- Android4.0.x Home鍵事件攔截監(jiān)聽的方法
- Android編程實(shí)現(xiàn)監(jiān)聽EditText變化的方法
- android監(jiān)聽返回按鈕事件的方法
- 設(shè)置Android系統(tǒng)永不鎖屏永不休眠的方法
- Android喚醒、解鎖屏幕代碼實(shí)例
- android禁止鎖屏保持常亮(示例代碼)
- Android 使用Shell腳本截屏并自動(dòng)傳到電腦上
- Android 屏幕截屏方法匯總
- 使用python編寫android截屏腳本雙擊運(yùn)行即可
- Android截屏保存png圖片的實(shí)例代碼
- 解析android截屏問(wèn)題
- Android實(shí)現(xiàn)加載廣告圖片和倒計(jì)時(shí)的開屏布局
- Android 監(jiān)聽鎖屏、解鎖、開屏 功能代碼
相關(guān)文章
Android編程之創(chuàng)建自己的內(nèi)容提供器實(shí)現(xiàn)方法
這篇文章主要介紹了Android編程之創(chuàng)建自己的內(nèi)容提供器實(shí)現(xiàn)方法,結(jié)合具體實(shí)例形式分析了Android創(chuàng)建內(nèi)容提供器的原理、步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-08-08Android-實(shí)現(xiàn)切換Fragment頁(yè)功能的實(shí)現(xiàn)代碼
本篇文章主要介紹了Android-實(shí)現(xiàn)切換Fragment頁(yè)功能的實(shí)現(xiàn)代碼,具有一定的參加價(jià)值,有興趣的可以了解一下。2017-02-02Android點(diǎn)擊按鈕返回頂部實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了Android返回頂部實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02Android中Button實(shí)現(xiàn)點(diǎn)擊換圖案及顏色
大家好,本篇文章主要講的是Android中Button實(shí)現(xiàn)點(diǎn)擊換圖案及顏色,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2022-01-01Android手機(jī)拍照或選取圖庫(kù)圖片作為頭像
這篇文章主要介紹了Android手機(jī)拍照或選取圖庫(kù)圖片作為頭像的相關(guān)資料,需要的朋友可以參考下2015-06-06Android Studio gradle 編譯提示‘default not found’ 解決辦法
這篇文章主要介紹了Android Studio gradle 編譯提示‘default not found’ 解決辦法的相關(guān)資料,需要的朋友可以參考下2016-12-12Android把商品添加到購(gòu)物車的動(dòng)畫效果(貝塞爾曲線)
本篇文章介紹了Android把商品添加到購(gòu)物車的動(dòng)畫效果,這個(gè)在很多項(xiàng)目中都用的到,具有一定的參考價(jià)值,有需要的可以了解一下。2016-10-10Android自定義控件ImageView實(shí)現(xiàn)點(diǎn)擊之后出現(xiàn)陰影效果
這篇文章主要為大家詳細(xì)介紹了Android自定義控件ImageView實(shí)現(xiàn)點(diǎn)擊之后有陰影效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12Android貝塞爾曲線實(shí)現(xiàn)消息拖拽消失
這篇文章主要為大家詳細(xì)介紹了Android貝塞爾曲線實(shí)現(xiàn)消息拖拽消失,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01Android源碼學(xué)習(xí)之單例模式應(yīng)用及優(yōu)點(diǎn)介紹
動(dòng)態(tài)確保某一個(gè)類只有一個(gè)實(shí)例,而且自行實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)實(shí)例這就是Android單例模式應(yīng)用,接下來(lái)詳細(xì)介紹,有需求的朋友可以參考下2013-01-01