国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

AIDL自動掛斷電話

2019-11-08 00:30:38
字體:
來源:轉載
供稿:網友

該業務是屬于跨進程的數據獲取

所需權限

<!--     打電話權限 --><uses-permission android:name="android.permission.CALL_PHONE"/><!-- 監聽電話權限   --><uses-permission android:name="android.permission.READ_PHONE_STATE"/><!-- 處理呼出電話權限,用于修改呼出的電話號碼    --><uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>

1、建一個新的包,包名為

com.android.internal.telephony

          在該包內創建一個接口類  (官方已經定死的,名為代理接口)

interface ITelephony{    boolean endCall();    void answerRingingCall();}

2、找到你的項目存在的文件夾位置,找到該接口類,將后綴名java 改名 aidl  (后綴名需在電腦進行設置可見才可以改到的具體步驟百度)

      ITelephony.aidl

3、重啟eclips 或者刷新項目

配置成功后,在 gen 目錄下會有一個包名為com.android.internal.telephony的包   里面有一個 ITelephony.java類   自動生成的

4、  在需要掛斷電話功能的類添加一個方法     在需要調用該方法的位置時,需要傳入一個TelephoneManager對象

原理:通過反射獲取aidl代理接口的對象 ITelephony 

private static ITelephony getITelephony(TelephonyManager telephony)throws IllegalArgumentException,IllegalaccessException,

                        InvocationTargetException,NoSuchMethodException {Method getITelephonyMethod = null;getITelephonyMethod = telephony.getClass().getDeclaredMethod("getITelephony");getITelephonyMethod.setAccessible(true);// 私有化函數也能使用return (ITelephony) getITelephonyMethod.invoke(telephony);}

5、寫一個內部類繼承自PhoneStateListener

class MyPhoneStateListener extends PhoneStateListener {/** * 電話狀態改變監聽 */@Overridepublic void onCallStateChanged(int state, // 狀態常量String incomingNumber) {Log.i("info", "額incomingNumber" + incomingNumber);switch (state) {case TelephonyManager.CALL_STATE_IDLE:// 空閑Log.i("info", "CALL_STATE_IDLE" + "空閑狀態");break;case TelephonyManager.CALL_STATE_OFFHOOK:// 接聽Log.i("info", "CALL_STATE_OFFHOOK" + "接聽狀態");break;case TelephonyManager.CALL_STATE_RINGING:// 振鈴TelephonyManager manager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);ITelephony iTelephony;try {iTelephony = getITelephony(manager);if (iTelephony != null) {if (incomingNumber.equals("123")) {

//如果號碼為123try {iTelephony.endCall();Log.i("info", "已掛斷" + "  號碼為:" + incomingNumber);} catch (RemoteException e) {// TODO Auto-generated catch blocke.printStackTrace();}}} else {Log.i("info", "CALL_STATE_RINGING" + "振鈴狀態" + "ITelephonyManager為空");}} catch (IllegalArgumentException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (IllegalAccessException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (InvocationTargetException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (NoSuchMethodException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}break;}}}

6、在生命周期開始時onCreate時 進行廣播注冊即可

protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);

// 開啟電話監聽狀態TelephonyManager manager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);// 調用listener的監聽方法、監聽電話狀態的方法listener = new MyPhoneStateListener();manager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);// 注冊廣播接收器receiver = new MyPhoneReceiver();IntentFilter filter = new IntentFilter();filter.addAction(Intent.ACTION_NEW_OUTGOING_CALL);registerReceiver(receiver, filter);}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌鲁木齐县| 扶风县| 布拖县| 河南省| 化州市| 馆陶县| 汤阴县| 黑山县| 青神县| 永善县| 定西市| 花莲县| 黔东| 会宁县| 仙游县| 大姚县| 周至县| 大理市| 台南县| 信宜市| 高雄市| 汨罗市| 南涧| 二手房| 阜阳市| 惠东县| 鹤壁市| 兰西县| 林甸县| 河东区| 云林县| 定陶县| 洮南市| 南京市| 台湾省| 扬中市| 陵水| 皮山县| 东源县| 日照市| 响水县|