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(); } } }
(参考了别人的忘了地址,希望原著见谅)