实现打电话录音MediaRecover(),mediaRecover.start()不执行问题!!!

 

 

Android 6.0 更加注重个人隐私的保护,所以清单文件加了权限之后不执行的问题还应该实现手动修改个人手机设置权限!!!

实现打电话自动录音。

1.在mainActivity中:

 Intent intent=new Intent(MainActivity.this, MyService.class);
        startService(intent);
//        IntentFilter filter=new IntentFilter();
//        filter.addAction("com.action.togo");
//        MyReceiver receiver=new MyReceiver();
//        registerReceiver(receiver, filter);
//
        pauseVoice= (Button) findViewById(R.id.pauseVioce);
        call= (Button) findViewById(R.id.call);
        call.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_DIAL);
                Uri data = Uri.parse("tel:" + "10086");
                intent.setData(data);
                startActivity(intent);
            }
        });

 

在服务MyService中:

的onCreat方法自己中通过电话管理类实现拨打电话状态监听:

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) {
            Log.d("=====state", ""+state);
            try {

                switch (state){
                    case TelephonyManager.CALL_STATE_RINGING: //响铃 来电
                        break;

//                    case TelephonyManager.CALL_STATE_OFFHOOK: //接通电话
//                        Log.d("=====1", "lu yin start");
//                      file = new File(Environment.getExternalStorageDirectory(), incomingNumber + System.currentTimeMillis() + ".3gp");
//
//                                //这里写入子线程需要做的工作
//                                Log.d("=====12", "lu yin start");
//                                mediaRecorder = new MediaRecorder();
//                                mediaRecorder.reset();
//                                Log.d("=====13", "lu yin start");
//                                mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//                        //this.mediaRecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);//双向录音
//                                Log.d("=====14", "lu yin start");
//                                mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
//                                Log.d("=====15", "lu yin start");
//                                mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
//                                Log.d("=====16", "lu yin start");
//                                mediaRecorder.setOutputFile(String.valueOf(file));
//                        Log.d("=====17", "lu yin start");
//                        mediaRecorder.prepare();
//                        Log.d("=====18", "lu yin start");
//                        mediaRecorder.start();
//                        Log.d("=====19", "lu yin start");
//
//                        //震动一下
//                        vibrator.vibrate(1000);
//                        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());     //设置输出文件

                        Log.d("=====17", file.getAbsolutePath());
                        try {
                            mediaRecorder.prepare();
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        Log.d("=====18", "lu yin start");
                        mediaRecorder.start();
                        Log.d("=======19","lu yin");
                        vibrator.vibrate(400);
                        break;

                    case TelephonyManager.CALL_STATE_IDLE: //挂断电话
                        Log.d("======","stop1");
                        if (mediaRecorder != null){
                            Log.d("======","stop2");
                            mediaRecorder.stop();
                            Log.d("======", "stop3");
                            mediaRecorder.reset();
                            Log.d("======", "stop4");
                            mediaRecorder.release();
                            Log.d("======", "stop5");
                            mediaRecorder = null;
                         //   Toast.makeText(getApplicationContext(), "电话已挂断,录音停止。", Toast.LENGTH_SHORT).show();
                            Log.d("=====2", "lu yin finish");
                            //震动一下
                            vibrator.vibrate(500);
                        }
                        break;
                }
            }catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

(参考了别人的忘了地址,希望原著见谅)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值