Android编程之利用服务实现电话监听的方法_Android

本文实例讲述了Android编程之利用服务实现电话监听的方法。分享给大家供大家参考,具体如下:

1. 启动模拟器,部署应用
2. 利用模拟器控制器发送短信启动服务(查看日志输出判断是否成功)
3. 向模拟器拨打电话,并接听,挂断电话后,利用文件管理查看对应的cache目录或者sdcard中生成了3gp文件,并将其复制到pc中播放以验证。

清单设置(一个receiver,一个service,若干权限)

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
…
<application …>
<receiver android:name="BootBroadcastReceiver">
  <intent-filter>
    <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
  </intent-filter>
</receiver>
<service android:name="PhoneListenerService" />

电话监听器服务类:PhoneListenerService

package cn.class3g.phonelistener;
...
public class PhoneListenerService extends Service {
public IBinder onBind(Intent arg0) {
 return null;
 }
 public void onCreate() {
 super.onCreate();
 Log.i("TAG", "服务启动了");
 // 对电话的来电状态进行监听
TelephonyManager telManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
 // 注册一个监听器对电话状态进行监听
telManager.listen(new MyPhoneStateListener(),
 PhoneStateListener.LISTEN_CALL_STATE);
 }
 private class MyPhoneStateListener extends PhoneStateListener {
 MediaRecorder recorder;
 File audioFile;
 String phoneNumber;
 public void onCallStateChanged(int state, String incomingNumber) {
 switch (state) {
 case TelephonyManager.CALL_STATE_IDLE: /* 无任何状态时 */
if (recorder != null) {
 recorder.stop();// 停止刻录
recorder.reset();// 重设
recorder.release();// 刻录完成一定要释放资源
}
break;
 case TelephonyManager.CALL_STATE_OFFHOOK: /* 接起电话时 */
try {
 recorder = new MediaRecorder();
 recorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 设置音频采集原
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);// 内容输出格式
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); // 音频编码方式
// recorder.setOutputFile("/sdcard/myvoice.amr");
 audioFile = new File(
 Environment.getExternalStorageDirectory(),
 phoneNumber + "_" + System.currentTimeMillis()
 + ".3gp");
 recorder.setOutputFile(audioFile.getAbsolutePath());
 Log.i("TAG", audioFile.getAbsolutePath());
 recorder.prepare(); // 预期准备
recorder.start();
 } catch (IllegalStateException e) {
 e.printStackTrace();
 } catch (IOException e) {
 e.printStackTrace();
 }
 break;
 case TelephonyManager.CALL_STATE_RINGING: /* 电话进来时 */
phoneNumber = incomingNumber;
 break;
 default:
 break;
 }
 super.onCallStateChanged(state, incomingNumber);
 }
 }
}

利用开机启动广播启动服务(实验环境中为了方便起见可以先改用短消息广播)

开机启动完成广播action

复制代码 代码如下:

<action android:name="android.intent.action.BOOT_COMPLETED"/>

package cn.class3g.phonelistener;
...
public class BootBroadcastReceiver extends BroadcastReceiver {
 public void onReceive(Context context, Intent intent) {
 Log.i("TAG", "广播被接收了");
Intent serviceIntent = new Intent(context, PhoneListenerService.class);
 context.startService(serviceIntent);
 }
} 

希望本文所述对大家Android程序设计有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android
, 服务
电话监听
java监听器实现原理、安卓唱歌如何实现监听、tomcat监听器实现原理、java实现数据库监听器、java实现监听器,以便于您获取更多的相关知识。

时间: 2024-08-29 03:45:50

Android编程之利用服务实现电话监听的方法_Android的相关文章

Android编程之利用服务实现电话监听的方法

本文实例讲述了Android编程之利用服务实现电话监听的方法.分享给大家供大家参考,具体如下: 1. 启动模拟器,部署应用 2. 利用模拟器控制器发送短信启动服务(查看日志输出判断是否成功) 3. 向模拟器拨打电话,并接听,挂断电话后,利用文件管理查看对应的cache目录或者sdcard中生成了3gp文件,并将其复制到pc中播放以验证. 清单设置(一个receiver,一个service,若干权限) <uses-permission android:name="android.permis

Android编程实现应用强制安装到手机内存的方法_Android

本文实例讲述了Android编程实现应用强制安装到手机内存的方法.分享给大家供大家参考,具体如下: 在Froyo(android 2.2,API Level:8)中引入了android:installLocation.通过设置该属性可以使得开发者以及用户决定程序的安装位置. android:installLocation隶属于AndroidManifest.XML中的manifest节点.如下所示: <manifest xmlns:android="http://schemas.andro

全面解析Android中对EditText输入实现监听的方法_Android

在 Android design support 包中提供了一种在输入不合适字符时一直显示的提示方式来显示,现在已经开始在更多的应用上被使用了:这些 Android app 在显示他们的错误提示时采用的不同的方式常常让人感觉非常的不和谐. 即这个一直显示的错误消息是在 TextInputLayout 中的 EditText 周围的.这也是,作为一个奖励,提供了材料设计风格中,活泼的浮动标签在一个 APP 的用户体验中常常是最无聊的部分. 这里来讨论如何在你的输入表单上去创建一个通用的.可重用的组

Android实现双模(CDMA/GSM)手机短信监听的方法_Android

本文实例讲述了Android实现双模(CDMA/GSM)手机短信监听的方法.分享给大家供大家参考,具体如下: 一.问题分析: 最近在做一个通过短信远程启动应用的功能,要用到短信监听,代码如下: import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.telepho

Android编程实现改变控件背景及形态的方法_Android

本文实例讲述了Android编程实现改变控件背景及形态的方法.分享给大家供大家参考,具体如下: 1. 改变背景 在res/drawable下创建一个xml文件: <?xml version="1.0" encoding="UTF-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> // 控件被按下时候的背景 <item

Android编程实现屏幕自适应方向尺寸与分辨率的方法_Android

本文实例讲述了Android编程实现屏幕自适应方向尺寸与分辨率的方法.分享给大家供大家参考,具体如下: Android 屏幕自适应方向尺寸与分辨率,包括屏幕界面布局.多分辨率支持.获取屏幕尺寸.屏幕横屏与竖屏等,android 模拟器横屏,android 虚拟机横屏,android 判断横屏,android 禁止横屏,android 强制横屏,android 横屏事件,android 自适应分辨率,android 屏幕自适应,android 图片自适应,android 横屏布局. 屏幕界面布局

Android编程获取SD卡路径及剩余容量的方法_Android

本文实例讲述了Android编程获取SD卡路径及剩余容量的方法.分享给大家供大家参考,具体如下: public static String getExternalStoragePath() { // 获取SdCard状态 String state = android.os.Environment.getExternalStorageState(); // 判断SdCard是否存在并且是可用的 if (android.os.Environment.MEDIA_MOUNTED.equals(stat

Android编程实现Listview点击展开和隐藏的方法_Android

本文实例讲述了Android编程实现Listview点击展开和隐藏的方法.分享给大家供大家参考,具体如下: 代码较多,所以找关键点大家贴出来,相信大家看了之后很容易就明白的, 在listview的activity中 List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>() myAdapter = new MyAdapter(getApplicationContext(

Android编程实现给Button添加图片和文字的方法_Android

本文实例讲述了Android编程实现给Button添加图片和文字的方法.分享给大家供大家参考,具体如下: //为按钮添加图片和文字的方法 public Spanned getSpan(int id, String s) { ImageGetter imgGetter = new Html.ImageGetter() { @Override public Drawable getDrawable(String source) { // TODO Auto-generated method stub