Я хочу receive Incoming call
из своего приложения, я использую ITelephony.aidl
для End and receive call
. Я написал следующий код, чтобы ответить на вызов при нажатии кнопки, в основном я могу завершить вызов на всех устройствах, но когда я пытаюсь принять вызов, он не работает.
Этот код (ответа на вызов) отлично работает на некоторых устройствах, которые я тестировал (Motorola** e3 6.0, исправление безопасности для Android от 1 июня 2016 г., honor 4.4.4, YU 4.4.4. и т. д.)it's not working on
(Xiaomi note 4 6.0.1 , lyf 6.O.1 исправление безопасности для Android от 1 марта 2017 г.)` может быть причиной проблемы из-за обновления исправления безопасности для Android в последних версиях.
Я думаю, что Google разрешил некоторые permission
только для system apps
по security
причине в последнем обновлении android security patch 1 Jun 2016 to 1 March 2017.
.
Пожалуйста, помогите, спасибо
private void m13352k() {
try {
TelephonyManager telephonyManager = (TelephonyManager)
getSystemService("phone");
Method declaredMethod =
Class.forName(telephonyManager.getClass().getName()).
getDeclaredMethod("getITelephony", new Class[0]);
declaredMethod.setAccessible(true);
ITelephony iTelephony = (ITelephony)
declaredMethod.invoke(telephonyManager, new Object[0]);
iTelephony.silenceRinger();
iTelephony.answerRingingCall();
} catch (Exception e) {
try {
m13350j();
} catch (Exception e2) {
m13349i();
}
}
}
private void m13349i() {
try {
Intent intent = new Intent(callerIdConfig.mediaButton());
intent.putExtra("android.intent.extra.KEY_EVENT", new KeyEvent(0, 79));
sendOrderedBroadcast(intent, callerIdConfig.callPrivileged());
intent = new Intent(callerIdConfig.mediaButton());
intent.putExtra("android.intent.extra.KEY_EVENT", new KeyEvent(1, 79));
sendOrderedBroadcast(intent, callerIdConfig.intentCallPrivileged());
intent = new Intent(callerIdConfig.headsetPlug());
intent.addFlags(1073741824);
intent.putExtra("state", callerIdConfig.m13633f());
intent.putExtra("name", callerIdConfig.headset());
sendOrderedBroadcast(intent, null);
} catch (Exception e) {
e.printStackTrace();
}}
private void m13350j() {
Intent intent = new Intent("android.intent.action.HEADSET_PLUG");
intent.addFlags(1073741824);
intent.putExtra("state", callerIdConfig.m13633f());//0
intent.putExtra("name", callerIdConfig.headset());
sendOrderedBroadcast(intent, null);
intent = new Intent(callerIdConfig.mediaButton());
intent.putExtra("android.intent.extra.KEY_EVENT", new KeyEvent(0, 79));
sendOrderedBroadcast(intent, callerIdConfig.intentCallPrivileged());
intent = new Intent(callerIdConfig.mediaButton());
intent.putExtra("android.intent.extra.KEY_EVENT", new KeyEvent(1, 79));
sendOrderedBroadcast(intent, callerIdConfig.intentCallPrivileged());
intent = new Intent("android.intent.action.HEADSET_PLUG");
intent.addFlags(1073741824);
intent.putExtra("state", callerIdConfig.m13629e());//1
intent.putExtra("name", callerIdConfig.headset());//"Headset"
sendOrderedBroadcast(intent, null);
}
Я получаю ниже журнал, когда я нажимаю, чтобы получить вызов из моего приложения, пожалуйста, предоставьте решение
W/System.err: в android.app.ActivityManagerProxy.broadcastIntent(ActivityManagerNative.java:3218) 06-27 12:33:34.161 24565-24565/smartcall.talktime.balance.phone.dialer W/System.err: в android Приложение. .java:426) 06-27 12:33:34.161 24565-24565/smartcall.talktime.balance.phone.dialer W/System.err: at smartcall.talktime.balance.phone.dialer.callrecorder.activity.FullscreenCallerActivity.m13349i (FullscreenCallerActivity.java:253) 06-27 12:33:34.161 24565-24565/smartcall.talktime.balance.phone.dialer W/System.err: at smartcall.talktime.balance.phone.dialer.callrecorder.activity.FullscreenCallerActivity .m13352k(FullscreenCallerActivity.java:314) 06-27 12:33:34.161 24565-24565/smartcall.talktime.balance.phone.dialer W/System.err: в smartcall.talktime.balanc e.phone.dialer.callrecorder.activity.FullscreenCallerActivity.access$200(FullscreenCallerActivity.java:35) 06-27 12:33:34.161 24565-24565/smartcall.talktime.balance.phone.dialer W/System.err: в smartcall .talktime.balance.phone.dialer.callrecorder.activity.FullscreenCallerActivity$2.run(FullscreenCallerActivity.java:212) 06-27 12:33:34.161 24565-24565/smartcall.talktime.balance.phone.dialer W/System.err : на android.os.Handler.handleCallback(Handler.java:815) 06-27 12:33:34.161 24565-24565/smartcall.talktime.balance.phone.dialer W/System.err: на android.os.Handler. dispatchMessage(Handler.java:104) 06-27 12:33:34.161 24565-24565/smartcall.talktime.balance.phone.dialer W/System.err: в android.os.Looper.loop(Looper.java:207) 06-27 12:33:34.161 24565-24565/smartcall.talktime.balance.phone.dialer W/System.err: в android.app.ActivityThread.main(ActivityThread.java:5767) 06-27 12:33:34.161 24565-24565/smartcall.talktime.balance.phone.dialer W/System.err: на java.l ang.reflect.Method.invoke(собственный метод) 06-27 12:33:34.161 24565-24565/smartcall.talktime.balance.phone.dialer W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller .run(ZygoteInit.java:789) 06-27 12:33:34.161 24565-24565/smartcall.talktime.balance.phone.dialer W/System.err: в com.android.internal.os.ZygoteInit.main(ZygoteInit .java:679)
Я обнаружил, что это решение отлично работает на некоторых устройствах, на которых отображается уведомление о вызове в строке состояния, это решение поддерживается после исправления безопасности Android 1 марта 2017 г. обновления (это решение может не работать на некоторых устройствах Samsung и oppo или другие) все еще ищет идеальное решение, если кто-то найдет, пожалуйста, обновите, спасибо
========================================================================