监听手机录音
                            
                            
                            需求分析: 記錄通話過程中的錄音,并保存到指定路徑~
知識(shí)點(diǎn):1.手機(jī)開機(jī)發(fā)出廣播,廣播接受者收到通知,開啟service服務(wù)? 2.Service工作流程:
1.獲取手機(jī)管理對(duì)象·
2.注冊(cè)監(jiān)聽器,對(duì)應(yīng)手機(jī)狀態(tài)
3.依據(jù)手機(jī)狀態(tài)(振鈴、通話、空暇),創(chuàng)建Mediaplay對(duì)象,暫停 這里監(jiān)聽手機(jī)狀態(tài),加入權(quán)限 <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 代碼: TelephonyManager manager=(TelephonyManager) getSystemService(TELEPHONY_SERVICE);//獲取電話管理 ? manager.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE); ?//用電話管理器注冊(cè)一個(gè)監(jiān)聽器,監(jiān)聽電話狀態(tài) 注意:手機(jī)狀態(tài)監(jiān)聽這,能夠監(jiān)聽多個(gè)狀態(tài),LISTEN_CALL_STATE監(jiān)聽的是手機(jī)狀態(tài)的變化,下面該監(jiān)聽器其它的監(jiān)聽對(duì)象 手機(jī)狀態(tài)改變的state三種值:空暇、通話、掛斷
依據(jù)三種狀態(tài),處理Mediaplayer,代碼
public void onCallStateChanged(int state, String incomingNumber) { // 電話狀態(tài)改變時(shí)運(yùn)行該方法 switch (state) { case TelephonyManager.CALL_STATE_RINGING: Log.d("Debug","振鈴"); num = incomingNumber; // 振鈴時(shí), 記錄號(hào)碼 break; case TelephonyManager.CALL_STATE_OFFHOOK: Log.d("Debug","開始錄音"); startRecording(); // 摘機(jī)時(shí), 開始錄音 break; case TelephonyManager.CALL_STATE_IDLE: Log.d("Debug","空暇狀態(tài)"); stopRecording(); // 空暇時(shí), 結(jié)束錄音 break; } } 思考:假設(shè)手機(jī)沒有振鈴?
停止錄音: private void stopRecording() { if (mRecorder != null) { mRecorder.stop();// 停止 mRecorder.release(); ? ?// 釋放資源 mRecorder = null;// 垃圾回收 } } 開始錄音: private void startRecording() { try { Log.d("Debug", "startRecording"); mRecorder = new MediaRecorder();?// 創(chuàng)建媒體記錄器 mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 設(shè)置音頻源 mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);// 設(shè)置輸出格式 mRecorder.setOutputFile("/mnt/sdcard/" + num + "_" + System.currentTimeMillis() + ".3gp");// 設(shè)置輸出文件路徑 mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);// 設(shè)置編碼 mRecorder.prepare();// 準(zhǔn)備 mRecorder.start();// 開始 } catch (Exception e) { e.printStackTrace(); }}}} 總結(jié):MediaPlayer操作過程,停止和錄音過程~,這里使用到了sdcard所以,必須聲明權(quán)限。 ? ? ?<uses-permission android:name="android.permission.RECORD_AUDIO"/>//同意程序進(jìn)行錄音 ? ? ?<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> //寫入存儲(chǔ)卡
清單文件的配置信息: ?<receiver ?android:name=".PhoneBroacast"> ? ? ? ? ? ? <intent-filter > ? ? ? ? ? ? ? ? <action android:name="android.intent.action.BOOT_COMPLETED"/> ? ? ? ? ? ? </intent-filter> ? ? ? ? </receiver> ? ? ? ? <service android:name=".PhoneService"> ?? ? ? ? ? </service>
                        
                        
                        知識(shí)點(diǎn):1.手機(jī)開機(jī)發(fā)出廣播,廣播接受者收到通知,開啟service服務(wù)? 2.Service工作流程:
1.獲取手機(jī)管理對(duì)象·
2.注冊(cè)監(jiān)聽器,對(duì)應(yīng)手機(jī)狀態(tài)
3.依據(jù)手機(jī)狀態(tài)(振鈴、通話、空暇),創(chuàng)建Mediaplay對(duì)象,暫停 這里監(jiān)聽手機(jī)狀態(tài),加入權(quán)限 <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 代碼: TelephonyManager manager=(TelephonyManager) getSystemService(TELEPHONY_SERVICE);//獲取電話管理 ? manager.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE); ?//用電話管理器注冊(cè)一個(gè)監(jiān)聽器,監(jiān)聽電話狀態(tài) 注意:手機(jī)狀態(tài)監(jiān)聽這,能夠監(jiān)聽多個(gè)狀態(tài),LISTEN_CALL_STATE監(jiān)聽的是手機(jī)狀態(tài)的變化,下面該監(jiān)聽器其它的監(jiān)聽對(duì)象 手機(jī)狀態(tài)改變的state三種值:空暇、通話、掛斷
依據(jù)三種狀態(tài),處理Mediaplayer,代碼
public void onCallStateChanged(int state, String incomingNumber) { // 電話狀態(tài)改變時(shí)運(yùn)行該方法 switch (state) { case TelephonyManager.CALL_STATE_RINGING: Log.d("Debug","振鈴"); num = incomingNumber; // 振鈴時(shí), 記錄號(hào)碼 break; case TelephonyManager.CALL_STATE_OFFHOOK: Log.d("Debug","開始錄音"); startRecording(); // 摘機(jī)時(shí), 開始錄音 break; case TelephonyManager.CALL_STATE_IDLE: Log.d("Debug","空暇狀態(tài)"); stopRecording(); // 空暇時(shí), 結(jié)束錄音 break; } } 思考:假設(shè)手機(jī)沒有振鈴?
停止錄音: private void stopRecording() { if (mRecorder != null) { mRecorder.stop();// 停止 mRecorder.release(); ? ?// 釋放資源 mRecorder = null;// 垃圾回收 } } 開始錄音: private void startRecording() { try { Log.d("Debug", "startRecording"); mRecorder = new MediaRecorder();?// 創(chuàng)建媒體記錄器 mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 設(shè)置音頻源 mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);// 設(shè)置輸出格式 mRecorder.setOutputFile("/mnt/sdcard/" + num + "_" + System.currentTimeMillis() + ".3gp");// 設(shè)置輸出文件路徑 mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);// 設(shè)置編碼 mRecorder.prepare();// 準(zhǔn)備 mRecorder.start();// 開始 } catch (Exception e) { e.printStackTrace(); }}}} 總結(jié):MediaPlayer操作過程,停止和錄音過程~,這里使用到了sdcard所以,必須聲明權(quán)限。 ? ? ?<uses-permission android:name="android.permission.RECORD_AUDIO"/>//同意程序進(jìn)行錄音 ? ? ?<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> //寫入存儲(chǔ)卡
清單文件的配置信息: ?<receiver ?android:name=".PhoneBroacast"> ? ? ? ? ? ? <intent-filter > ? ? ? ? ? ? ? ? <action android:name="android.intent.action.BOOT_COMPLETED"/> ? ? ? ? ? ? </intent-filter> ? ? ? ? </receiver> ? ? ? ? <service android:name=".PhoneService"> ?? ? ? ? ? </service>
總結(jié)
 
                            
                        - 上一篇: silverlight 上下标
- 下一篇: win7下cocos2dx2.2+vs2
