隨筆-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 閱讀(10011) 評論(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是怎么回事?現在有別的方法實現這個功能嗎?  回復  更多評論
            
          主站蜘蛛池模板: 涿鹿县| 五河县| 惠东县| 峨边| 工布江达县| 勃利县| 宁陕县| 河曲县| 盐山县| 京山县| 黄冈市| 东乡县| 宾阳县| 乳山市| 邹城市| 五大连池市| 进贤县| 任丘市| 资源县| 响水县| 攀枝花市| 兖州市| 宽甸| 竹山县| 文昌市| 城固县| 那坡县| 米泉市| 潞城市| 六安市| 潼南县| 买车| 莱西市| 兰考县| 九龙县| 米易县| 大埔县| 长垣县| 昆山市| 兴和县| 红原县|