从CordovaPlugin打开一个活动

时间:2013-01-14 15:27:20

标签: 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)
    {
        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的课程的原始上下文?

6 个答案:

答案 0 :(得分:41)

尝试:

    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

中注册了下一个活动

答案 1 :(得分:16)

  1. 在AndroidManifest文件中注册您的活动
  2. 在你的插件中你应该有这样的代码,注意没有调用“callback.success()”
  3. 在ui线程中运行操作,而不是后台线程。
  4. 享受

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

答案 2 :(得分:5)

Context context =  cordova.getActivity().getApplicationContext();
Intent intent = new Intent(context,Next_Activity.class);

cordova.startActivityForResult(this, intent,0);

答案 3 :(得分:1)

我使用隐式意图去使这个功能正常工作

  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>

答案 4 :(得分:1)

现在发布于2017年,因为它是“cordova插件活动”排名靠前的谷歌搜索结果和最高投票的答案,以及Cordova插件指南都缺少以下重要信息,这花了我很多时间来弄清楚... config-file的父属性和特定代码:

已添加到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>

使用上述软件包更新启动代码&amp;活性:

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

答案 5 :(得分:-1)

见这个例子。

首先,您需要在config.xml中声明自定义插件。你可以在res&gt;中找到这个文件。 xml文件夹。

<feature name="CustomPlugin">
      <param name="android-package" value="com.Phonegap.CustomPlugin" />
</feature>

然后你需要使用Java代码

来实现插件
public class CustomPlugin extends CordovaPlugin {

    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext)
            throws JSONException {

        if (action.equals("sayHello")){
            try {
                String responseText = "Hello world, " + args.getString(0);
                callbackContext.success(responseText);
            } catch (JSONException e){
                callbackContext.error("Failed to parse parameters");
            }
            return true;
        }

        return false;
    }
}

最后我们从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);
}