37

Android でプログラムによって通話を終了できないという質問がたくさんあります。同時に、GooglePlay マーケットには、通話を有効にしてドロップできるダイヤラー アプリがたくさんあります。それらはどのように機能しますか?

編集:私のアプリはシステムアプリでなければならないことをどこかで読みました。では、システムにする方法と、システム アプリとユーザー アプリの違いは何ですか?

4

8 に答える 8

50

システムアプリである必要はありません。最初に、com.android.internal.telephonyプロジェクトでパッケージを作成し、これを " ITelephony.aidl"という名前のファイルに入れます。

package com.android.internal.telephony; 

interface ITelephony {      

boolean endCall();     

void answerRingingCall();      

void silenceRinger(); 

}

それができたら、次のコードを使用して通話を終了できます。

TelephonyManager telephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
Class clazz = Class.forName(telephonyManager.getClass().getName());
Method method = clazz.getDeclaredMethod("getITelephony");
method.setAccessible(true);
ITelephony telephonyService = (ITelephony) method.invoke(telephonyManager);
telephonyService.endCall();

たとえば、これを PhoneStateListener 内で使用できます。これが機能するには、マニフェストにアクセス許可が必要です。

<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

編集: ひどい書式設定で申し訳ありませんが、ここでコード ブロックを適切に実行する方法がまだわかりません:/

于 2013-08-05T18:44:59.847 に答える