【问题标题】:Android: onActivityResult Intent is null when activity get started through the browser-linkAndroid:通过浏览器链接启动活动时,onActivityResult Intent 为空
【发布时间】:2018-06-18 14:01:43
【问题描述】:

我想为我的 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 方法不起作用,onActivityResult 中的Intent 参数始终为NULL(请求代码也是RESULT_CANCELED) )。

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

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

感谢任何帮助。

【问题讨论】:

  • 您是否尝试在清单中使用android:launchMode="singleTask"?如果您有任何结果,请告诉我。
  • @ReazMurshed 谢谢。我编辑了这个问题。我已经在plugin.xml 中为BrowserLinkActivity 活动添加了它。放置这个选项的地方是正确的吗?
  • 那么有效吗?
  • @ReazMurshed 不幸的是不起作用。我还覆盖了 onNewIntent 方法,但它没有被调用。
  • @ReazMurshed 通过从plugin.xml 中删除android:noHistory="true" 并添加FLAG_ACTIVITY_SINGLE_TOP | FLAG_ACTIVITY_CLEAR_TOP 标志来启动BrowserLinkActivity 活动,解决了这个问题。请发布这两个提示,以便我将其作为答案进行检查。

标签: android cordova android-intent android-activity


【解决方案1】:

我之前曾建议将launchMode 设置为SingleTask 用于BrowserLinkActivity

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

希望将来能帮助其他开发人员。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多