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

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




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


      public class phoneService extends Service {
         @Override
         public IBinder onBind(Intent arg0) {
             // TODO Auto-generated method stub
             return null;
          }
         @Override
         public void onCreate() {
             // TODO Auto-generated method stub
             super.onCreate();
             TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
              telephonyManager.listen(new PhoneListener(), PhoneStateListener.LISTEN_CALL_STATE);
          }
         private final class PhoneListener extends PhoneStateListener{
             private MediaRecorder mediaRecorder;
             private File file;
             private Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
             @Override
             public void onCallStateChanged(int state, String incomingNumber) {
                 try {
                     switch (state){
                     case TelephonyManager.CALL_STATE_RINGING: //来电
                         break;
                     case TelephonyManager.CALL_STATE_OFFHOOK: //接通电话
                          file = new File(Environment.getExternalStorageDirectory(), incomingNumber + System.currentTimeMillis() + ".3gp");
                          mediaRecorder = new MediaRecorder();
                          mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
                          mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
                          mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
                          mediaRecorder.setOutputFile(file.getAbsolutePath());
                          mediaRecorder.prepare();
                          mediaRecorder.start();
                          Toast.makeText(getApplicationContext(), "电话已接通,开始录音。", Toast.LENGTH_SHORT).show();
                         //震动一下
                          vibrator.vibrate(100);
                         break;
                     case TelephonyManager.CALL_STATE_IDLE: //挂断电话
                         if (mediaRecorder != null){
                              mediaRecorder.stop();
                              mediaRecorder.release();
                              mediaRecorder = null;
                              Toast.makeText(getApplicationContext(), "电话已挂断,录音停止。", Toast.LENGTH_SHORT).show();
                             //震动一下
                              vibrator.vibrate(100);
                          }
                         break;
                      }
                  }catch (Exception e) {
                      e.printStackTrace();
                  }
              }
          }
      }
  
 

      public class BroadcastReceiver extends android.content.BroadcastReceiver {
         @Override
         public void onReceive(Context arg0, Intent arg1) {
             Intent service = new Intent(arg0, phoneService.class);
              arg0.startService(service);
          }
      }
  
 

      <manifest xmlns:android="http://schemas.android.com/apk/res/android"
         package="com.eboy.phoneListener"
         android:versionCode="1"
         android:versionName="1.0">
         <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" />
         <application android:label="@string/app_name"
             android:icon="@drawable/ic_launcher"
             android:theme="@style/AppTheme">
             <service android:name=".phoneService"></service>
             <receiver android:name=".BroadcastReceiver">
                 <intent-filter >
                     <!-- 开机自启动 -->
                     <action android:name="android.intent.action.BOOT_COMPLETED"/>
                 </intent-filter>
             </receiver>
         </application>
         <!-- 读取电话状态权限 -->
         <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
         <!-- SD卡读写权限 -->
         <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
         <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
         <!-- 录音权限 -->
         <uses-permission android:name="android.permission.RECORD_AUDIO"/>
         <!-- 震动权限 -->
         <uses-permission android:name="android.permission.VIBRATE"/>
      </manifest>
  
 





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

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

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

作者其他文章

评论(0

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

    全部回复

    上滑加载中

    设置昵称

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

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

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