Android KeyChain.createInstallIntent立即返回

时间:2014-10-17 15:28:44

标签: android android-intent android-4.4-kitkat

在我的Android应用中,我正在尝试安装从我的服务器检索到的PKCS12文件(证书和私钥)。为此,我使用的是KeyChain.createInstallIntent()。我传入文件和名称以用作Extras,然后使用startActivityForResult来启动活动。

这在运行4.1.1 Jelly Bean的Galaxy Tab 2上工作正常,打开系统对话框以按预期安装证书。但是,在运行4.4.2 KitKat的Galaxy Tab 3上,立即调用onActivityResult方法,结果代码为RESULT_CANCELLED

我想要完成的是让应用程序收到证书安装成功/失败的通知,然后打开浏览器窗口并相应地转到成功或失败页面。

protected void importPkcs12(byte[] pkcs12, String defaultName)
{
    Intent installIntent = KeyChain.createInstallIntent();
    installIntent.putExtra(KeyChain.EXTRA_PKCS12, pkcs12);
    installIntent.putExtra(KeyChain.EXTRA_NAME, defaultName);
    startActivityForResult(installIntent, INSTALL_KEYSTORE_CODE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{
    logger.debug("onActivityResult called with requestCode {}", requestCode);

    switch(requestCode)
    {
        case INSTALL_KEYSTORE_CODE:
        {           
            if(resultCode == RESULT_OK)
            {
               // Go to success web page
            }
            else //RESULT_CANCELED
            {
                // Go to canceled/failure web page  
            }
            break;
        }
    }

    super.onActivityResult(requestCode, resultCode, data);
}

1 个答案:

答案 0 :(得分:4)

有一张票:https://code.google.com/p/android/issues/detail?id=158411

作为一种解决方法,您可以使用带有密钥库更改事件的BroadcastReceiver在用户实际安装证书时获取通知,但这显然会做出很多假设,而且它还不能让您了解实际情况取消活动。