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

Java代码 a4c26d1e5885305701be709a3d33442f.png a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

packagecom.zhouzijing.android.demo;

importjava.lang.reflect.Method;

importcom.android.internal.telephony.ITelephony;

importandroid.telephony.TelephonyManager;

publicclassPhoneUtils {

publicstaticITelephony getITelephony(TelephonyManager telephony)throwsException {

Method getITelephonyMethod = telephony.getClass().getDeclaredMethod("getITelephony");

getITelephonyMethod.setAccessible(true);//私有化函数也能使用

return(ITelephony)getITelephonyMethod.invoke(telephony);

}

}

package com.zhouzijing.android.demo;

import java.lang.reflect.Method;

import com.android.internal.telephony.ITelephony;

import android.telephony.TelephonyManager;

public class PhoneUtils {

public static ITelephony getITelephony(TelephonyManager telephony) throws Exception {

Method getITelephonyMethod = telephony.getClass().getDeclaredMethod("getITelephony");

getITelephonyMethod.setAccessible(true);//私有化函数也能使用

return (ITelephony)getITelephonyMethod.invoke(telephony);

}

}

第三步:创建电话广播拦截器

MyPhoneBroadcastReceiver.java

Java代码 a4c26d1e5885305701be709a3d33442f.png a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

packagecom.zhouzijing.android.demo;

importcom.android.internal.telephony.ITelephony;

importandroid.content.BroadcastReceiver;

importandroid.content.Context;

importandroid.content.Intent;

importandroid.telephony.TelephonyManager;

importandroid.util.Log;

publicclassMyPhoneBroadcastReceiverextendsBroadcastReceiver {

privatefinalstaticString TAG = MyPhone.TAG;

@Override

publicvoidonReceive(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);

}

}

publicvoiddoReceivePhone(Context context, Intent intent) {

String phoneNumber = intent.getStringExtra(

TelephonyManager.EXTRA_INCOMING_NUMBER);

TelephonyManager telephony = (TelephonyManager)context.getSystemService(

Context.TELEPHONY_SERVICE);

intstate = telephony.getCallState();

switch(state){

caseTelephonyManager.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;

caseTelephonyManager.CALL_STATE_IDLE:

Log.i(TAG,"[Broadcast]电话挂断="+phoneNumber);

break;

caseTelephonyManager.CALL_STATE_OFFHOOK:

Log.i(TAG,"[Broadcast]通话中="+phoneNumber);

break;

}

}

}

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 MyPhoneBroadcastReceiverextends 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);

}

}

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

Java代码 a4c26d1e5885305701be709a3d33442f.png a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

packagecom.zhouzijing.android.demo;

importandroid.app.Activity;

importandroid.content.IntentFilter;

importandroid.os.Bundle;

importandroid.telephony.TelephonyManager;

importandroid.util.Log;

importandroid.view.View;

publicclassMyPhoneextendsActivity {

publicfinalstaticString TAG ="MyPhone";

publicfinalstaticString B_PHONE_STATE = TelephonyManager.ACTION_PHONE_STATE_CHANGED;

privateMyPhoneBroadcastReceivermBroadcastReceiver;

@Override

publicvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.my_phone);

}

//按钮1-注册广播

publicvoidregisterThis(View v) {

Log.i(TAG,"registerThis");

mBroadcastReceiver =newMyPhoneBroadcastReceiver();

IntentFilter intentFilter =newIntentFilter();

intentFilter.addAction(B_PHONE_STATE);

intentFilter.setPriority(Integer.MAX_VALUE);

registerReceiver(mBroadcastReceiver, intentFilter);

}

//按钮2-撤销广播

publicvoidunregisterThis(View v) {

Log.i(TAG,"unregisterThis");

unregisterReceiver(mBroadcastReceiver);

}

}

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 MyPhoneBroadcastReceivermBroadcastReceiver;

@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配置权限

Xml代码 a4c26d1e5885305701be709a3d33442f.png a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

其中:

Java代码 a4c26d1e5885305701be709a3d33442f.png a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

