我想为我的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
中的onActivityResult
参数始终为NULL
(并且requestCode也是RESULT_CANCELED
。
如何阻止browser-link
启动/创建BrowserLinkActivity
活动的新实例? (我认为这是导致setResult
无法正常工作的主要原因。)
注意:我已将Intent.FLAG_ACTIVITY_SINGLE_TOP
和Intent.FLAG_ACTIVITY_CLEAR_TOP
添加到browserIntent
,并为android:launchMode="singleTask"
添加了BrowserLinkActivity
} plugin.xml
但仍然无法正常工作。
感谢任何帮助。
答案 0 :(得分:1)
我之前曾建议将launchMode
的{{1}}设置为SingleTask
。
但是,问题的作者后来发现,从BrowserLinkActivity
中删除android:noHistory="true"
并使用这两个意图标记(即plugin.xml
)来限制BrowserLinkActivity
活动是可行的这种情况下,结果被完美地调低了。
希望对以后的其他开发人员有所帮助。