- 浏览: 396702 次
文章分类
- 全部博客 (327)
- Android (114)
- Java (13)
- Java基础 (14)
- Glib (2)
- linux (15)
- extjs (5)
- eclipse (2)
- Asterisk (56)
- MYSQL (6)
- 数据库 (9)
- PHP (7)
- C# (18)
- 杂谈~~ (1)
- web开发前端 (3)
- 网络编程 (2)
- Opensips (2)
- voip (3)
- debian (7)
- openfire (15)
- wordpress (1)
- 版本控制 (1)
- Android 线程服务广播 (1)
- SRTP (2)
- 单片机及ARM等 (3)
- 基础知识 (5)
- asp.net (2)
- 单片机 (1)
- 设计模式及架构 (1)
- 安全 (1)
- Cubieboard 草莓树莓各类派 Android开发板 (1)
- J2EE (2)
- BootStrap (3)
- BootStrap web前端开发 (1)
- web前端开发 (4)
- object-c (1)
- openwrt (8)
- 智能家居 (4)
- Node.js (4)
最新评论
-
xiaoxiecomeon:
你这个程序一存在线程的时间片相互抢占的问题,运行时间长了很可能 ...
Runnable 和 Thread -
dotjar:
我觉得话应该这么说:引用TestThread tt = new ...
Runnable 和 Thread -
dagf113225:
调用TelephonyManager的隐藏API是先参考Fra ...
Android提高第十四篇之探秘TelephonyManager
android 来电自动接听和自动挂断
注意:android2.3版本不支持下面的自动接听方法。(会抛异常:java.lang.SecurityException: Neither user xxxxx nor current process has android.permission.MODIFY_PHONE_STATE.)
第一步:准备应用环境需要的系统包和aidl文件。
(1)在应用中创建包:android.telephony
将android系统框架下的\framework\telephony\java\android\telephony目录中的NeighboringCellInfo.aidl文件复制到上面创建的包(android.telephony )中;
(2)在应用中创建包:com.android.internal.telephony
将android系统框架下的\framework\telephony\java\com\android\internal\telephony目录中的ITelephony.aidl文件复制到上面创建的包(com.android.internal.telephony )中;
第二步:创建一个获取ITelephony的方法
PhoneUtils.java
- package com.zhouzijing.android.demo;
- import java.lang.reflect.Method;
- import com.android.internal.telephony.ITelephony;
- import android.telephony.TelephonyManager;
- public class PhoneUtils {
- /**
- * 根据传入的TelephonyManager来取得系统的ITelephony实例.
- * @param telephony
- * @return 系统的ITelephony实例
- * @throws Exception
- */
- public static ITelephony getITelephony(TelephonyManager telephony) throws Exception {
- Method getITelephonyMethod = telephony.getClass().getDeclaredMethod("getITelephony");
- getITelephonyMethod.setAccessible(true);//私有化函数也能使用
- return (ITelephony)getITelephonyMethod.invoke(telephony);
- }
- }
第三步:创建电话广播拦截器
MyPhoneBroadcastReceiver.java
- package com.zhouzijing.android.demo;
- import com.android.internal.telephony.ITelephony;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.telephony.TelephonyManager;
- import android.util.Log;
- public class MyPhoneBroadcastReceiver extends BroadcastReceiver {
- private final static String TAG = MyPhone.TAG;
- @Override
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- Log.i(TAG, "[Broadcast]"+action);
- //呼入电话
- if(action.equals(MyPhone.B_PHONE_STATE)){
- Log.i(TAG, "[Broadcast]PHONE_STATE");
- doReceivePhone(context,intent);
- }
- }
- /**
- * 处理电话广播.
- * @param context
- * @param intent
- */
- public void doReceivePhone(Context context, Intent intent) {
- String phoneNumber = intent.getStringExtra(
- TelephonyManager.EXTRA_INCOMING_NUMBER);
- TelephonyManager telephony = (TelephonyManager)context.getSystemService(
- Context.TELEPHONY_SERVICE);
- int state = telephony.getCallState();
- switch(state){
- case TelephonyManager.CALL_STATE_RINGING:
- Log.i(TAG, "[Broadcast]等待接电话="+phoneNumber);
- try {
- ITelephony iTelephony = PhoneUtils.getITelephony(telephony);
- iTelephony.answerRingingCall();//自动接通电话
- //iTelephony.endCall();//自动挂断电话
- } catch (Exception e) {
- Log.e(TAG, "[Broadcast]Exception="+e.getMessage(), e);
- }
- break;
- case TelephonyManager.CALL_STATE_IDLE:
- Log.i(TAG, "[Broadcast]电话挂断="+phoneNumber);
- break;
- case TelephonyManager.CALL_STATE_OFFHOOK:
- Log.i(TAG, "[Broadcast]通话中="+phoneNumber);
- break;
- }
- }
- }
第四部:注册电话广播拦截器
MyPhone.java
- package com.zhouzijing.android.demo;
- import android.app.Activity;
- import android.content.IntentFilter;
- import android.os.Bundle;
- import android.telephony.TelephonyManager;
- import android.util.Log;
- import android.view.View;
- public class MyPhone extends Activity {
- public final static String TAG = "MyPhone";
- public final static String B_PHONE_STATE = TelephonyManager.ACTION_PHONE_STATE_CHANGED;
- private MyPhoneBroadcastReceiver mBroadcastReceiver;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.my_phone);
- }
- //按钮1-注册广播
- public void registerThis(View v) {
- Log.i(TAG, "registerThis");
- mBroadcastReceiver = new MyPhoneBroadcastReceiver();
- IntentFilter intentFilter = new IntentFilter();
- intentFilter.addAction(B_PHONE_STATE);
- intentFilter.setPriority(Integer.MAX_VALUE);
- registerReceiver(mBroadcastReceiver, intentFilter);
- }
- //按钮2-撤销广播
- public void unregisterThis(View v) {
- Log.i(TAG, "unregisterThis");
- unregisterReceiver(mBroadcastReceiver);
- }
- }
第5步:在AndroidManifest.xml配置权限
- <uses-permission android:name="android.permission.READ_PHONE_STATE" />
- <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
- <uses-permission android:name="android.permission.CALL_PHONE"/>
其中:
必须有权限 android.permission.MODIFY_PHONE_STATE
必须有权限 android.permission.CALL_PHONE
发表评论
-
直接拿来用!最火的Android开源项目整理
2015-09-16 10:13 571一、代码库 1、from 代码家 整理比较好的源 ... -
探讨android更新UI的几种方法
2014-06-09 23:27 589今天讲的内容非常简单,只是讲讲有关于android界面更新的 ... -
Android 滑动切换页面 以及屏幕手势
2014-05-08 17:49 486手机进入智能机时代,触摸屏也已成为主流之势,原来的手机按键也 ... -
android 用Achartengine 作图
2014-05-08 16:55 714Achartengine 是google的一 ... -
Android中使用Animation实现控件的动画效果以及Interpolator和AnimationListener的使用
2014-05-08 16:28 717Animation的4个基本动画效果 What is An ... -
java.lang.ClassNotFoundException: Didn't find class "android.support.v4.view.Vie
2014-05-06 14:43 2875Android错误:Caused by: java.lang ... -
Android Socket通信如何设置超时时间
2014-05-06 14:14 1023其实关于这个问题可能用到的人不会很多,不过我在这里还是说说。 ... -
【转】Android本地语音识别引擎PocketSphinx-语言建模
2014-02-13 10:35 1767Android本地语音识别引擎PocketSphinx- ... -
关于build.prop原始Dalvik虚拟机设定与调整
2013-09-05 10:40 1229原厂S3 台版 1GB Ramsystem/build.pro ... -
Android中Service与IntentService的使用比较
2013-09-04 15:24 1154该博客来自网络——— ... -
android 应用程序Activity之间数据传递与共享的几种途径
2013-08-01 17:24 8821.基于消息的通信机制 Intent ---boud ... -
android数据通信方式
2013-08-01 17:15 871http://www.itkee.com/develope ... -
“android.intent.category.DEFAULT”的目的是什么?
2013-07-31 16:43 5141、要弄清楚这个问题,首先需要弄明白什么是implicit( ... -
集成拨号盘,2句话的事情
2013-07-30 15:45 576<intent-filter> < ... -
Android TabHost动态加载内容总结
2013-07-25 17:49 926前面用继承TabActivity的方法很好的完成了,TabHo ... -
[Android实例] android json
2013-07-17 15:20 625import java.io.ByteArrayOutput ... -
android json解析及简单例子
2013-07-17 15:19 899JSON的定义: 一种轻量级的数据交换 ... -
AsyncTask的用法-UI刷新发放
2013-07-15 14:50 637在开发Android应用时必须遵守单线程模型的原则: A ... -
java.lang.OutOfMemoryError处理错误
2013-07-15 14:41 634java.lang.OutOfMemoryError异常解决 ... -
关于android.view.WindowLeaked异常的解决方案
2013-07-15 10:34 587Android.view.WindowLeaked按字面了解, ...
相关推荐
实现自动接听和挂断电话功能
安卓Android源码——实现自动接听和挂断电话功能.zip
主要为大家详细介绍了Android帮助用户自动接听或者挂断来电,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
应用启动后便可以在后台监听来电,并根据是否属于陌生电话和设置做出相应动作(自动接听还是直接拒绝),如果自动接听,将会产生一段振动以告知用户。 PS:因为老是有骚扰电话响一下就挂了,就想出这个阴招,叫它响...
TelephoneAutoControllerandroid 自动接听电话和挂断(支持所有版本)
源码参考,欢迎下载
自动接听电话和挂断案例源码,参考:android 来电接听和挂断 支持目前所有版本。注意:android2.3版本及以上不支持下面的自动接听方法。(会抛异常:java.lang.SecurityException: Neither user xxxxx nor current ...
可以自动挂断匹配的标记关键字(诈骗、广告等)、归属地、起始号码(400*)。归属地可逆向匹配,如 "!西安 !咸阳" 将挂断所有除 "西安" "咸阳" 的来电。起始号码关键字添加完整号码并以空格分隔可以实现 "黑名单" 的功能...
2、能够针对那些特殊的电话进行自动挂断,避免打扰到用户 来电去电的监听方式(不一样的方式) 1、来电监听(PhoneStateListener) 来电监听是使用PhoneStateListener类,使用方式是,将PhoneStateListener对象...
1.所有来电自动接听; 2.所有来电自动挂断; 3.开启/关闭Radio; 4.开启/关闭数据连接(WAP or NET的连接)。 调用TelephonyManager的隐藏API是先参考Framework的/base/telephony/java/...
所有来电自动接听; 2.所有来电自动挂断; 3.开启/关闭Radio; 4.开启/关闭数据连接(WAP or NET的连接)。 调用TelephonyManager的隐藏API是先参考Framework的/base/telephony/java/...
根据事件和平台API自动将音频路由到适当的设备。 开启/关闭扬声器或麦克风,开启/关闭手电筒 播放铃声/回铃/ dtmftone 基本上,它是一个电信模块,可以在拨打/接听/通话时处理大多数需求。 该模块旨在与 待办...