Android:onActivityResult当通过浏览器链接启动活动时,Intent为null

时间:2018-06-18 14:01:43

标签: android cordova android-intent android-activity

我想为我的Cordova / Ionic Android应用程序实现一个插件。 我在插件中有这两个主要文件:

1。 MyPlugin.java 将通过Ionic(Ionic 3,Angular 5)应用程序调用。

2。 BrowserLinkActivity.java 负责启动浏览器并从浏览器中恢复数据。

MyPlugin.java:

该插件将使用以下代码行启动BrowserLinkActivity

Intent intent = new Intent(context, BrowserLinkActivity.class);
cordova.startActivityForResult((CordovaPlugin) this, intent, REQUEST_CODE);

相应地,插件中覆盖了onActivityResult

@Override
public void onActivityResult( int requestCode, int resultCode, Intent data) {
 // The data parameter is always null
}

这是活动。浏览器Intent将从BrowserLinkActivity活动onCreate开始。

BrowserLinkActivity.java:

public class BrowserLinkActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    Uri data = getIntent().getData();
    if (data == null){

      Intent browserIntent = new Intent(Intent.ACTION_VIEW, "The website URL");

      browserIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | 
                Intent.FLAG_ACTIVITY_NO_HISTORY | 
                Intent.FLAG_FROM_BACKGROUND | 
                Intent.FLAG_ACTIVITY_CLEAR_TOP);

      startActivity(browserIntent);
    }
    else { // Activity has started through the browser-link
        Intent returnIntent = new Intent();             
        returnIntent.putExtra("Key","Something");

        setResult(Activity.RESULT_OK, returnIntent);
        finish();
    }

}

我已经定义了plugin.xml文件,如下所示:

<config-file target="AndroidManifest.xml" parent="/manifest/application">
    <activity android:name="cordova.plugin.mycustomplugin.BrowserLinkActivity"
       android:launchMode="singleTask" android:noHistory="true">

        <intent-filter>
                <action android:name="android.intent.action.VIEW"/>

                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
                <data android:scheme="http" android:host="MyHost.COM" />
        </intent-filter>

    </activity>
</config-file>

然而,问题是当从浏览器链接调用活动时,setResult方法不起作用,Intent中的onActivityResult参数始终为NULL(并且requestCode也是RESULT_CANCELED

如何阻止browser-link启动/创建BrowserLinkActivity活动的新实例? (我认为这是导致setResult无法正常工作的主要原因。)

注意:我已将Intent.FLAG_ACTIVITY_SINGLE_TOPIntent.FLAG_ACTIVITY_CLEAR_TOP添加到browserIntent,并为android:launchMode="singleTask"添加了BrowserLinkActivity } plugin.xml但仍然无法正常工作。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我之前曾建议将launchMode的{​​{1}}设置为SingleTask

但是,问题的作者后来发现,从BrowserLinkActivity中删除android:noHistory="true"并使用这两个意图标记(即plugin.xml)来限制BrowserLinkActivity活动是可行的这种情况下,结果被完美地调低了。

希望对以后的其他开发人员有所帮助。