Android开发入门之采用Service实现电话应用

来源:互联网 发布:格伦罗宾逊数据 编辑:程序博客网 时间:2024/06/06 01:06

1.建立电话的服务类PhoneListenService,该类继承Service

2.在AndroidManifest.xml中配置服务

<!-- 配置电话服务 --><service android:name=".PhoneListenService" />

3.实现电话

package cn.leigo.phonelistener;import java.io.File;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;import android.util.Log;public class PhoneListenService extends Service {@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onCreate() {super.onCreate();// 获得电话管理器TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);// 设置电话呼叫状态telephonyManager.listen(new MyPhoneStateListener(),PhoneStateListener.LISTEN_CALL_STATE);Log.d("PhoneListenService", "onCreate");}private class MyPhoneStateListener extends PhoneStateListener {private String number; // 声明电话号码字符串private MediaRecorder recorder; // 声明电话刻录器private File file; // 声明录音存储文件@Overridepublic void onCallStateChanged(int state, String incomingNumber) {try {switch (state) {case TelephonyManager.CALL_STATE_RINGING: // 来电状态(响铃状态)number = incomingNumber;break;case TelephonyManager.CALL_STATE_OFFHOOK: // 接通电话状态// 在SDCard的根目录下创建录音文件(此时是空的文件)file = new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis() + number + ".3gp");// 实例化一个刻录器recorder = new MediaRecorder();// 设置声音来源为麦克风recorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 设置文件为3GP格式recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);// 设置音频编码recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);// 设置录音的音频流要输出到的文件recorder.setOutputFile(file.getAbsolutePath());// 初始化硬件和系统资源recorder.prepare();// 开始录音recorder.start();Log.d("PhoneListenService", "start");break;case TelephonyManager.CALL_STATE_IDLE: // 电话空闲状态// 如果正在录音if (recorder != null) {// 停止录音recorder.stop();// 释放资源,自动把内存中的音频流刷新到制定的文件中recorder.release();// 设置刻录器为nullrecorder = null;Log.d("PhoneListenService", "stop");}break;default:break;}} catch (Exception e) {e.printStackTrace();}}}}



4.创建一个BroadcastReceiver实现类来接收开机广播并启动电话服务

package cn.leigo.phonelistener;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.util.Log;/** * 开机启动完成广播接收器 * @author gaolei * */public class BootBroadcastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Log.d("BootBroadcastReceiver", "BootBroadcastReceiver");//实例化一个IntentIntent service = new Intent(context, PhoneListenService.class);//启动PhoneListenService服务context.startService(service);}}

5.配置BroadcastReceiver

        <!-- 接收开机启动广播 -->        <receiver android:name=".BootBroadcastReceiver" >            <intent-filter>                <action android:name="android.intent.action.BOOT_COMPLETED" />            </intent-filter>        </receiver>

6.配置权限

    <!-- 读取电话状态的权限 -->    <uses-permission android:name="android.permission.READ_PHONE_STATE" />    <!-- 刻录音频的权限 -->    <uses-permission android:name="android.permission.RECORD_AUDIO" />    <!-- 在SDCard中创建与删除的权限 -->    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />    <!-- 向SDCard写入数据的权限 -->    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
阅读全文
0 0
原创粉丝点击