【问题标题】:DeviceAdminReceiver: onChoosePrivateKeyAlias not calledDeviceAdminReceiver:未调用 onChoosePrivateKeyAlias
【发布时间】:2019-02-21 10:04:07
【问题描述】:

在我的 Android 应用程序(在 Kotlin 中)中,我想在我的 DeviceAdminReceiver 实现中使用 onChoosePrivateKeyAlias (documentation) 以静默方式选择私钥和证书对的别名以进行 VPN 身份验证。

我已经成功实现了onEnabledonDisabled,但是onChoosePrivateKeyAlias 似乎从未被调用:调用KeyChain.choosePrivateKeyAlias 创建的弹出窗口也没有被抑制,我在Logcat 中也找不到条目。

我无法在 stackoverflow 或一般情况下找到很多关于 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>

【问题讨论】:

  • 有人有onChoosePrivateAlias的经验吗?

标签: android android-broadcastreceiver device-admin


【解决方案1】:

您的DeviceAdminReceiver 需要是设备策略控制器(作为设备或配置文件所有者)才能根据documentation 拦截onChoosePrivateKeyAlias 的请求。

【讨论】:

  • 好的,非常感谢!不过有点尴尬,因为我只是在文档中忽略了这一点......
猜你喜欢
  • 2012-12-07
  • 2011-05-25
  • 2018-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-01
相关资源
最近更新 更多