首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android:当通过浏览器链接开始活动时,onActivityResult意图为空。

Android:当通过浏览器链接开始活动时,onActivityResult意图为空。
EN

Stack Overflow用户
提问于 2018-06-18 14:01:43
回答 1查看 628关注 0票数 1

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

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

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

MyPlugin.java :

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

代码语言:javascript
复制
Intent intent = new Intent(context, BrowserLinkActivity.class);
cordova.startActivityForResult((CordovaPlugin) this, intent, REQUEST_CODE);

因此,onActivityResult在插件中被重写:

代码语言:javascript
复制
@Override
public void onActivityResult( int requestCode, int resultCode, Intent data) {
 // The data parameter is always null
}

这是活动。浏览器意图将在BrowserLinkActivity activity onCreate中开始。

BrowserLinkActivity.java :

代码语言:javascript
复制
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文件,如下所示:

代码语言:javascript
复制
<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 ( requestCode也是RESULT_CANCELED )。

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

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

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-19 19:03:58

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

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

希望这对未来的开发人员有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50911244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档