Android 从CordovaPlugin打开活动
我已经编写了一个CordavaPlugin派生类Android 从CordovaPlugin打开活动,android,cordova,phonegap-plugins,Android,Cordova,Phonegap Plugins,我已经编写了一个CordavaPlugin派生类 public class ShowMap extends CordovaPlugin { @Override public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { if (action.compareTo("showMap") == 0) {
public class ShowMap extends CordovaPlugin {
@Override
public boolean execute(String action, JSONArray args,
CallbackContext callbackContext) throws JSONException {
if (action.compareTo("showMap") == 0)
{
String message = args.getString(0);
this.echo(message, callbackContext);
Intent i = new Intent();
return true;
}
return false;
}
private void echo(String message, CallbackContext callbackContext) {
if (message != null && message.length() > 0) {
callbackContext.success(message);
} else {
callbackContext.error("Expected one non-empty string argument.");
}
}
}
我想从这个班开始一个新的活动。
如何访问基于phonegap的类的原始上下文?尝试:
Context context=this.cordova.getActivity().getApplicationContext();
//or Context context=cordova.getActivity().getApplicationContext();
Intent intent=new Intent(context,Next_Activity.class);
context.startActivity(intent);
//or cordova.getActivity().startActivity(intent);
并确保您已在AndroidManifest.xml
Context context = cordova.getActivity().getApplicationContext();
Intent intent = new Intent(context,Next_Activity.class);
cordova.startActivityForResult(this, intent,0);
if (action.equals("myaction")) {
cordova.getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
Context context = cordova.getActivity()
.getApplicationContext();
Intent intent = new Intent(context, MyNewActivityGap.class);
cordova.getActivity().startActivity(intent);
}
});
return true;
}
我使用了隐式意图来实现这个功能
Intent i = new Intent("ACTION_PLAY_VIDEO");
this.cordova.startActivityForResult((CordovaPlugin) this,i, 0);
不要忘记在清单文件中的目标活动中放置意图过滤器
<activity android:name="VideoPlayerActivity" >
<intent-filter>
<action android:name="ACTION_PLAY_VIDEO" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
参见本例
首先,您需要在config.xml中声明您的自定义插件。您可以在res>xml文件夹中找到此文件
<feature name="CustomPlugin">
<param name="android-package" value="com.Phonegap.CustomPlugin" />
</feature>
最后,我们从javascript调用一个插件
function initial(){
var name = $("#NameInput").val();
cordova.exec(sayHelloSuccess, sayHelloFailure, "CustomPlugin", "sayHello", [name]);
}
function sayHelloSuccess(data){
alert("OK: " + data);
}
function sayHelloFailure(data){
alert("FAIL: " + data);
}
2017年发布的now,因为它是谷歌搜索“cordova插件活动”的排名第一的搜索结果和投票结果第一的答案,以及cordova插件指南都缺少以下关键信息,我花了很多时间才弄清楚。。。配置文件的父属性和特定代码: 添加到plugin.xml,可根据需要定制:
<!-- separate config-file here targeting AndroidManifest with parent NOT equal to /* -->
<config-file target="AndroidManifest.xml"
parent="/manifest/application">
<activity
android:name=com.custompackage.MyCustomActivity">
</activity>
</config-file>
你在哪个类中创建活动或任何其他的ShowMap类对象?ShowMap是一个活动派生类。或者你也可以看到这篇文章,以防有人犯了与我相同的错误-我的CallbackContext参数也被称为context,我花了一段时间才发现插件的问题!我怎样才能从那个activity类调用回调呢?这并没有回答这个问题,而且无论何时都不再相关,因为我看不到在标记中向AndroidManifest添加活动的方法。说“确保你已经在AndroidManifest.xml中注册了下一个活动”是为了满足一个巨大的未记录的需求。这个问答是谷歌搜索“cordova插件活动”的最佳结果。我已经阅读了Cordova插件指南,重点关注android。这些文档将添加一个自定义的
活动
并接收结果,特别是如果底层的Cordova活动被破坏。总而言之,仍然缺少一个关键步骤!他们的文档和答案都缺失了。标签中有,它们没有清楚地描述plugin.xml的注入代码……这篇文章没有解决最初的问题:“[如何]从cordova插件打开活动?”相反,它只是告诉你如何编写cordova插件。你能解释如何正确地将其添加到AndroidManifest.xml吗?
<!-- separate config-file here targeting AndroidManifest with parent NOT equal to /* -->
<config-file target="AndroidManifest.xml"
parent="/manifest/application">
<activity
android:name=com.custompackage.MyCustomActivity">
</activity>
</config-file>
Context context=this.cordova.getActivity().getApplicationContext();
//or Context context=cordova.getActivity().getApplicationContext();
Intent intent=new Intent(context, com.custompackage.MyCustomActivity.class);
context.startActivity(intent);
//or cordova.getActivity().startActivity(intent);