android - 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_TOP
and并添加了in ,但仍然无法正常工作。Intent.FLAG_ACTIVITY_CLEAR_TOP
browserIntent
android:launchMode="singleTask"
BrowserLinkActivity
plugin.xml
任何帮助表示赞赏。
解决方案
我之前曾建议将其设置launchMode
为SingleTask
for BrowserLinkActivity
。
但是,后来问题的作者发现,在这种情况下,使用这两个意图标志(即)android:noHistory="true"
从中删除plugin.xml
并启动活动是有效的,并且结果被完美地设置了回去。BrowserLinkActivity
FLAG_ACTIVITY_SINGLE_TOP | FLAG_ACTIVITY_CLEAR_TOP
希望对未来的其他开发者有所帮助。
推荐阅读
- machine-learning - 我将如何确定我应该在机器学习中的分类问题陈述中使用哪个评估指标?
- r - 对于每个 ID,将组分成列并折叠 R 中的多个值字符串
- python - 变量对之间的散点图
- php - 如何修复 pg_query():查询失败错误:使用 php 插入数据时在或附近出现语法错误
- ios - 自定义 Apple 地图注释无法正常工作
- snowflake-cloud-data-platform - Snowflake 在加载 CSV 时选择时间戳格式而不是日期格式
- c - 如何根据近指针确定远指针的大小?
- node.js - 在 mongodb 和 group 中聚合 15 分钟
- python-2.7 - 从 setup.py 安装时未复制 yaml 文件
- python - 创建套接字连接时,不允许接收数据的请求