Вам не нужно быть системным приложением. Во-первых, создать пакет com.internal.android.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" />
Edit: Извиняюсь за ужасного форматирования, я до сих пор не могу понять, как правильно сделать блоки кода здесь:/
Что касается меня, то лучше [solutuion] [1] достичь этого. [1]: http://stackoverflow.com/questions/18977012/why-itelephony-aidl-works?lq=1 – bgplaya
См http://android.stackexchange.com/q/27/440 для получения инструкций о том, как сделать приложение системным приложением. – Flow