android自动接听和挂断电话
实现android自动接听和挂断电话功能。代码如下:
- 添加权限
- <uses-permission android:name="android.permission.CALL_PHONE"/>
- <uses-permission android:name="android.permission.MODIFY_PHONE_STATE"/>
- main.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- androidrientation="vertical" android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <RadioGroup android:layout_height="wrap_content"
- android:layout_width="fill_parent" android:id="@+id/rGrpSelect">
- <RadioButton android:layout_height="wrap_content"
- android:layout_width="fill_parent" android:id="@+id/rbtnAutoAccept"
- android:text="所有来电自动接听"></RadioButton>
- <RadioButton android:layout_height="wrap_content"
- android:layout_width="fill_parent" android:id="@+id/rbtnAutoReject"
- android:text="所有来电自动挂断"></RadioButton>
- </RadioGroup>
- <ToggleButton android:layout_height="wrap_content"
- android:layout_width="fill_parent" android:id="@+id/tbtnRadioSwitch"
- android:textOn="Radio已经启动" android:textOff="Radio已经关闭"
- android:textSize="24dip" android:textStyle="normal"></ToggleButton>
- <ToggleButton android:layout_height="wrap_content"
- android:layout_width="fill_parent" android:id="@+id/tbtnDataConn"
- android:textSize="24dip" android:textStyle="normal" android:textOn="允许数据连接"
- android:textOff="禁止数据连接"></ToggleButton>
- </LinearLayout>
复制代码
- PhoneUtils.java是手机功能类,从TelephonyManager中实例化ITelephony并返回,源码如下:
- package com.testTelephony;
- import java.lang.reflect.Field;
- import java.lang.reflect.Method;
- import com.android.internal.telephony.ITelephony;
- import android.telephony.TelephonyManager;
- import android.util.Log;
- public class PhoneUtils {
- /**
- * 从TelephonyManager中实例化ITelephony,并返回
- */
- static public ITelephony getITelephony(TelephonyManager telMgr) throws Exception {
- Method getITelephonyMethod = telMgr.getClass().getDeclaredMethod("getITelephony");
- getITelephonyMethod.setAccessible(true);//私有化函数也能使用
- return (ITelephony)getITelephonyMethod.invoke(telMgr);
- }
- static public void printAllInform(Class clsShow) {
- try {
- // 取得所有方法
- Method[] hideMethod = clsShow.getDeclaredMethods();
- int i = 0;
- for (; i < hideMethod.length; i++) {
- Log.e("method name", hideMethod.getName());
- }
- // 取得所有常量
- Field[] allFields = clsShow.getFields();
- for (i = 0; i < allFields.length; i++) {
- Log.e("Field name", allFields.getName());
- }
- } catch (SecurityException e) {
- // throw new RuntimeException(e.getMessage());
- e.printStackTrace();
- } catch (IllegalArgumentException e) {
- // throw new RuntimeException(e.getMessage());
- e.printStackTrace();
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
复制代码
- testTelephony.java是主类,使用PhoneStateListener监听通话状态,以及实现上述4种电话控制功能,源码如下:
- package com.testTelephony;
- import android.app.Activity;
- import android.os.Bundle;
- import android.telephony.PhoneStateListener;
- import android.telephony.TelephonyManager;
- import android.util.Log;
- import android.view.View;
- import android.widget.RadioGroup;
- import android.widget.ToggleButton;
- public class testTelephony extends Activity {
- /** Called when the activity is first created. */
- RadioGroup rg;//来电操作单选框
- ToggleButton tbtnRadioSwitch;//Radio开关
- ToggleButton tbtnDataConn;//数据连接的开关
- TelephonyManager telMgr;
- CallStateListener stateListner;
- int checkedId=0;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- telMgr= (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
- 100
- telMgr.listen(new CallStateListener(), CallStateListener.LISTEN_CALL_STATE);
- PhoneUtils.printAllInform(TelephonyManager.class);
- rg = (RadioGroup)findViewById(R.id.rGrpSelect);
- rg.setOnCheckedChangeListener(new CheckEvent());
- tbtnRadioSwitch=(ToggleButton)this.findViewById(R.id.tbtnRadioSwitch);
- tbtnRadioSwitch.setOnClickListener(new ClickEvent());
- try {
- tbtnRadioSwitch.setChecked(PhoneUtils.getITelephony(telMgr).isRadioOn());
- }catch (Exception e) {
- Log.e("error",e.getMessage());
- }
- tbtnDataConn=(ToggleButton)this.findViewById(R.id.tbtnDataConn);
- tbtnDataConn.setOnClickListener(new ClickEvent());
- try {
- tbtnDataConn.setChecked(PhoneUtils.getITelephony(telMgr).isDataConnectivityPossible());
- }catch (Exception e) {
- Log.e("error",e.getMessage());
- }
- }
- /**
- * 来电时的操作
- * @author GV
- *
- */
- public class CheckEvent implements RadioGroup.OnCheckedChangeListener{
- @Override
- public void onCheckedChanged(RadioGroup group, int checkedId) {
- testTelephony.this.checkedId=checkedId;
- }
- }
- /**
- * Radio和数据连接的开关
- * @author GV
- *
- */
- public class ClickEvent implements View.OnClickListener{
- @Override
- public void onClick(View v) {
- if (v == tbtnRadioSwitch) {
- try {
- PhoneUtils.getITelephony(telMgr).setRadio(tbtnRadioSwitch.isChecked());
- } catch (Exception e) {
- Log.e("error", e.getMessage());
- }
- }
- else if(v==tbtnDataConn){
- try {
- if(tbtnDataConn.isChecked())
- PhoneUtils.getITelephony(telMgr).enableDataConnectivity();
- else if(!tbtnDataConn.isChecked())
- PhoneUtils.getITelephony(telMgr).disableDataConnectivity();
- } catch (Exception e) {
- Log.e("error", e.getMessage());
- }
- }
- }
- }
- /**
- * 监视电话状态
- * @author GV
- *
- */
- public class CallStateListener extends PhoneStateListener {
- @Override
- public void onCallStateChanged(int state, String incomingNumber) {
- if(state==TelephonyManager.CALL_STATE_IDLE)//挂断
- {
- Log.e("IDLE",incomingNumber);
- }
- else if(state==TelephonyManager.CALL_STATE_OFFHOOK)//接听
- {
- Log.e("OFFHOOK",incomingNumber);
- }
- else if(state==TelephonyManager.CALL_STATE_RINGING)//来电
- {
- if(testTelephony.this.checkedId==R.id.rbtnAutoAccept)
- {
- try {
- //需要<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
- PhoneUtils.getITelephony(telMgr).silenceRinger();//静铃
- PhoneUtils.getITelephony(telMgr).answerRingingCall();//自动接听
- } catch (Exception e) {
- Log.e("error",e.getMessage());
- }
- }
- else if(testTelephony.this.checkedId==R.id.rbtnAutoReject)
- {
- try {
- PhoneUtils.getITelephony(telMgr).endCall();//挂断
- PhoneUtils.getITelephony(telMgr).cancelMissedCallsNotification();//取消未接显示
- } catch (Exception e) {
- Log.e("error",e.getMessage());
- }
- }
- }
- super.onCallStateChanged(state, incomingNumber);
- }
- }
- }
复制代码
android自动接听和挂断电话相关推荐
- Android 电话自动接听和挂断详解
1.通过aidl及反射实现挂断电话 具体分三步: (1)ITelephony.aidl ,必须新建com.android.internal.telephony包并放入ITelephony.aidl文件 ...
- Android通过程序接听或者挂断电话
转载注明出处:简书-十个雨点 这篇文章教你如何帮助用户自动接听或者挂断来电.当然并不是我原创的代码,我只不过是把stackoverflow上的一些代码整合了一下,做个代码的二传手. 源码 Accept ...
- 自动接听或者挂断来电
如何帮助用户自动接听或者挂断来电. 源码 GitHub源码中用了MVP的模式,只是最简单的使用,如果不熟悉的话刚好可以学学,逻辑部分在IncomingPresenter类中. 以下是逻辑图 首先监听来 ...
- android 自动挂断,android实现接通和挂断电话
本文实例为大家分享了android实现接通和挂断电话的具体代码,供大家参考,具体内容如下 关键代码:[PhoneUtils类] package com.ebupt.phonerecorddemo.se ...
- android 关闭蓝牙打电话功能,Android蓝牙开发【八】hfp接听、挂断电话
继续研究hfp相关功能.蓝牙耳机可以控制手机接听.拒接.挂断电话,拨打电话等功能.本文主要分析下起这些操作的大致流程. 在系统应用Bluetooth中com_android_bluetooth.cpp ...
- Android 蓝牙开发(八)hfp接听、挂断电话
转载请注明出处:http://blog.csdn.net/vnanyesheshou/article/details/71429860 本文已授权微信公众号 fanfan程序媛 独家发布 扫一扫文章底 ...
- android挂断电话广播,android实现接通和挂断电话
android实现接通和挂断电话 发布时间:2020-08-21 01:52:02 来源:脚本之家 阅读:230 作者:WillenWu 本文实例为大家分享了android实现接通和挂断电话的具体代码 ...
- Android的AIDL以及挂断电话
最新实战教程,让你了解Android自动化刷量.作弊与防作弊的那些事,案例:刷友盟统计.批量注册苹果帐号 Android的AIDL是什么呢,AIDL就是Android Interface Defina ...
- Android自动接听和挂断电话实现原理
转自:http://bbs.51cto.com/thread-1078059-1.html 一 前言 这两天要研究类似白名单黑名单以及手势自动接听的一些功能,所以呢,自然而然的涉及到怎么自动接听/挂 ...
最新文章
- 把java文件打包成.jar (jar命令详解)
- Windows7 UAC
- c语言数组算n阶乘,c语言中如何计算n的阶乘
- boost::timer模块timer、job_timer和progress_display示例程序
- Linux上的TIME_WAIT和tcp_fin_timeout
- 教你如何在@ViewChild查询之前获取ViewContainerRef
- 服务器添加管理员隐藏账号,绝招:隐藏管理员账号 三分钟搞定
- C# 套接字编程:Scoket,我用Scoket做的C# Windows应用程序如下:
- Windows环境下nginx服务无法停止
- 秒杀项目(2)集成redis
- 监督学习的基本假设——联合概率分布,独立同分布
- [GUET-CTF2019]NO SOS(考点:古典密码,培根加密)
- 给群联PS3111/inic6081量产工具添加闪存颗粒支持
- 产品经理相关学习资料
- Apostrophe not preceded
- 2020下半年软考中级(系统集成项目管理工程师)(个人备考用)
- hadoop hdfs合并文件下载到本地单个文件
- springfox-swagger-ui 3.0.0 配置,springfox-boot-starter 配置
- 华为无线-Portal认证异常-无线强制切换为手机流量
- watershed(分水岭算法)
热门文章
- 华为机试HJ72:百钱买百鸡问题
- android 9.0打开wifi,Android9.0 SystemUI 屏蔽打开wifi时不显示4G图标的逻辑
- php mysql交互实例_php基于session实现数据库交互的类实例
- C# 子类实例化基类 基类使用不了子类的方法_C#中的类、方法和属性
- linux复制文件中内容吗,Linux中实现对文件内容的复制。。。
- 浙江省二级计算机试题,2015浙江省计算机等级考试试题 二级ACCESS考试题库
- java webservice 线程_编程实践笔记{Java 线程 并发处理 Webservice}
- python编写ftp客户端_python实现ftp客户端示例分享
- 最近两周的前后端交互
- mysql_safe作用_mysqld_safe