Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检索Android Keychain上安装的证书_Android_Xamarin.android_Xamarin_Keychain - Fatal编程技术网

检索Android Keychain上安装的证书

检索Android Keychain上安装的证书,android,xamarin.android,xamarin,keychain,Android,Xamarin.android,Xamarin,Keychain,我有一个使用以下代码安装的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.ExtraCerti

我有一个使用以下代码安装的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用户界面安装证书,并强制用户设置PIN以保护设备。那很好

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

var chain = KeyChain.GetCertificateChain (this, "My cert alias");
我得到以下错误:
Java.Lang.IllegalStateException:从主线程调用它可能导致死锁


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

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

如果你做了一些可能需要时间的事情,比如网络呼叫或写入文件,那么你可能会阻止用户界面,应用程序在用户看来会没有响应,甚至可能会引发ANR(应用程序没有响应)而停止工作


所以答案很简单,用不同的思路去做。在安卓系统上,是为了帮助您相当容易地实现这类功能。

谢谢,我将尝试设置一个异步callI,并为此正确设置一个异步任务,但现在我得到了这里描述的错误:调用ChoosePrivateKeyAlias()的正确方法是什么我在任何地方都找不到我发送给在这件事上技术超群的人的文档,你应该很快得到答复。我和艾哈迈德在如何正确调用ChoosePrivateKeyAlias()方面遇到了同样的问题。您是如何解决的?您是否尝试过异步任务?有人知道如何使用C#/Xamarin实现这一点吗?