DeviceAdminReceiver: onChoosePrivateKeyAlias ​​не вызывается - PullRequest
0 голосов
/ 17 сентября 2018

В моем приложении для Android (на Kotlin) я хочу использовать onChoosePrivateKeyAlias ( документация ) в моей реализации DeviceAdminReceiver, чтобы тихо выбрать псевдоним для личного ключа и пару сертификатов для аутентификации дляVPN.

Я успешно реализовал onEnabled и onDisabled, однако onChoosePrivateKeyAlias, кажется, никогда не вызывается: ни всплывающее окно, созданное с помощью вызова KeyChain.choosePrivateKeyAlias, не подавлено, ни я не могу найти запись в Logcat.

Мне не удалось найти много о onChoosePrivateKeyAlias в стеке потока или вообще.Кто-нибудь может мне здесь помочь?Есть ли другой фильтр намерений, который я должен установить, о котором я не знаю?

MyDeviceAdminReceiver:

import android.app.admin.DeviceAdminReceiver
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.util.Log

class MyDeviceAdminReceiver: DeviceAdminReceiver() {

    private var TAG = "MyDeviceAdmin"

    companion object {
        fun getComponentName(context: Context): ComponentName{
            return ComponentName(context.applicationContext, MyDeviceAdminReceiver::class.java)
        }
    }

    override fun onEnabled(context: Context?, intent: Intent?) {
        Log.d(TAG, "Device admin enabled")
     }

    override fun onChoosePrivateKeyAlias(context: Context?, intent: Intent?, uid: Int, uri: Uri?, alias: String?): String {
        super.onChoosePrivateKeyAlias(context, intent, uid, uri, alias)
        Log.d(TAG, "onChosePrivateKeyAlias called")
        return "Test User"
    }
}

Манифест (фрагмент):

<receiver
    android:name=".security.MyDeviceAdminReceiver"
    android:description="@string/app_name"
    android:label="@string/app_name"
    android:permission="android.permission.BIND_DEVICE_ADMIN">
    <meta-data
        android:name="android.app.device_admin"
        android:resource="@xml/my_device_admin_receiver" />
    <intent-filter>
        <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
    </intent-filter>
</receiver>

my_device_admin_receiver:

<?xml version="1.0" encoding="utf-8"?>
<device-admin>
<uses-policies>
    <reset-password/>
    <force-lock/>
    <encrypted-storage/>
</uses-policies>
</device-admin>

1 Ответ

0 голосов
/ 17 октября 2018

Ваш DeviceAdminReceiver должен быть контроллером политики устройства (как владелец устройства или профиля) для перехвата запросов с onChoosePrivateKeyAlias согласно документации .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...