1

我有一个使用此代码安装的 x509 证书:

var certificate = AssetManagement.GetCertificate (xdoc); //this is a helper class that retrieves the certificate

//Code to install to keychain
Intent intent = KeyChain.CreateInstallIntent ();
intent.PutExtra (KeyChain.ExtraCertificate, certificate.GetRawCertData());
intent.PutExtra (KeyChain.ExtraName, "AzureManagement");

StartActivity (intent);

该代码成功调用android UI 安装证书并强制用户设置PIN 以保护设备。这很好用。

但是当我尝试像这样访问钥匙串时:

var chain = KeyChain.GetCertificateChain (this, "My cert alias");

我收到以下错误:Java.Lang.IllegalStateException: calling this from your main thread can lead to deadlock

访问钥匙串的正确方法是什么?

4

1 回答 1

3

安卓真的很棒。它告诉您“请不要这样做:您可能会阻止用户界面”。Android UI(显示和用户事件)由 Android 中的一个线程处理:UI 线程又名主线程。

如果您执行一些可能需要时间的操作,例如网络调用或写入文件,那么您可能会阻止 UI,并且应用程序看起来对您的用户没有响应,甚至可能通过引发 ANR(应用程序无响应)而停止工作.

所以答案很简单,在不同的线程中进行。在 Android 上,AsyncTask旨在帮助您相当轻松地实现这类事情。

于 2013-06-17T00:05:39.970 回答