2012-10-09 83 views
0

因此,作爲主題狀態,我需要能夠在HTC OneX上通過Android 4.0.3以編程方式接聽電話。我已經閱讀了谷歌已經撤銷了MODIFY_PHONE_STATE許可的幾個地方,所以要執行此任務,您需要解決此問題。如何以編程方式在Android 4.0.3中接聽電話?

我特地爲兩個途徑至今:

(1)隨着蓋伊的職位here並使用一個BroadcastReceiver

(2)使用下面的代碼,試圖通過一個shell命令命中關鍵事件。

final Runtime r = Runtime.getRuntime(); 
    try { 
     Process process = r.exec("input keyevent 5"); 
     InputStream stream = process.getErrorStream(); 
     log.v("Process Error Stream: " +stream.toString()); 
     log.v("Sending shell command to Answer Call"); 
    } catch (Exception e) { 
     log.v("Stack Trace: " + e.getStackTrace().toString()); 
     e.printStackTrace(); 
    } 

我用這個,因爲KeyEvent的5 KeyEvent.CALL根據谷歌和它使用亞行工作

adb shell input keyevent 5 

我的問題是,我究竟做錯了什麼?因爲邏輯上這兩種方法都是有意義的,但它們都不工作,甚至不會產生任何類型的運行時錯誤。

乾杯

回答

6

後的研究時間,我發現,同時使用廣播接收機路由和runtime.exec()路由,根本無法使用Android API在Android 4.0.3中接聽電話。

對於那些你仍然不知道,我確實發現一些有用的信息。你可以使用以下命令adb shell input keyevent 5 5回答通過adb呼叫是呼叫按鈕,在Android的關鍵代碼它是KEYEVENT_CALL

+0

我想象這樣的事情會是一個安全/用戶的惡夢,如果他們允許一個電話被回答,製造或以編程方式篡改。 – Phix

+0

我們究竟如何實現這個代碼?只需用'adb shell input keyevent 5'替換'input keyevent 5'? – Naddy

1
+0

也許我並不清楚,但Google CHANGED在較新版本的Android中使用電話管理器的能力,並且您共享的所有鏈接都未解決或與我的問題無關。我需要關於我正在使用的方法的建議,或者需要另一種解決方法來解決這個問題,而不是我在SO上發佈多次之前做過的Google搜索。 – onetwopunch

+0

這裏我發現一篇文章檢查這一個http://grokbase.com/t/gg/android-developers/12547a1nda/cannot-answer-the-incoming-call-during-checking-gmail-account-when-user-forgot -pin-code –

4

這從Android 2.2到4.0,現在將try catch添加到4.1.2和4.2的最後一行之後。坦率地說,不知道它是如何工作的,但它適用於我。

  Log.d(tag, "InSecond Method Ans Call"); 
    // froyo and beyond trigger on buttonUp instead of buttonDown 
    Intent buttonUp = new Intent(Intent.ACTION_MEDIA_BUTTON); 
    buttonUp.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(
      KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK)); 
    sendOrderedBroadcast(buttonUp, "android.permission.CALL_PRIVILEGED"); 
Intent headSetUnPluggedintent = new Intent(Intent.ACTION_HEADSET_PLUG); 
    headSetUnPluggedintent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); 
    headSetUnPluggedintent.putExtra("state", 0); 
    headSetUnPluggedintent.putExtra("name", "Headset"); 
    try { 
     sendOrderedBroadcast(headSetUnPluggedintent, null); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

這是Android 4.1.2爲我工作,以及我對4.2 測試這仍然給它處理的異常。

相關問題