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.pswp.cn/news/443161.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/443161.shtml
英文地址,請注明出處:http://en.pswp.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…