AutoAnswer に似たものを開発しようとしていますが、ブロードキャスト レシーバーに通知されると自動的にハングアップします。この問題に関する他のスタックオーバーフローの質問を一日中読んでいますが、権限MODIFY_PHONE_STATE
はシステムアプリに制限されているようですが、一部の投稿では endCall(); を使用すると述べています。この許可は必要ありません。
私の質問には2つの部分があります:
endCall()
まだ使用可能ですか?Android 2.3以降、どこでも使用されたことはありますか?- もしそうなら、私はそれを機能させるために助けが必要です. http://code.google.com/p/autoanswer/source/browse/trunk/src/com/#com/android/internal/telephony
ITelephony.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();
}
しかし、画面には何も表示されません..