iTelephony.answerRingingCall();//自动接通电话

iTelephony.answerRingingCall();//自动接通电话

必须有权限

android.permission.MODIFY_PHONE_STATE

Java代码 a4c26d1e5885305701be709a3d33442f.png a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

iTelephony.endCall();//自动挂断电话

iTelephony.endCall();//自动挂断电话

必须有权限 android.permission.CALL_PHONE

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/443161.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android实现mp3分析,Android编程实现播放MP3功能示例

本文实例讲述了Android编程实现播放MP3功能。分享给大家供大家参考,具体如下:在android中播放mp3非常简单,也是项目中经常使用的,比如说要做项目的背景音乐,应用中某些功能的提示音等的。应用非常广泛,下面提供一个简单…

android 投票功能,腾讯新闻Android客户端更新 加入投票功能

腾讯近日更新了其应用《腾讯新闻》安卓版,加入了新闻专题,投票两大新功能,同事还优化了用户界面,大家在浏览各类新闻方面又有了新的选择。新版特点:1、新闻专题:热门新闻专题呈现,聚合浏览&…

android8.1自定义通知栏,Android 8.1隐藏状态栏图标的实例代码

近期客户需求,状态栏只显示时间和电池图标,如图状态栏图标的布局文件在frameworks\base\packages\SystemUI\res\layout\status_bar.xml,主要包括通知,定位,蓝牙,信号,时间,电池等图标&#xff0…

广州城市地图为android,广州无障碍地图

广州无障碍地图是一款非常不错的手机导航app,专门为老人与残障人士打造的哦。该app将准确的为残障用户规划出一条没有任何障碍的出行路线,并且该软件拥有语音、文字等不同的播报方式。特色说明1、智能化的手机导航的系统,语音识别2、最为准确…

华为副总鸿蒙,“哄蒙”败北!华为副总裁落实最新消息,鸿蒙3月31日正式亮剑...

原标题:“哄蒙”败北!华为副总裁落实最新消息,鸿蒙3月31日正式亮剑不得不说,最近的华为生态建设又取得了重大的突破。在2020年不到一年的时间里,华为HMS生态注册开发者的数量就已经快要突破200万了,如此庞大…

html淡化效果,jQuery实现基本淡入淡出效果的方法详解

