欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android編程之利用服務(wù)實(shí)現(xiàn)電話監(jiān)聽的方法

 更新時(shí)間:2015年11月12日 11:54:48   作者:xy849288321  
這篇文章主要介紹了Android編程之利用服務(wù)實(shí)現(xiàn)電話監(jiān)聽的方法,較為詳細(xì)的分析了Android基于服務(wù)實(shí)現(xiàn)針對(duì)電話監(jiān)聽的具體步驟與相關(guān)實(shí)現(xià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

復(fù)制代碼 代碼如下:
<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); 
 } 
} 

希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評(píng)論