簡體   English   中英

Android活動中未調用OnActivityResult()

[英]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調用的。

所以從一個擴展了AppCompatActivityActivity的類 ,你只需要調用:

startActivityForResult(intent, 2);

現在,關於你得到的錯誤,你可能已經解決了這個問題,但你必須等到onActivityResult才能啟動另一個Intent來安裝以下證書。

同時從您的意圖中刪除標記。

在我這邊,我基本上建立了一個隊列(一個列表),它獲取所有證書,然后處理這個列表,每次你進入onActivityResult ,你只需啟動下一個證書意圖安裝。

我現在唯一的問題是,如果有人點擊“ 取消 ”按鈕,則不會調用onActivityResult函數。 通常不應該是這種情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM