11

これはすでに何度も質問されていますが、答えはありませんが、誰かが最終的に問題を解決してくれることを願っています.

問題: Android 2.3 を実行しているルート化されていないデバイスを使用しています。次のサービスを作成する必要があります。

  1. 電話をかけます。
  2. 呼び出しに応答するまで待機します。
  3. 通話に応答した後、電話を切ります (タイムアウトあり)。

他の多くの人と同じように、私は #2 で立ち往生しています。以下は、これまでに提案されたソリューションの要約です。

  • PhoneStateListener を使用する (最も一般的な): 機能しません。発信通話の場合、必要なものを検出できません。
  • 次のような使用com.android.internal.telephony.CallManagerとそのメソッドregisterForPreciseCallStateChanged(たとえば、これ): は機能せず、その中に電話が登録されていないため、イベントは発生しません。
  • com.android.internal.telephony.PhoneFactoryインスタンスを取得するために使用しcom.android.internal.telephony.Phoneます (これはすべての鍵です): 機能しません。ファクトリが初期化されていません。呼び出しで初期化しようとするとmakeDefaultPhones、セキュリティ例外が発生します (ここのように)。
  • 発信着信音を検出する (リンク): 著者のDany Poplawecは、着信音を検出すると問題を解決できる可能性があると述べていますが、詳細を提供していないため、この手法を試すことができませんでした。

すべてがすでに試されているように見えますが、私を救うトリックがもう 1 つあるかもしれません :)

4

2 に答える 2

0

Android INJECT_EVENTS パーミッションの指示に従えば、ルート化されたデバイスで 3 番目の箇条書きの解決策が可能になるはずです。

段階的に、それは次のようなものです:

  1. プラットフォーム証明書を使用してアプリに署名します。これには、次の手順が必要です。
  2. adb を使用してアプリケーションをシステム アプリとしてインストールします。

    adb ルート

    adb 再マウント

    adb push MyApp.apk /system/app

    adb シェル chmod 644 /systen/app/MyApp.apk

  3. デバイスを再起動します。

私は実際に 2 番目の箇条書きの解決策を試しましたが、うまくいきません (Kitkat を実行している Galaxy S5 で)。3 番目の箇条書き項目の解決策は、まったく問題なく機能します。パッケージ名に関係なく、アプリは com.android.phone として実行されるため、アプリをデバッグする場合はそのプロセスにアタッチする必要があります。

于 2014-08-05T20:56:23.120 に答える