Метод интерфейса ITelephony answerRingingCall() не работает

Я хочу 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 или другие) все еще ищет идеальное решение, если кто-то найдет, пожалуйста, обновите, спасибо

========================================================================


person Sagar    schedule 22.06.2017    source источник


Ответы (1)


добавить следующие разрешения и код для манифеста

import android.annotation.TargetApi;
import android.app.Notification;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Build;
import android.service.notification.NotificationListenerService;
import android.service.notification.StatusBarNotification;
import android.util.Log;

import java.util.Arrays;

 @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
public class NotificationService extends NotificationListenerService {
public static PendingIntent pendingIntent;

//start service on call notification get
@Override
public void onNotificationPosted(StatusBarNotification sbn) {

    try {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            Log.e("onNotificationSag", "titleaction"+ Arrays.toString(sbn.getNotification().actions));

            if (sbn.getNotification().actions != null) {
                for (Notification.Action action : sbn.getNotification().actions) {
                    Log.e("onNotificationSag", "action" + action.title);
                    if (action.title.toString().equalsIgnoreCase("Answer")) {
                        pendingIntent = action.actionIntent;
                        //  try {
                        //receive call automatically
                        pendingIntent.send();

                        //} catch (PendingIntent.CanceledException e) {
                        //     e.printStackTrace();
                        //}

                    }
                }
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

}

@Override
public void onNotificationRemoved(StatusBarNotification sbn) {

} 
}

06-27 12:33:34.153 1543-2055/? W/System.err: java.lang.SecurityException: ни пользователь 10206, ни текущий процесс не имеют android.permission.MODIFY_PHONE_STATE. 06-27 12:33:34.153 1543-2055/? W/System.err: в android.app.ContextImpl.enforce(ContextImpl.java:1443) 06-27 12:33:34.154 1543-2055/? W/System.err: в android.app.ContextImpl.enforceCallingOrSelfPermission(ContextImpl.java:1475) 06-27 12:33:34.154 1543-2055/? W/System.err: в android.content.ContextWrapper.enforceCallingOrSelfPermission(ContextWrapper.java:675) 06-27 12:33:34.154 1543-2055/? W/System.err: в android.content.ContextWrapper.enforceCallingOrSelfPermission(ContextWrapper.java:675) 06-27 12:33:34.154 1543-2055/? W/System.err: в com.android.phone.PhoneInterfaceManager.enforceModifyPermission(PhoneInterfaceManager.java:1896) 06-27 12:33:34.154 1543-2055/? W/System.err: на com.android.phone.PhoneInterfaceManager.answerRingingCallForSubscriber(PhoneInterfaceManager.java:1199) 06-27 12:33:34.154 1543-2055/? W/System.err: на com.android.phone.PhoneInterfaceManager.answerRingingCall(PhoneInterfaceManager.java:1191) 06-27 12:33:34.154 1543-2055/? W/System.err: в com.android.internal.telephony.ITelephony$Stub.onTransact(ITelephony.java:93) 06-27 12:33:34.154 1543-2055/? W/System.err: в android.os.Binder.execTransact(Binder.java:458) 06-27 12:33:34.155 959-2000/? W/ActivityManager: отказ в разрешении: не разрешено отправлять широковещательную рассылку android.intent.action.HEADSET_PLUG с pid=24565, uid=10206 06-27 12:33:34.155 959-2000/? W/System.err: java.lang.SecurityException: Отказ в разрешении: не разрешено отправлять широковещательную рассылку android.intent.action.HEADSET_PLUG с pid=24565, uid=10206 06-27 12:33:34.155 959-2000/? W/System.err: в com.android.server.am.ActivityManagerService.broadcastIntentLocked(ActivityManagerService.java:18158) 06-27 12:33:34.155 959-2000/? W/System.err: в com.android.server.am.ActivityManagerService.broadcastIntent(ActivityManagerService.java:18662) 06-27 12:33:34.155 959-2000/? W/System.err: в android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:475) 06-27 12:33:34.155 959-2000/? W/System.err: в com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2719) 06-27 12:33:34.155 959-2000/? W/System.err: at android.os.Binder.execTransact(Binder.java:458) 06-27 12:33:34.156 959-979/? W/BroadcastQueue: отказ в разрешении: получение намерения {act=android.intent.action. MEDIA_BUTTON flg=0x10 (есть дополнения) } в com.android.chrome/org.chromium.chrome.browser.media.ui.MediaNotificationManager$PlaybackMediaButtonReceiver требуется Intent.android.permission.CALL_PRIVILEGED из-за отправителя smartcall.talktime.balance.phone. номеронабиратель (uid 10206) 06-27 12:33:34.157 959-979/? W/BroadcastQueue: отказ в разрешении: получение Intent {act=android.intent.action.MEDIA_BUTTON flg=0x10 (имеет дополнительные функции)} для com.android.chrome/org.chromium.chrome.browser.media.ui.MediaNotificationManager$PresentationMediaButtonReceiver требует Intent.android.permission.CALL_PRIVILEGED из-за отправителя smartcall.talktime.balance.phone.dialer (uid 10206) 06-27 12:33:34.157 959-979/? W/BroadcastQueue: отказ в разрешении: получение Intent {act=android.intent.action.MEDIA_BUTTON flg=0x10 (имеет дополнительные функции)} для com.android.chrome/org.chromium.chrome.browser.media.ui.MediaNotificationManager$CastMediaButtonReceiver требует Intent.android.permission.CALL_PRIVILEGED из-за отправителя smartcall.talktime.balance.phone.dialer (uid 10206) 06-27 12:33:34.157 959-979/? W/BroadcastQueue: отказ в разрешении: получение Intent {act=android.intent.action.MEDIA_BUTTON flg=0x10 (имеет дополнительные функции)} для com.google.android.apps.books/android.support.v4.media.session.MediaButtonReceiver требует Intent.android.permission.CALL_PRIVILEGED из-за отправителя smartcall.talktime.balance.phone.dialer (uid 10206) 06-27 12:33:34.157 959-979/? W/BroadcastQueue: отказ в разрешении: получение намерения {act=android.intent.action.MEDIA_BUTTON flg=0x10 (имеет дополнительные функции)} для com.google.android.youtube/com.google.android.libraries.youtube.player.PlayerUiModule$ LegacyMediaButtonIntentReceiver требует Intent.android.permission.CALL_PRIVILEGED из-за отправителя smartcall.talktime.balance.phone.dialer (uid 10206) 06-27 12:33:34.157 959-979/? W/BroadcastQueue: отказ в разрешении: получение намерения {act=android.intent.action.MEDIA_BUTTON flg=0x10 (имеет дополнительные функции)} для com.google.android.music/.playback.MediaButtonIntentReceiver требует Intent.android.permission.CALL_PRIVILEGED из-за отправитель smartcall.talktime.balance.phone.dialer (uid 10206) 06-27 12:33:34.157 959-979/? W/BroadcastQueue: отказ в разрешении: намерение трансляции {act=android.intent.action.MEDIA_BUTTON flg=0x10 (имеет дополнительные функции)} из smartcall.talktime.balance.phone.dialer (pid=24565, uid=10206) не экспортируется из uid 10103 из-за приемника jio.cloud.drive/com.newbay.syncdrive.android.ui.musicplayer. MusicIntentReceiver 06-27 12:33:34.157 959-979/? W/BroadcastQueue: отказ в разрешении: получение Intent {act=android.intent.action.MEDIA_BUTTON flg=0x10 (имеет дополнительные функции)} для com.UCMobile.intl/com.ucmusic.notindex.RemoteControlEventReceiver требует Intent.android.permission.CALL_PRIVILEGED из-за отправителю smartcall.talktime.balance.phone.dialer (uid 10206) 06-27 12:33:34.157 959-979/? W/BroadcastQueue: отказ в разрешении: получение намерения {act=android.intent.action.MEDIA_BUTTON flg=0x10 (имеет дополнительные функции)} для com.jio.media.jiobeats/com.jio.media.mobile.apps.jiobeats.notifications. RemoteViewsReceiver требует Intent.android.permission.CALL_PRIVILEGED из-за отправителя smartcall.talktime.balance.phone.dialer (uid 10206) 06-27 12:33:34.159 959-979/? W/BroadcastQueue: отказ в разрешении: получение Intent {act=android.intent.action.MEDIA_BUTTON flg=0x10 (имеет дополнительные функции)} для com.android.chrome/org.chromium.chrome.browser.media.ui.MediaNotificationManager$PlaybackMediaButtonReceiver требует android.permission.CALL_PRIVILEGED из-за отправителя smartcall.talktime.balance.phone.dialer (uid 10206) 06-27 12:33:34.159 959-979/? W/BroadcastQueue: отказ в разрешении: получение Intent {act=android.intent.action.MEDIA_BUTTON flg=0x10 (имеет дополнительные функции)} для com.android.chrome/org.chromium.chrome.browser.media.ui.MediaNotificationManager$PresentationMediaButtonReceiver требует android.permission.CALL_PRIVILEGED из-за отправителя smartcall.talktime.balance.phone.dialer (uid 10206) 06-27 12:33:34.159 959-979/? W/BroadcastQueue: отказ в разрешении: получение Intent {act=android.intent.action.MEDIA_BUTTON flg=0x10 (имеет дополнительные функции)} для com.android.chrome/org.chromium.chrome.browser.media.ui.MediaNotificationManager$CastMediaButtonReceiver требует android.permission.CALL_PRIVILEGED из-за отправителя smartcall.talktime.balance.phone.dialer (uid 10206) 06-27 12:33:34.159 959-979/? W/BroadcastQueue: отказ в разрешении: получение Intent {act=android.intent.action.MEDIA_BUTTON flg=0x10 (имеет дополнительные функции)} для com.google.android.apps.books/android.support.v4.media.session.MediaButtonReceiver требует android.permission.CALL_PRIVILEGED из-за отправителя smartcall.talktime.balance.phone.dialer (uid 10206) 06-27 12:33:34.160 959-7332/? W/ActivityManager: отказ в разрешении: не разрешено отправлять широковещательную рассылку android.intent.action.HEADSET_PLUG с pid=24565, uid=10206 06-27 12:33:34.160 959-7332/? W/System.err: java.lang.SecurityException: отказ в разрешении: не разрешено отправлять широковещательную рассылку android.intent.action. HEADSET_PLUG от pid=24565, uid=10206 06-27 12:33:34.160 959-979/? W/BroadcastQueue: отказ в разрешении: получение намерения {act=android.intent.action.MEDIA_BUTTON flg=0x10 (имеет дополнительные функции)} для com.google.android.youtube/com.google.android.libraries.youtube.player.PlayerUiModule$ LegacyMediaButtonIntentReceiver требует android.permission.CALL_PRIVILEGED из-за отправителя smartcall.talktime.balance.phone.dialer (uid 10206) 06-27 12:33:34.160 959-979/? W/BroadcastQueue: отказ в разрешении: получение намерения {act=android.intent.action.MEDIA_BUTTON flg=0x10 (имеет дополнительные функции)} для com.google.android.music/.playback.MediaButtonIntentReceiver требует android.permission.CALL_PRIVILEGED из-за умного вызова отправителя .talktime.balance.phone.dialer (uid 10206) 06-27 12:33:34.160 959-7332/? W/System.err: в com.android.server.am.ActivityManagerService.broadcastIntentLocked(ActivityManagerService.java:18158) 06-27 12:33:34.160 959-979/? W/BroadcastQueue: отказ в разрешении: намерение трансляции {act=android.intent.action.MEDIA_BUTTON flg=0x10 (имеет дополнительные функции)} из smartcall.talktime.balance.phone.dialer (pid=24565, uid=10206) не экспортируется из uid 10103 из-за приемника jio.cloud.drive/com.newbay.syncdrive.android.ui.musicplayer.MusicIntentReceiver 06-27 12:33:34.160 959-7332/? W/System.err: в com.android.server.am.ActivityManagerService.broadcastIntent(ActivityManagerService.java:18662) 06-27 12:33:34.160 959-7332/? W/System.err: в android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:475) 06-27 12:33:34.160 959-7332/? W/System.err: в com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2719) 06-27 12:33:34.160 959-979/? W/BroadcastQueue: отказ в разрешении: получение Intent {act=android.intent.action.MEDIA_BUTTON flg=0x10 (имеет дополнительные функции)} для com.UCMobile.intl/com.ucmusic.notindex.RemoteControlEventReceiver требует android.permission.CALL_PRIVILEGED из-за отправителя smartcall.talktime.balance.phone.dialer (uid 10206) 06-27 12:33:34.160 959-7332/? W/System.err: at android.os.Binder.execTransact(Binder.java:458) 06-27 12:33:34.160 959-979/? W/BroadcastQueue: отказ в разрешении: получение намерения {act=android.intent.action.MEDIA_BUTTON flg=0x10 (имеет дополнительные функции)} для com.jio.media.jiobeats/com.jio.media.mobile.apps.jiobeats.notifications. RemoteViewsReceiver требует android.permission.CALL_PRIVILEGED из-за отправителя smartcall.talktime.balance.phone.dialer (uid 10206) 06-27 12:33:34. 160 24565-24565/smartcall.talktime.balance.phone.dialer W/System.err: java.lang.SecurityException: Отказ в разрешении: не разрешено отправлять широковещательную рассылку android.intent.action.HEADSET_PLUG с pid=24565, uid=10206 06 -27 12:33:34.160 24565-24565/smartcall.talktime.balance.phone.dialer W/System.err: at android.os.Parcel.readException(Parcel.java:1599) 06-27 12:33:34.161 24565 -24565/smartcall.talktime.balance.phone.dialer W/System.err: at android.os.Parcel.readException(Parcel.java:1552) 06-27 12:33:34.161 24565-24565/smartcall.talktime.balance .телефон.звонилка

<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />
<uses-permission android:name="android.service.notification.NotificationListenerService" />
<uses-permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE" />



<service
        android:name=".NotificationService "
        android:label="@string/app_name"
        android:enabled="true"
        android:exported="true"
        android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
        <intent-filter>
            <action
                android:name="android.service.notification.NotificationListenerService" />
        </intent-filter>
    </service>

person Sagar    schedule 29.06.2017