DeviceAdminReceiver:未调用 onChoosePrivateKeyAlias
DeviceAdminReceiver: onChoosePrivateKeyAlias not called
在我的 Android 应用程序(Kotlin 中)中,我想在 DeviceAdminReceiver
的实现中使用 onChoosePrivateKeyAlias
(documentation) 来静默 select用于 VPN 身份验证的私钥和证书对的别名。
我已经成功实现了 onEnabled
和 onDisabled
,但是 onChoosePrivateKeyAlias
似乎从未被调用:通过调用 KeyChain.choosePrivateKeyAlias
创建的弹出窗口也没有被抑制,我也找不到Logcat.
中的条目
我在 Whosebug 上或一般情况下找不到很多关于 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>
根据 documentation.
,您的 DeviceAdminReceiver
需要成为设备策略控制器(作为设备或配置文件所有者)才能拦截使用 onChoosePrivateKeyAlias
的请求
在我的 Android 应用程序(Kotlin 中)中,我想在 DeviceAdminReceiver
的实现中使用 onChoosePrivateKeyAlias
(documentation) 来静默 select用于 VPN 身份验证的私钥和证书对的别名。
我已经成功实现了 onEnabled
和 onDisabled
,但是 onChoosePrivateKeyAlias
似乎从未被调用:通过调用 KeyChain.choosePrivateKeyAlias
创建的弹出窗口也没有被抑制,我也找不到Logcat.
我在 Whosebug 上或一般情况下找不到很多关于 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>
根据 documentation.
,您的DeviceAdminReceiver
需要成为设备策略控制器(作为设备或配置文件所有者)才能拦截使用 onChoosePrivateKeyAlias
的请求