Android編程之利用服務實現(xiàn)電話監(jiān)聽的方法
本文實例講述了Android編程之利用服務實現(xiàn)電話監(jiān)聽的方法。分享給大家供大家參考,具體如下:
1. 啟動模擬器,部署應用
2. 利用模擬器控制器發(fā)送短信啟動服務(查看日志輸出判斷是否成功)
3. 向模擬器撥打電話,并接聽,掛斷電話后,利用文件管理查看對應的cache目錄或者sdcard中生成了3gp文件,并將其復制到pc中播放以驗證。
清單設置(一個receiver,一個service,若干權限)
<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)聽器服務類: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", "服務啟動了");
// 對電話的來電狀態(tài)進行監(jiān)聽
TelephonyManager telManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
// 注冊一個監(jiān)聽器對電話狀態(tài)進行監(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: /* 無任何狀態(tài)時 */
if (recorder != null) {
recorder.stop();// 停止刻錄
recorder.reset();// 重設
recorder.release();// 刻錄完成一定要釋放資源
}
break;
case TelephonyManager.CALL_STATE_OFFHOOK: /* 接起電話時 */
try {
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 設置音頻采集原
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);// 內容輸出格式
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(); // 預期準備
recorder.start();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
break;
case TelephonyManager.CALL_STATE_RINGING: /* 電話進來時 */
phoneNumber = incomingNumber;
break;
default:
break;
}
super.onCallStateChanged(state, incomingNumber);
}
}
}
利用開機啟動廣播啟動服務(實驗環(huán)境中為了方便起見可以先改用短消息廣播)
開機啟動完成廣播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);
}
}
希望本文所述對大家Android程序設計有所幫助。
- Android監(jiān)聽home鍵的方法詳解
- Android4.0.x Home鍵事件攔截監(jiān)聽的方法
- Android編程實現(xiàn)監(jiān)聽EditText變化的方法
- android監(jiān)聽返回按鈕事件的方法
- 設置Android系統(tǒng)永不鎖屏永不休眠的方法
- Android喚醒、解鎖屏幕代碼實例
- android禁止鎖屏保持常亮(示例代碼)
- Android 使用Shell腳本截屏并自動傳到電腦上
- Android 屏幕截屏方法匯總
- 使用python編寫android截屏腳本雙擊運行即可
- Android截屏保存png圖片的實例代碼
- 解析android截屏問題
- Android實現(xiàn)加載廣告圖片和倒計時的開屏布局
- Android 監(jiān)聽鎖屏、解鎖、開屏 功能代碼
相關文章
Android編程之創(chuàng)建自己的內容提供器實現(xiàn)方法
這篇文章主要介紹了Android編程之創(chuàng)建自己的內容提供器實現(xiàn)方法,結合具體實例形式分析了Android創(chuàng)建內容提供器的原理、步驟與相關操作技巧,需要的朋友可以參考下2017-08-08
Android-實現(xiàn)切換Fragment頁功能的實現(xiàn)代碼
本篇文章主要介紹了Android-實現(xiàn)切換Fragment頁功能的實現(xiàn)代碼,具有一定的參加價值,有興趣的可以了解一下。2017-02-02
Android中Button實現(xiàn)點擊換圖案及顏色
大家好,本篇文章主要講的是Android中Button實現(xiàn)點擊換圖案及顏色,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下2022-01-01
Android Studio gradle 編譯提示‘default not found’ 解決辦法
這篇文章主要介紹了Android Studio gradle 編譯提示‘default not found’ 解決辦法的相關資料,需要的朋友可以參考下2016-12-12
Android自定義控件ImageView實現(xiàn)點擊之后出現(xiàn)陰影效果
這篇文章主要為大家詳細介紹了Android自定義控件ImageView實現(xiàn)點擊之后有陰影效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12

