java.lang.SecurityException: ни у пользователя 10032, ни у текущего процесса нет android.permission.MODIFY_PHONE_STATE

Я работаю над сервисом автоматического PIN/PUK при запуске устройства. Сервис запускается во время загрузки. Я использую IT-телефонию с рефлексивными методами. У меня телефон lollipop 5.1.1, это укоренившийся nexus 5. В моем манифесте Android Studio написано: "Разрешение предоставляется только системным приложениям".

Я использую этот фрагмент кода:

    TelephonyManager tm = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
        int state = tm.getSimState();

        if(state == TelephonyManager.SIM_STATE_PIN_REQUIRED || state == TelephonyManager.SIM_STATE_PUK_REQUIRED)
        {
            Log.d(TAG,"PIN PUK STATE = " + state );


            if (state  == TelephonyManager.SIM_STATE_PIN_REQUIRED ){
                try {
                    message += ", PIN Code required" ;
                    Class clazz = Class.forName(tm.getClass().getName());
                    if (clazz != null) {
                        Method m = clazz.getDeclaredMethod("getITelephony");
                        m.setAccessible(true);
                        Object iTelephony = m.invoke(tm);

                        Class params[] = new Class[1];
                        params[0] = String.class;

                        Method m2 = iTelephony.getClass().getDeclaredMethod("supplyPin", params);
                        m2.setAccessible(true);

                        Object i = m2.invoke(iTelephony, "1111");

                        Log.d(TAG, m2.toString() + " *** " + i.toString());
                    }
                }catch (Exception e) {
                    Log.d(TAG,"Impossible to unlock " + e.toString());
                    e.printStackTrace();

                }
            }

И я получаю этот журнал:

07-20 10:31:33.109    1267-1267/eu.cabrera.pinunlocker W/System.err﹕ Caused by: java.lang.SecurityException: Neither user 10032 nor current process has android.permission.MODIFY_PHONE_STATE.
07-20 10:31:33.112    1267-1267/eu.cabrera.pinunlocker W/System.err﹕ at android.os.Parcel.readException(Parcel.java:1546)
07-20 10:31:33.112    1267-1267/eu.cabrera.pinunlocker W/System.err﹕ at android.os.Parcel.readException(Parcel.java:1499)
07-20 10:31:33.112    1267-1267/eu.cabrera.pinunlocker W/System.err﹕ at com.android.internal.telephony.ITelephony$Stub$Proxy.supplyPin(ITelephony.java:1540)

Я тестировал с обычным приложением, а теперь с системным приложением, та же проблема.

Я делаю что-то плохое? Мое приложение действительно системное? Я скопировал eu.cabrera.pinunlocker.apk в /system/app

Что мне нужно, чтобы предоставить моему приложению android.permission.MODIFY_PHONE_STATE?

Спасибо за вашу помощь. Antoine

1 ответ

Решение

Вы пытались поместить свое приложение в /system/priv-app? Рекомендуется, если вам нужно предоставить системное разрешение / system / priv-app - это правильное местоположение для вашего приложения. Только apks в / system / priv-app могут использовать разрешения "системного" уровня

Другие вопросы по тегам