隨筆-348  評論-598  文章-0  trackbacks-0
          需要使用反射機制將ITelephony反射出來進行操作。
          private void dial(String number) {
                  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 {
                      TelephonyManager tManager 
          = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
                      Object iTelephony;
                      iTelephony 
          = (Object) getITelephonyMethod.invoke(tManager,(Object[]) null);
                      Method dial 
          = iTelephony.getClass().getDeclaredMethod("dial", String.class);
                      dial.invoke(iTelephony, number);
                  } 
          catch (IllegalArgumentException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  } 
          catch (IllegalAccessException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  } 
          catch (SecurityException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  } 
          catch (NoSuchMethodException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  } 
          catch (InvocationTargetException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
              }
              
              
          private void call(String number) {
                  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 {
                      TelephonyManager tManager 
          = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
                      Object iTelephony;
                      iTelephony 
          = (Object) getITelephonyMethod.invoke(tManager,(Object[]) null);
                      Method dial 
          = iTelephony.getClass().getDeclaredMethod("call", String.class);
                      dial.invoke(iTelephony, number);
                  } 
          catch (IllegalArgumentException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  } 
          catch (IllegalAccessException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  } 
          catch (SecurityException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  } 
          catch (NoSuchMethodException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  } 
          catch (InvocationTargetException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
              }


          ---------------------------------------------------------
          專注移動開發

          Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
          posted on 2011-01-25 14:38 TiGERTiAN 閱讀(10004) 評論(6)  編輯  收藏 所屬分類: Android

          評論:
          # re: Android彈出撥號界面和撥打電話實現 2012-04-04 11:12 | hello1719
          您好啊,我想問一下,為什么我用這段代碼的時候,有兩句報錯呢?如下所示

          iTelephony = (Object) getITelephonyMethod.invoke(tManager,(Object[]) null);
          dial.invoke(iTelephony, number);


          報錯內容是:Unhandled exception type InvocationTargetException

          您順便能把ITelephony.aidl 文件內容發一下嗎?是不是我少添加了什么內容呢?  回復  更多評論
            
          # re: Android彈出撥號界面和撥打電話實現 2012-04-04 18:23 | TiGERTiAN
          @hello1719
          跟AIDL沒啥關系吧,就是直接反射內部類的內部方法  回復  更多評論
            
          # re: Android彈出撥號界面和撥打電話實現 2012-04-06 10:19 | hello1719
          @TiGERTiAN
          嗯已經解決了。。
            回復  更多評論
            
          # re: Android彈出撥號界面和撥打電話實現 2013-01-08 09:25 | xiaotang_hb
          請問樓主,這里能改變,撥號界面和撥打界面嗎?顯示我的自定義界面UI?請教下,給我點思路。謝謝  回復  更多評論
            
          # re: Android彈出撥號界面和撥打電話實現 2016-03-08 16:45 | jaime
          請我dial和call方法有什么區別么?   回復  更多評論
            
          # re: Android彈出撥號界面和撥打電話實現 2016-03-09 10:44 | firetomato
          這找不到call是怎么回事?現在有別的方法實現這個功能嗎?  回復  更多評論
            
          主站蜘蛛池模板: 景德镇市| 兖州市| 澜沧| 昌邑市| 天门市| 武汉市| 滁州市| 石河子市| 轮台县| 罗平县| 台北市| 舞钢市| 思茅市| 新民市| 广州市| 崇左市| 巧家县| 沧源| 甘孜| 宜丰县| 阳谷县| 云阳县| 上栗县| 金堂县| 永泰县| 铜陵市| 班玛县| 云阳县| 成安县| 河曲县| 滕州市| 卢龙县| 恩施市| 玛纳斯县| 镇巴县| 上高县| 景洪市| 同心县| 赞皇县| 绥棱县| 夏邑县|