gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 23:50:54 25 4
gpt4 key购买 nike

我想为我的 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
}

这是 Activity 。浏览器 Intent 将在 BrowserLinkActivity Activity 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>

但是,问题是当从浏览器链接调用 Activity 时,setResult 方法不起作用并且 onActivityResult 中的 Intent 参数始终是 NULL(并且 requestCode 也是 RESULT_CANCELED)。

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

注意:我已经将 Intent.FLAG_ACTIVITY_SINGLE_TOPIntent.FLAG_ACTIVITY_CLEAR_TOP 添加到 browserIntent 并添加android:launchMode="singleTask" 用于 plugin.xml 中的 BrowserLinkActivity 但仍然无法正常工作。

感谢任何帮助。

最佳答案

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

但是,后来问题的作者发现从 plugin.xml 中删除 android:noHistory="true" 并启动 BrowserLinkActivity 具有这两个 Intent 标志的 Activity (即 FLAG_ACTIVITY_SINGLE_TOP | FLAG_ACTIVITY_CLEAR_TOP)在这种情况下有效,结果完美地恢复了。

希望以后能对其他开发者有所帮助。

关于Android:当 Activity 通过浏览器链接启动时,onActivityResult Intent 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50911244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com