简易的android 通话录音实现【只能录制MIC的声音,不能录制对方的声音】

举报
ShaderJoy 发表于 2021/12/30 00:13:33 2021/12/30
【摘要】 因受系统限制,只能录自已麦的声音,录不到对方的声音,可能需要改内核才能实现双向录音; 接通电话和挂断电话时,震动一下; 使用广播接收者实现自启动;  public class phoneService extends Service { @Override public IBinder onB...




使用广播接收者实现自启动; 


  
  1. public class phoneService extends Service {
  2. @Override
  3. public IBinder onBind(Intent arg0) {
  4. // TODO Auto-generated method stub
  5. return null;
  6. }
  7. @Override
  8. public void onCreate() {
  9. // TODO Auto-generated method stub
  10. super.onCreate();
  11. TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
  12. telephonyManager.listen(new PhoneListener(), PhoneStateListener.LISTEN_CALL_STATE);
  13. }
  14. private final class PhoneListener extends PhoneStateListener{
  15. private MediaRecorder mediaRecorder;
  16. private File file;
  17. private Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
  18. @Override
  19. public void onCallStateChanged(int state, String incomingNumber) {
  20. try {
  21. switch (state){
  22. case TelephonyManager.CALL_STATE_RINGING: //来电
  23. break;
  24. case TelephonyManager.CALL_STATE_OFFHOOK: //接通电话
  25. file = new File(Environment.getExternalStorageDirectory(), incomingNumber + System.currentTimeMillis() + ".3gp");
  26. mediaRecorder = new MediaRecorder();
  27. mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
  28. mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
  29. mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
  30. mediaRecorder.setOutputFile(file.getAbsolutePath());
  31. mediaRecorder.prepare();
  32. mediaRecorder.start();
  33. Toast.makeText(getApplicationContext(), "电话已接通,开始录音。", Toast.LENGTH_SHORT).show();
  34. //震动一下
  35. vibrator.vibrate(100);
  36. break;
  37. case TelephonyManager.CALL_STATE_IDLE: //挂断电话
  38. if (mediaRecorder != null){
  39. mediaRecorder.stop();
  40. mediaRecorder.release();
  41. mediaRecorder = null;
  42. Toast.makeText(getApplicationContext(), "电话已挂断,录音停止。", Toast.LENGTH_SHORT).show();
  43. //震动一下
  44. vibrator.vibrate(100);
  45. }
  46. break;
  47. }
  48. }catch (Exception e) {
  49. e.printStackTrace();
  50. }
  51. }
  52. }
  53. }

  
  1. public class BroadcastReceiver extends android.content.BroadcastReceiver {
  2. @Override
  3. public void onReceive(Context arg0, Intent arg1) {
  4. Intent service = new Intent(arg0, phoneService.class);
  5. arg0.startService(service);
  6. }
  7. }

  
  1. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2. package="com.eboy.phoneListener"
  3. android:versionCode="1"
  4. android:versionName="1.0">
  5. <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" />
  6. <application android:label="@string/app_name"
  7. android:icon="@drawable/ic_launcher"
  8. android:theme="@style/AppTheme">
  9. <service android:name=".phoneService"></service>
  10. <receiver android:name=".BroadcastReceiver">
  11. <intent-filter >
  12. <!-- 开机自启动 -->
  13. <action android:name="android.intent.action.BOOT_COMPLETED"/>
  14. </intent-filter>
  15. </receiver>
  16. </application>
  17. <!-- 读取电话状态权限 -->
  18. <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
  19. <!-- SD卡读写权限 -->
  20. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
  21. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  22. <!-- 录音权限 -->
  23. <uses-permission android:name="android.permission.RECORD_AUDIO"/>
  24. <!-- 震动权限 -->
  25. <uses-permission android:name="android.permission.VIBRATE"/>
  26. </manifest>





文章来源: panda1234lee.blog.csdn.net,作者:panda1234lee,版权归原作者所有,如需转载,请联系作者。

原文链接:panda1234lee.blog.csdn.net/article/details/8767551

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。