![](/img/trans.png)
[英]onActivityResult() never called from tabbed activity in android
[英]OnActivityResult() is not called in Android Activity
我正在嘗試從android中的類安裝CA證書。 這就是我在做的事情。
//File1.java - This is a non-activity
ArrayList<String> CACertsList = new ArrayList<String>();
CACertsList.add(encodedCACert1);
CACertsList.add(encodedCACert2);
Context context = _serviceInstance.getServiceContext();
Intent intent = new Intent(context, CACertInstallActivity.class);
intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK );
intent.putExtra( "CERTDATA", CACertsList );
context.startActivity(intent);
和實際的活動
public class CACertInstallActivity extends Activity
{
@Override
public void onCreate( Bundle savedInstanceState )
{
super.onCreate( savedInstanceState );
Bundle bundle = getIntent().getExtras();
ArrayList<String> CACerts = bundle.getStringArrayList("CERTDATA");
for( int i = 0; i < CACerts.size(); i++ )
{
try
{
// Convert base64encoded Cert data to byte array and converting it into X509 Certificate format
byte[] certData = Base64.decode( CACerts.get(i) );
CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
InputStream in = new ByteArrayInputStream(certData);
X509Certificate cert = (X509Certificate)certFactory.generateCertificate(in);
// Start the install intent for the cert
Intent intent = KeyChain.createInstallIntent();
intent.addFlags( Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_SINGLE_TOP );
intent.putExtra( KeyChain.EXTRA_CERTIFICATE, cert.getEncoded() );
intent.putExtra( KeyChain.EXTRA_NAME, cert.getIssuerDN().getName() );
this.startActivityForResult(intent,2);
}
catch (CertificateException e1)
{
e1.printStackTrace();
}
catch (IOException e1)
{
e1.printStackTrace();
}
}
@Override
protected void onActivityResult( int requestCode, int resultCode, Intent data )
{
if( resultCode == RESULT_OK )
{
// Success
}
else
{
// Failed
}
super.onActivityResult(requestCode, resultCode, data);
}
}
清單聲明
<activity android:configChanges="orientation|screenSize|keyboard|keyboardHidden" android:name=".activity.CACertInstallActivity"/>
我有兩個問題。 一個是當我安裝多個證書時,只有一個證書安裝提示即將出現。 另一個是永遠不會調用onActivityResult方法。 任何人都可以找出我正在做的錯誤嗎?
此外,createInstallIntent確實返回值
* <p>When used with {@link Activity#startActivityForResult},
* {@link Activity#RESULT_OK} will be returned if a credential was
* successfully installed, otherwise {@link
* Activity#RESULT_CANCELED} will be returned.
對於未調用的onActivityResult,請嘗試更改context.startActivity(intent);
for context.startActivityForResult(intent);
這可能是晚了,但startActivityForResult(intent, 2)
不是從Context調用的,而是從Activity調用的。
所以從一個擴展了AppCompatActivity或Activity的類 ,你只需要調用:
startActivityForResult(intent, 2);
現在,關於你得到的錯誤,你可能已經解決了這個問題,但你必須等到onActivityResult
才能啟動另一個Intent來安裝以下證書。
同時從您的意圖中刪除標記。
在我這邊,我基本上建立了一個隊列(一個列表),它獲取所有證書,然后處理這個列表,每次你進入onActivityResult
,你只需啟動下一個證書意圖安裝。
我現在唯一的問題是,如果有人點擊“ 取消 ”按鈕,則不會調用onActivityResult
函數。 通常不應該是這種情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.