首页 > 解决方案 > Android:通过浏览器链接启动活动时,onActivityResult Intent 为空

问题描述

我想为我的 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参数 inonActivityResult始终是NULL(并且 requestCodeRESULT_CANCELED也是)。

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

注意:我已经添加了Intent.FLAG_ACTIVITY_SINGLE_TOPand并添加了in ,但仍然无法正常工作。Intent.FLAG_ACTIVITY_CLEAR_TOPbrowserIntentandroid:launchMode="singleTask"BrowserLinkActivityplugin.xml

任何帮助表示赞赏。

标签: androidcordovaandroid-intentandroid-activity

解决方案


我之前曾建议将其设置launchModeSingleTaskfor BrowserLinkActivity

但是,后来问题的作者发现,在这种情况下,使用这两个意图标志(即)android:noHistory="true"从中删除plugin.xml并启动活动是有效的,并且结果被完美地设置了回去。BrowserLinkActivityFLAG_ACTIVITY_SINGLE_TOP | FLAG_ACTIVITY_CLEAR_TOP

希望对未来的其他开发者有所帮助。


推荐阅读