- 浏览: 2964501 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (893)
- android (110)
- iphone (198)
- java (79)
- JavaScript手册-目录 (9)
- JavaScript手册-Array (19)
- JavaScript手册-Boolean (5)
- JavaScript手册-Date (50)
- JavaScript手册-Math (30)
- JavaScript手册-Number (14)
- JavaScript手册-RegExp (7)
- JavaScript手册-String (38)
- JavaScript手册-全局函数 (8)
- JavaScript实用脚本 (7)
- Others (21)
- java-jpcap (7)
- java-thread (1)
- ibm文章 (3)
- classloader (2)
- java-filter (2)
- 运行环境 (33)
- java-正则 (2)
- oracle (1)
- linux-shell (26)
- wap (1)
- sqlite (3)
- wow (1)
- jvm (1)
- git (5)
- unity3d (29)
- iap (2)
- mysql (23)
- nginx (14)
- tomcat (9)
- apache (2)
- php (1)
- ubuntu (40)
- rsa (1)
- golang (21)
- appstore (5)
- sftp (2)
- log4j (2)
- netty (18)
- 测试工具 (6)
- memcache (5)
- 设计模式 (1)
- centos (8)
- google_iab (5)
- iOS专题 (4)
- mac (10)
- 安装配置帮助手册 (2)
- im4java_graphicsmagick (5)
- inotify-tools (1)
- erlang (6)
- 微信支付 (1)
- redis (8)
- RabbitMQ (5)
最新评论
-
heng123:
Netty视频教程https://www.douban.com ...
netty4.0.23 初学的demo -
maotou1988:
使用Netty进行Android与Server端通信实现文字发 ...
netty4.0.23 初学的demo -
码革裹尸:
非常感谢,正好用上
android 呼入电话的监听(来电监听) -
rigou:
提示的/222.177.4.242 无法链接到ip地址,是什 ...
通过 itms:services://? 在线安装ipa ,跨过app-store -
duwanbo:
GridView与数据绑定
android 来电自动接听和自动挂断
- 博客分类:
- android
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"/>
其中:
iTelephony.answerRingingCall();//自动接通电话
必须有权限 android.permission.MODIFY_PHONE_STATE
iTelephony.endCall();//自动挂断电话
必须有权限 android.permission.CALL_PHONE
评论
另你这个代码在什么型号的手机上测试通过的?
发表评论
-
Android Fragment 真正的完全解析(下)
2015-03-25 14:30 1085Android Fragment 真正 ... -
Android Fragment 真正的完全解析(上)
2015-03-25 10:14 875Android Fragment 真正的 ... -
Activity的生命周期方法
2015-03-25 09:54 547一:Activity的生命周期方法 Android ... -
Android在layout xml中使用include
2015-03-25 07:28 964在Android的layout样式定义中,可以使 ... -
一个支持圆角的快速ImageView:RoundedImageView
2015-03-07 09:50 11056一个支持圆角的快速ImageView:Rounded ... -
ImageView图片设置
2015-03-05 23:08 917显示任意图像,例如图标。ImageView类可以加载 ... -
ListActivity的onListItemClick不响应的解决办法
2015-03-04 17:57 1076ListActivity的onListItemClic ... -
ListView中有控件隐藏或显示造成的显示错误问题
2015-03-03 23:03 1815ListView中有控件隐藏或显示造成的显示错误问题 ... -
Android中Application类用法
2015-03-03 09:12 966Android中Application类用法 ... -
Android使用Application总结
2015-03-03 09:11 1169Android使用Application ... -
在android中运行java main方法
2015-02-27 10:38 964在android中运行java main方法 ... -
android BitmapFactory.Options
2015-02-19 21:01 988public Bitmap inBi ... -
android 基础demo例子
2015-02-16 21:06 806demoDatas.add(new DemoBe ... -
Android大图片裁剪终极解决方案
2015-02-15 17:08 2132Android大图片裁剪终 ... -
Android_照相机Camera_调用系统照相机返回data为空
2015-02-15 14:17 1263Android_照相机Camera_调用系统照相机返回 ... -
Android: 打印Bundle内容
2015-02-15 14:11 2924Android: 打印Bundle内容 有的时 ... -
android线程、UI、AsyncTask
2015-02-13 18:06 1251本文是转摘的,看过了觉得很好!所以转了过来!如果你想要 ... -
Fragment中ListView的使用
2015-02-06 23:01 2095Fragment中ListView的使用 直接 ... -
在安卓开发时用酷派手机无法打印出应用内的日志的解决方法
2014-12-11 20:39 1170在安卓开发时用酷派手机无法打印出应用内的日志的解决方法 ... -
查看安卓APK文件证书的方法
2014-12-04 10:05 948************************** ...
相关推荐
实现自动接听和挂断电话功能
安卓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 基本上,它是一个电信模块,可以在拨打/接听/通话时处理大多数需求。 该模块旨在与 待办...