Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从CordovaPlugin打开活动_Android_Cordova_Phonegap Plugins - Fatal编程技术网

Android 从CordovaPlugin打开活动

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) {

我已经编写了一个CordavaPlugin派生类

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);
  • 在AndroidManifest文件中注册您的活动
  • 在你的插件中,你应该有这样的代码,注意没有调用“callback.success()”
  • 在ui线程而不是后台线程中运行操作
  • 享受

    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);