2012-06-06 29 views
4

我正在嘗試開發類似於AutoAnswer的東西,但它也會在通知廣播接收器時自動掛斷。我已經花了整整一天閱讀關於這個問題的其他stackoverflow問題,似乎許可MODIFY_PHONE_STATE僅限於系統應用程序,但是,一些職位表示,使用endCall();不需要此權限。有沒有什麼辦法可以在Android 2.3後結束通話?

我的問題有兩個部分

  1. endCall()仍然可用?自從Android 2.3以來它有沒有在任何情況下使用過?
  2. 如果是這樣,我需要幫助使它工作,因爲現在它不工作。我從http://code.google.com/p/autoanswer/source/browse/trunk/src/com/#com/android/internal/telephony 下載ITelephony.aidl並將其放入包裝中。我是新用戶,因此我無法發佈圖片。

這是我的文件樹看起來像在NetBeans:
enter image description here

而且這是在我的廣播接收器運行的代碼多數民衆贊成。它之前已經張貼在這裏多次作爲解決這個問題但我仍然不能得到它的工作:/

ITelephony telephonyService; 
    TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
    try { 
     Class c = Class.forName(telephony.getClass().getName()); 
     Method m = c.getDeclaredMethod("getITelephony"); 
     m.setAccessible(true); 
     telephonyService = (ITelephony) m.invoke(telephony); 
     telephonyService.endCall(); 
    } 
    catch (Exception e) { 
      //TODO: some exception handling 
    } 

通過日誌看,我看到這個錯誤:

[PhoneIntfMgr] CMD_END_CALL: no call to hang up 

編輯:我是全新的android開發,似乎無法找到android應用程序的控制檯輸出 - 例如調用e.printStackTrace(),但我確實有Toast在catch塊中顯示一些文本,如下所示:

catch (Exception e) { 
     Toast toast = Toast.makeText(context, "IN CATCH BLOCK ", Toast.LENGTH_LONG); 
     toast.show(); 
     e.printStackTrace(); 
    } 

但沒有顯示在屏幕上..

+0

隨着代碼的狀態,您無法判斷是否拋出了異常。也許開始你應該添加一些調試輸出到你的catch塊。 – Paulpro

+0

希望它有助於.. http://stackoverflow.com/questions/10860369/fetch-dial-number-while-calling –

+0

首先了解logcat。然後想想爲什麼你想把用戶的手機掛在他們身上 - 這很少是合適的事情。 –

回答

0

您可以使用此代碼:當你要摘機狀態

telephonyManager.listen(new PhoneStateListener() { 

      @Override 
      public void onCallStateChanged(int state, String incomingNumber) { 
       switch (state) { 
       case TelephonyManager.CALL_STATE_IDLE: 
        /* your code */ 
        break; 
       case TelephonyManager.CALL_STATE_OFFHOOK: 
        Toast.makeText(context.getApplicationContext(), "OFFHOOK", 
          Toast.LENGTH_SHORT).show(); 
        setResultData(null); 
        break; 
       case TelephonyManager.CALL_STATE_RINGING: 
        /* your code */ 
        break; 
       } 
       // super.onCallStateChanged(state, incomingNumber); 
      } 

     }, PhoneStateListener.LISTEN_CALL_STATE); 

,你可以看到一個敬酒,顯示「摘機」,然後setResultData(null);末是電話。

+0

一旦通話已經進行,此代碼是否可以工作?我不想阻止通話,我想結束當前通話。 – user1304281

+0

看到編輯後,它檢測到呼叫狀態。我正在使用OFFHOOK狀態進行結束通話,當您接聽電話或當您輸入號碼並撥打 – AliSh

+0

謝謝!明天早上我會試試這個。 – user1304281

相關問題