-1

重複の可能性:
着信コールを傍受する方法 Android 2.3.x

デフォルトの電話画面を上書きするアプリを作成しており、Android 2.3 以降と互換性がある必要があります。

現在、私はこのコードを持っています:

private void answerCallAidl() throws RemoteException {
    // telephonyService.silenceRinger();       -------not work on 2.3
    // telephonyService.answerRingingCall();   -------not work on 2.3

    Intent headSetUnPluggedintent = new Intent(Intent.ACTION_HEADSET_PLUG);
    headSetUnPluggedintent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
    headSetUnPluggedintent.putExtra("state", 1); // 0 = unplugged  1 = Headset with microphone 2 = Headset without microphone
    headSetUnPluggedintent.putExtra("name", "Headset");

    // TODO: Should we require a permission?
    sendOrderedBroadcast(headSetUnPluggedintent, null);

    Intent buttonDown = new Intent(Intent.ACTION_MEDIA_BUTTON);           
    buttonDown.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN,
                          KeyEvent.KEYCODE_HEADSETHOOK));
    sendOrderedBroadcast(buttonDown, "android.permission.CALL_PRIVILEGED");

    // 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");
} 


private void ignoreCallAidl() throws RemoteException {
    // telephonyService.silenceRinger();     -------not work on 2.3
    // telephonyService.endCall();           -------not work on 2.3
    Intent buttonUp = new Intent(Intent.ACTION_MEDIA_BUTTON);             
    buttonUp.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN,
                        KeyEvent.KEYCODE_HEADSETHOOK));
    sendOrderedBroadcast(buttonUp, "android.permission.CALL_PRIVILEGED");
}

私の問題は次のとおりです。

  1. 着信を拒否できません。
  2. バージョン 2.3.5 では動作しません。
  3. アプリでデフォルトの電話画面を置き換えたい。

助けていただければ幸いです。

4

1 に答える 1

0

簡単に言えば、それは不可能です。

以前は、JAVA に (リフレクションを使用した) チートがありましたが、現在は利用できません。以下を参照してください。

Class c = Class.forName(tm.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
telephonyService = (ITelephony)m.invoke(tm);

このリンクを参照してください。それは不可能であることを示しています。これを読んだらすぐにこの考えを放棄することをお勧めします。

于 2012-06-25T09:29:40.140 に答える