標籤:android style blog http io color os ar java
啟動服務之後,監聽手機TelephonyManager狀態,根據不同情況做出選擇,源碼以及如下:
產生的錄音檔案:
Log日誌:
這個不知道為什麼,點擊多次停止服務的時候,總是會出現下面的BUG:
圖片看不清楚,我把日誌複製了出來如下:
09-21 19:56:31.850: ERROR/audio_input(34): unsupported parameter: x-pvmf/media-input-node/cap-config-interface;valtype=key_specific_value
09-21 19:56:31.850: ERROR/audio_input(34): VerifyAndSetParameter failed
知道原因的,麻煩告訴我,灰常感激。。。俺百度了好久不知道為啥。
源碼:
MainActivity:
package com.song; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; public class PhoneListenerActivity extends Activity { protected static final String ACTION = "recordingFlag"; protected static final String TAG = "TAG"; Button btnStart; Button btnStop; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btnStart = (Button) findViewById(R.id.btnstart); btnStop = (Button) findViewById(R.id.btnstop); btnStart.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { Log.v(TAG, "startService"); startService(new Intent(ACTION)); } }); btnStop.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { Log.v(TAG, "stopService"); stopService(new Intent(ACTION)); } }); } }
服務類:
package com.song; import java.io.IOException; import android.app.Service; import android.content.Context; import android.content.Intent; import android.media.MediaRecorder; import android.os.Environment; import android.os.IBinder; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; import android.util.Log; public class PhoneListenerService extends Service { private MediaRecorder recorder; private boolean recording = false; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { TelephonyManager manager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); manager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE); super.onCreate(); } private PhoneStateListener listener = new PhoneStateListener() { @Override public void onCallStateChanged(int state, String incomingNumber) { super.onCallStateChanged(state, incomingNumber); switch (state) { case TelephonyManager.CALL_STATE_IDLE:// 空閑或者掛斷 // 掛斷就停止錄音 stopRecord(); break; case TelephonyManager.CALL_STATE_RINGING:// 響鈴 // 響鈴什麼都不做 break; case TelephonyManager.CALL_STATE_OFFHOOK:// 接起電話 // 接起電話開始錄音 recordCalling(); break; default: break; } } }; private void stopRecord() { if (recording) { Log.v("TAG", "stopRecord"); recorder.stop(); recorder.release();// 釋放資源 } } private void recordCalling() { try { Log.v("TAG", "recordCalling"); recorder = new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); recorder.setOutputFile(Environment.getExternalStorageDirectory() .getAbsolutePath()+"/" + System.currentTimeMillis() + ".3gp"); recorder.prepare(); recorder.start(); recording = true; }catch (Exception e) { e.printStackTrace(); } } }
設定檔:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.song" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".PhoneListenerActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name=".PhoneListenerService"> <intent-filter> <action android:name="recordingFlag"/> </intent-filter> </service> </application> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.RECORD_AUDIO"/> <!-- 向sdcard中寫資料的許可權 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> </manifest>
android服務(service)初步——通話錄音