小菜毛毛技術分享

          與大家共同成長

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            164 Posts :: 141 Stories :: 94 Comments :: 0 Trackbacks

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

          最近看論壇上有人問如何掛斷電話,實際上1.1版本后.Google已經把該API隱藏掉
          今天看資料,發現可以通過AIDL(Android遠程方法)及反射,調用hide API,廢話不多說了.附上過程

          一:在你的項目中新建包com.android.internal.telephony,因為要使用AIDL,該包與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();
          }   
           
          之后會在gen下面自動生成ITelephony.java
          二.通過反射生成ITelephony實例
          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();
          }
          這樣可以調用iTelephony的endCall()方法
          三.在AndroidManifest.xml中增加權限
            <uses-permission android:name="android.permission.CALL_PHONE"/>
          posted on 2010-11-22 16:11 小菜毛毛 閱讀(1026) 評論(0)  編輯  收藏 所屬分類: andriod
          主站蜘蛛池模板: 新蔡县| 玛沁县| 南漳县| 桦川县| 邹城市| 宁武县| 漳浦县| 乐都县| 邳州市| 张家港市| 浮山县| 五大连池市| 石景山区| 文昌市| 尚志市| 郴州市| 神木县| 赤峰市| 略阳县| 安阳县| 拜泉县| 广西| 陇西县| 丹棱县| 进贤县| 闸北区| 湛江市| 奉化市| 宣威市| 凌源市| 钟祥市| 马公市| 九江市| 云南省| 吐鲁番市| 黄浦区| 彭泽县| 黄山市| 石门县| 和平县| 监利县|