4

AutoAnswer に似たものを開発しようとしていますが、ブロードキャスト レシーバーに通知されると自動的にハングアップします。この問題に関する他のスタックオーバーフローの質問を一日中読んでいますが、権限MODIFY_PHONE_STATEはシステムアプリに制限されているようですが、一部の投稿では endCall(); を使用すると述べています。この許可は必要ありません。

私の質問には2つの部分があります

  1. endCall()まだ使用可能ですか?Android 2.3以降、どこでも使用されたことはありますか?
  2. もしそうなら、私はそれを機能させるために助けが必要です. http://code.google.com/p/autoanswer/source/browse/trunk/src/com/#com/android/internal/telephonyITelephony.aidlからダウンロード してパッケージに入れます。私は新しいユーザーなので、画像を投稿できません。

これは、私のファイル ツリーが netbeans でどのように見えるかです。
ここに画像の説明を入力

そして、これは私のブロードキャストレシーバーで実行されているコードです。この問題の解決策として、これまで何度もここに投稿されてきましたが、まだ機能させることができません:/

    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();
    }

しかし、画面には何も表示されません..

4

1 に答える 1

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);

OFFHOOK 状態に移行すると、「OFFHOOK」と表示された後setResultData(null);、通話を終了するトーストが表示されます。

于 2012-06-06T02:58:41.057 に答える