首先定义一个Service来监听电话:

TelListener.java

package com.lk.tellistener;

import java.io.File;
import java.io.IOException;

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 TelListener extends Service {
    
    @Override
    public void onCreate() {
        TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        //注册监听器 监听电话状态  
        telephonyManager.listen(new TelPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE);
        super.onCreate();
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }
    
    final class TelPhoneStateListener extends PhoneStateListener {
        private String incomingNumber;
        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 file = new File(Environment.getExternalStorageDirectory(), this.incomingNumber + "_" + System.currentTimeMillis() + ".3gp");
                    this.mediaRecorder = new MediaRecorder();
                    this.mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);  //设置声音数据源
                    this.mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);  //设置输出格式为 3gp
                    this.mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
                    this.mediaRecorder.setOutputFile(file.getAbsolutePath());
                    this.mediaRecorder.prepare();
                    this.mediaRecorder.start();
                    break;
                case TelephonyManager.CALL_STATE_IDLE:  //挂断电话
                    if(this.mediaRecorder != null) {
                        this.mediaRecorder.stop();
                        this.mediaRecorder.release();
                        this.mediaRecorder = null;
                    }
                    break;
                }
                super.onCallStateChanged(state, incomingNumber);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

}

 

因为要在系统开机时就打开这个服务,所以定义一个BroadcastReceiver来监听开机事件,当开机时打开这个service

DeviceStartBroadcastReceiver.java

package com.lk.tellistener;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class DeviceStartBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Intent telServiceIntent = new Intent(context, TelListener.class);
        context.startService(telServiceIntent);
    }

}

在清单文件中配置权限和声明service

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.lk.tellistener"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="10" />
    
    <!-- 监听电话状态权限 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <!-- 写SDCard的权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <!-- 在SDCard中创建与删除文件权限 -->  
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> 
    <!-- 刻入声音权限 -->  
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>  

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <receiver 
            android:name="com.lk.tellistener.DeviceStartBroadcastReceiver">
            <!-- 开机启动广播 -->
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>
        <service 
            android:name="com.lk.tellistener.TelListener">
        </service>
    </application>

</manifest>

 

 

 

posted on 2014-03-30 15:00  寒岁青松  阅读(306)  评论(0编辑  收藏  举报