歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android服務(service)初步——通話錄音

Android服務(service)初步——通話錄音

日期:2017/3/1 11:17:29   编辑:Linux編程

啟動服務之後,監聽手機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:

  1. package com.song;
  2. import Android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.util.Log;
  6. import android.view.View;
  7. import android.widget.Button;
  8. public class PhoneListenerActivity extends Activity
  9. {
  10. protected static final String ACTION = "recordingFlag";
  11. protected static final String TAG = "TAG";
  12. Button btnStart;
  13. Button btnStop;
  14. @Override
  15. public void onCreate(Bundle savedInstanceState)
  16. {
  17. super.onCreate(savedInstanceState);
  18. setContentView(R.layout.main);
  19. btnStart = (Button) findViewById(R.id.btnstart);
  20. btnStop = (Button) findViewById(R.id.btnstop);
  21. btnStart.setOnClickListener(new Button.OnClickListener()
  22. {
  23. @Override
  24. public void onClick(View v)
  25. {
  26. Log.v(TAG, "startService");
  27. startService(new Intent(ACTION));
  28. }
  29. });
  30. btnStop.setOnClickListener(new Button.OnClickListener()
  31. {
  32. @Override
  33. public void onClick(View v)
  34. {
  35. Log.v(TAG, "stopService");
  36. stopService(new Intent(ACTION));
  37. }
  38. });
  39. }
  40. }
服務類:
  1. package com.song;
  2. import java.io.IOException;
  3. import android.app.Service;
  4. import android.content.Context;
  5. import android.content.Intent;
  6. import android.media.MediaRecorder;
  7. import android.os.Environment;
  8. import android.os.IBinder;
  9. import android.telephony.PhoneStateListener;
  10. import android.telephony.TelephonyManager;
  11. import android.util.Log;
  12. public class PhoneListenerService extends Service
  13. {
  14. private MediaRecorder recorder;
  15. private boolean recording = false;
  16. @Override
  17. public IBinder onBind(Intent intent)
  18. {
  19. return null;
  20. }
  21. @Override
  22. public void onCreate()
  23. {
  24. TelephonyManager manager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
  25. manager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
  26. super.onCreate();
  27. }
  28. private PhoneStateListener listener = new PhoneStateListener()
  29. {
  30. @Override
  31. public void onCallStateChanged(int state, String incomingNumber)
  32. {
  33. super.onCallStateChanged(state, incomingNumber);
  34. switch (state)
  35. {
  36. case TelephonyManager.CALL_STATE_IDLE:// 空閒或者掛斷
  37. // 掛斷就停止錄音
  38. stopRecord();
  39. break;
  40. case TelephonyManager.CALL_STATE_RINGING:// 響鈴
  41. // 響鈴什麼都不做
  42. break;
  43. case TelephonyManager.CALL_STATE_OFFHOOK:// 接起電話
  44. // 接起電話開始錄音
  45. recordCalling();
  46. break;
  47. default:
  48. break;
  49. }
  50. }
  51. };
  52. private void stopRecord()
  53. {
  54. if (recording)
  55. {
  56. Log.v("TAG", "stopRecord");
  57. recorder.stop();
  58. recorder.release();// 釋放資源
  59. }
  60. }
  61. private void recordCalling()
  62. {
  63. try
  64. {
  65. Log.v("TAG", "recordCalling");
  66. recorder = new MediaRecorder();
  67. recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
  68. recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
  69. recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
  70. recorder.setOutputFile(Environment.getExternalStorageDirectory()
  71. .getAbsolutePath()+"/" + System.currentTimeMillis() + ".3gp");
  72. recorder.prepare();
  73. recorder.start();
  74. recording = true;
  75. }catch (Exception e)
  76. {
  77. e.printStackTrace();
  78. }
  79. }
  80. }
配置文件:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.song"
  4. android:versionCode="1"
  5. android:versionName="1.0">
  6. <uses-sdk android:minSdkVersion="8" />
  7. <application android:icon="@drawable/icon" android:label="@string/app_name">
  8. <activity android:name=".PhoneListenerActivity"
  9. android:label="@string/app_name">
  10. <intent-filter>
  11. <action android:name="android.intent.action.MAIN" />
  12. <category android:name="android.intent.category.LAUNCHER" />
  13. </intent-filter>
  14. </activity>
  15. <service android:name=".PhoneListenerService">
  16. <intent-filter>
  17. <action android:name="recordingFlag"/>
  18. </intent-filter>
  19. </service>
  20. </application>
  21. <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
  22. <uses-permission android:name="android.permission.RECORD_AUDIO"/>
  23. <!-- 向sdcard中寫數據的權限 -->
  24. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  25. </manifest>
Copyright © Linux教程網 All Rights Reserved