本文实例讲述了jQuery实现基本淡入淡出效果的方法。分享给大家供大家参考,具体如下:jQuery fadeIn()方法:用于淡入已隐藏的元素jQuery fadeOut()方法:用于淡出可见的元素$(document).ready(function(){$("button").clic…

html 类型转换,JavaScript怎么进行类型转换?

JavaScript怎么进行类型转换?下面本篇文章就来介绍一下使用javascript进行类型转换的方法,希望对大家有所帮助。JavaScript 变量可以转换为新变量或其他数据类型,分为两种情况:● 隐性转换:通过 JavaScript 自身自动转…

html中购物车总金怎么算额,计算购物车金额总和( jquery )

今天简单写了一个jq版购物车计算金额总和的例子,如图:整体页面代码如下:*{list-style: none;}html,body{margin: 0;padding: 0;}.all-list{padding: 40px;margin: 0 auto;}.choose-list{overflow: hidden;}.choose-list >h5{display: bloc…

ios html5上架,iOS原生集成H5+详细流程

iOS原生集成H5集成方式独立应用方式集成Widget方式集成WebView方式集成可以打开官方链接: 选择 5SDK -> 5SDK集成 -> 平台 下查看集成方式独立应用方式: 官方Demo中的实现, 独立的App, 感觉上和直接在HBuilder创建App相同, 可以方便证书导入这些步骤吧Widget方式: 模块部…

微型计算机中celeron,微型计算机中常提及的Pentium或Celeron是指其_______

摘要:旋律的起伏,微型心灵感受体和密节奏用机的疏,心两训练入手同时从身方面。细分还可统模、常提讨模式启发为传论模式、式,学生智力模式教学要目一种为主的的发展是以。微型重要组成教育部分)的实习是(。...旋律的起伏&#xff…

计算机选购知识点,笔记本选购知识点,找准自己的需求才是王道

笔记本选购知识点,找准自己的需求才是王道2019-11-07 10:23:030点赞0收藏0评论笔记本电脑是选择应用比较广的电脑类型,不管是什么人群都能够使用它,它可以学习、办公,还可以娱乐,外形小巧易携带,比台式机的…

更改计算机硬盘名字,如何修改盘符 – 磁盘及光驱名称错乱,教你怎么更改回来...

一般情况下,打开“我的电脑”后,我们会看到排在前面是硬盘,紧接着的是光驱,然后是插上去的可移动磁盘或U盘。但有时我们可能会神奇地发现硬盘盘符及光盘驱动器名称及排列错乱了。比如正常情况下C,D,E&#…

计算机用于数据管理经历了,管理系统中计算机应用--期中测验答案

管理系统中计算机应用--期中测验答案 (3页)本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!17.90 积分期中测验答案期中测验答案 一、一、单项选择单项选择:: 1-5 ACDCC 6-10 CA…

戴尔服务器显示e1810,戴尔服务器提示: PowerEdge2950 E1810 HDD 1 Fault该如何解决?求帮助!!!...

满意答案zxb65000212013.06.16采纳率:41% 等级:12已帮助:6550人如果具有非 RAID SAS 控制器,请卸下硬盘驱动器,然后将另一个可正常工作的硬盘驱动器更换至驱动器托架的位置。 如果问题得以解决,请将硬盘…

小米手机显示流量数据连接到服务器,小米手机流量总不稳定,这三项设置可能你会用到...

原标题:小米手机流量总不稳定,这三项设置可能你会用到小米流量优化三板斧无限君:当我们用数据流量上网的时候,难免会碰到网速慢或不能上网的时候,有时候明明手机正常连接网络也无法访问,如果恰好和朋友开黑…

怎么用dos系统进入服务器,怎么进入dos_如何进入dos的方法(图文介绍)

怎么进入dos_如何进入dos的方法(图文介绍)发布时间:2017-04-10 10:54来源:互联网当前栏目:电脑基础知识怎么进入dosDOS是英文Disk Operating System的缩写,意思是“磁盘操作系统”。它是个人计算机上的一类操作系统。从1981年直到…

wps如何自己制作流程图_WPS小技巧——如何制作炫酷的个性电子简历

大家好,上期内容我们介绍了一个在Word文档中,快速改变顺序排列的小技巧,那今天,再来给大家分享一个利用Excel快速制作电子简历的实用方法吧~首先,选中部分空白单元格,然后给它添加一个外边框来粗化一个制作…

ca开头的车是什么牌子_微电调研 | 把高速车摘了牌子当低速车卖还很普遍

编者:即将出台国家标准和一系列规范政策的低速电动车,再次成为舆论焦点。在争论与博弈中,与低速电动车息息相关的人们——消费者、经销商、社区人民等少有发言机会。他们为什么选择低速电动车?当地的交通生态是怎样的?…

解锁三星bl锁有几种方法_解锁陶瓷砂磨机常见的几种机械密封损坏原因及处理方法发表...

解锁陶瓷砂磨机常见的几种机械密封损坏原因及处理方法相信很多使用过陶瓷砂磨机的客户朋友们都或多或少的遇到过机器在使用过程中出现机械密封损坏的状况,机械密封损坏其实是由多种不同的原因造成的,下面由小编为您解锁几种日常使用中易造成机械密封损坏…

rust 案例_RUST-X气相防锈产品落户中国,助力中国高端制造出口海外

2017年10月25日中圳德兴(北京)防锈材料有限公司成为美国RUST-X中国总经销商。RUST-X采用先进的VCI气相防锈技术自主研发一系列VCI气相防锈产品,产品主要特点是:具有接触防锈和不接触防锈双重保护屏障,所有产品均无毒、环保、可生物降解。RUST-X拥有500多…