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、最为准确…

如何将系统退回上个版本Android,vivo NEX A降级教程,如何回退到旧版本系统的方法...

也来分享一下这个vivo NEX A手机的相关降级操作了,因为看到有的小伙伴对对于新升级的系统不是特别的满意,这个时候就会考虑进行系统的降级回退操作 ,一般直接刷官方的全量包是降不了,需要一个安卓10.0的中转降级包才行的&#xff…

支持3d android 模拟器,真正免root的3D神器详细使用教程

3D神器的功能众所周知,Android手机的GPU(图像显示芯片)是内置在CPU中的,而由于各个手机所采用的CPU不同,其GPU也不一样,不同的GPU,其内置的渲染模式也不一样。这就导致了不同手机的CPU平台需要使用对应的游戏数据包才能…

jays+android耳机,android – 响应多按钮有线耳机

我正在驾驶一对JAYS四耳机(有线遥控器/麦克风上有3个按钮)插入Galaxy Nexus(ICS 4.0.2)进行实验.我的问题是,只有中间的按钮被我写的测试应用程序’识别’,即按键时触发了Intent.ACTION_MEDIA_BUTTON和/或Activity.onKeyDown回调与KeyCode 79.按另外两个按钮不会触发任何以前的…

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

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

android sonar 简书,SonarQube对ios、android代码检测

一、sonar安装利用sonar检测代码需要安装下面几个软件SonarQube、Sonar-Scanner、OClint、sonar plugin for objective-c、sonar-I10n-zh(安装步骤参考http://www.cnblogs.com/ishawn/p/3959521.html )二、ios检测脚本cp -rf /Users/conf/ios/sonar-project.properties ${WORKS…

android afw模式,[HUAWEI-TITANC328]手机加密功能开启后,工作区中添加超级备份手机不断重启的分析报告...

工作区中添加超级备份手机不断重启的分析报告【华为反馈】 【TIT-AL00C328B120_AFW_必现】创建工作空间后升级系统,升级失败,手机循环重启。通过分析log发现,实际上这个问题与OTA无关,而与工作区应用发出的notification有关。经过沟通和自测&…

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

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

Html跨页面调用函数,一个cshtml如何在另一个cshtml中调用一个函数?

在webmatrix中,我在App_Data中创建了一个带有许多公共静态函数的DAL.cshtml。我想从其他文件夹中的另一个.cshtml页面调用它们。我现在得到了编译器错误消息:CS0103:名称DAL在当前上下文中不存在(请注意,我是一名初学者&#xff0…

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

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

html 地图点击标注有提示框不完整,百度地图的实现标注以及标注提示框.docx

$(function () {//最后加载的js代码findDimensions();map new BMap.Map("container"); // 创建地图实例// var point new BMap.Point(116.404, 39.915); // 创建点坐标map.centerAndZoom("北京");map.enableScrollWheelZoom(); // 开启鼠标滚轮缩放map.e…

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方式: 模块部…

html自定义标记,HTML模板(自定义)标记

我知道使用自定义html标记由于各种原因是不合适的,但我想运行一个特定的情况,可能需要自定义html标记,并希望得到其他方面的信息,或者可能更好实现我的目标的方式。HTML模板(自定义)标记在我的代码中,我有我称之为模板…

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

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

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

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

使用计算机管理文件教后反思,《管理计算机中的文件》教学反思

《管理计算机中的文件》教学反思一眨眼,新学期已经过半了。现在,写一写我的《管理计算机中的文件》教学反思。这是第八周方老师来我校调研的一节课。作为学校信息技术学科的新老师,方老师说要听听我的课,感觉我蛮淡定的。说实话&a…