Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android編程之利用服務實現電話監聽的方法

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

編輯:Android開發實例

本文實例講述了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程序設計有所幫助。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved