小菜毛毛技術(shù)分享

          與大家共同成長(zhǎng)

            BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
            164 Posts :: 141 Stories :: 94 Comments :: 0 Trackbacks

          http://dev.10086.cn/cmdn/bbs/thread-17136-1-1.html

          最近看論壇上有人問(wèn)如何掛斷電話(huà),實(shí)際上1.1版本后.Google已經(jīng)把該API隱藏掉
          今天看資料,發(fā)現(xiàn)可以通過(guò)AIDL(Android遠(yuǎn)程方法)及反射,調(diào)用hide API,廢話(huà)不多說(shuō)了.附上過(guò)程

          一:在你的項(xiàng)目中新建包c(diǎn)om.android.internal.telephony,因?yàn)橐褂肁IDL,該包與ITelephony.aidl一致
              在該包下新建文件ITelephony.aidl

          首先

          package com.android.internal.telephony;
          /* * Copyright (C) 2007 The Android Open Source Project
          * * Licensed under the Apache License, Version 2.0 (the "License");
          * you may not use this file except in compliance with the License.
          * You may obtain a copy of the License at
          * * [url=http://www.apache.org/licenses/LICENSE-2.0]http://www.apache.org/licenses/LICENSE-2.0[/url]
          * * Unless required by applicable law or agreed to in writing, software
          * distributed under the License is distributed on an "AS IS" BASIS,
          * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
          * See the License for the specific language governing permissions and
          * limitations under the License.
          */
          /**
          * Interface used to interact with the phone. Mostly this is used by the
          * TelephonyManager class. A few places are still using this directly.
          * Please clean them up if possible and use TelephonyManager insteadl.
          * * {@hide}
          */
          interface ITelephony {
          /** * End call or go to the Home screen *
          * @return whether it hung up
          */
          boolean endCall();
          /** * Answer the currently-ringing call.
          * * If there's already a current active call, that call will be
          * automatically put on hold. If both lines are currently in use, the
          * current active call will be ended. *
          * TODO: provide a flag to let the caller specify what policy to use
          * if both lines are in use. (The current behavior is hardwired to
          * "answer incoming, end ongoing", which is how the CALL button
          * is specced to behave.) *
          * TODO: this should be a oneway call (especially since it's called
          * directly from the key queue thread). */
          void answerRingingCall();
          }   
           
          之后會(huì)在gen下面自動(dòng)生成ITelephony.java
          二.通過(guò)反射生成ITelephony實(shí)例
          TelephonyManager telMgr = (TelephonyManager)getSystemService(
          TELEPHONY_SERVICE);
          //初始化iTelephony
          Class <TelephonyManager> c = TelephonyManager.class;
          Method getITelephonyMethod = null;
          try {
                 getITelephonyMethod = c.getDeclaredMethod("getITelephony", (Class[])null);
                 getITelephonyMethod.setAccessible(true);
          } catch (SecurityException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
          } catch (NoSuchMethodException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
          }
          try {
                  iTelephony = (ITelephony) getITelephonyMethod.invoke(telMgr, (Object[])null);
          } catch (IllegalArgumentException e) {
          // TODO Auto-generated catch block
                e.printStackTrace();
          } catch (IllegalAccessException e) {
          // TODO Auto-generated catch block
                e.printStackTrace();
          } catch (InvocationTargetException e) {
          // TODO Auto-generated catch block
                e.printStackTrace();
          }
          這樣可以調(diào)用iTelephony的endCall()方法
          三.在A(yíng)ndroidManifest.xml中增加權(quán)限
            <uses-permission android:name="android.permission.CALL_PHONE"/>
          posted on 2010-11-22 16:11 小菜毛毛 閱讀(1026) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): andriod
          主站蜘蛛池模板: 青河县| 万盛区| 逊克县| 比如县| 日照市| 抚松县| 金山区| 望城县| 布尔津县| 罗定市| 香格里拉县| 宁都县| 留坝县| 中超| 潞城市| 晋州市| 黎城县| 行唐县| 东兴市| 广德县| 泽州县| 宜川县| 封丘县| 榆树市| 共和县| 绥宁县| 色达县| 育儿| 伊川县| 红河县| 乌兰浩特市| 平顺县| 大庆市| 新丰县| 彭水| 乌兰察布市| 革吉县| 那坡县| 荥经县| 洞口县| 焦作市|