国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android編程之利用服務實現電話監聽的方法

2020-04-11 11:17:46
字體:
來源:轉載
供稿:網友

本文實例講述了Android編程之利用服務實現電話監聽的方法。分享給大家供大家參考,具體如下:

1. 啟動模擬器,部署應用
2. 利用模擬器控制器發送短信啟動服務(查看日志輸出判斷是否成功)
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" />

電話監聽器服務類: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", "服務啟動了"); // 對電話的來電狀態進行監聽TelephonyManager telManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE); // 注冊一個監聽器對電話狀態進行監聽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: /* 無任何狀態時 */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);  }  } }

利用開機啟動廣播啟動服務(實驗環境中為了方便起見可以先改用短消息廣播)

開機啟動完成廣播action

復制代碼 代碼如下:
<action android:name="android.intent.action.BOOT_COMPLETED"/>

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程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 保康县| 依兰县| 苏尼特左旗| 舞钢市| 巫山县| 农安县| 滦南县| 仪陇县| 漳州市| 大渡口区| 蒙阴县| 南充市| 长寿区| 威海市| 林州市| 宁都县| 闽侯县| 闽侯县| 霍城县| 北京市| 兴海县| 康马县| 武隆县| 云林县| 湖南省| 衡水市| 灵川县| 福建省| 兴安县| 武山县| 玉林市| 白玉县| 黄大仙区| 长泰县| 阜南县| 德安县| 章丘市| 高雄县| 乐业县| 休宁县| 宁陵县|