open an activity from a CordovaPlugin

前端 未结 6 1898
深忆病人
深忆病人 2020-12-13 06:27

I have written a CordavaPlugin derived class.

public class ShowMap extends CordovaPlugin {

@Override
public boolean execute(String action, JSONArray args,
          


        
相关标签:
6条回答
  • 2020-12-13 07:02

    try as:

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

    and make sure you have registered Next Activity in AndroidManifest.xml

    0 讨论(0)
  • 2020-12-13 07:09
    Context context =  cordova.getActivity().getApplicationContext();
    Intent intent = new Intent(context,Next_Activity.class);
    
    cordova.startActivityForResult(this, intent,0);
    
    0 讨论(0)
  • 2020-12-13 07:13

    See this example.

    Firstly you need to declare your custom plugin in config.xml. You can found this file in res > xml folder.

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

    Then you need to implement plugin by using Java- code

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

    Finally we calling a plugin from 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);
    }
    
    0 讨论(0)
  • 2020-12-13 07:19
    1. Register your activity in the AndroidManifest file
    2. In your plugin you should have the code like this, notice no "callback.success()" is called
    3. Run the action in ui thread and not background thread.
    4. enjoy

      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;
      }
      
    0 讨论(0)
  • 2020-12-13 07:19

    I used implicit intent go get this functionality working

      Intent i = new Intent("ACTION_PLAY_VIDEO");
     this.cordova.startActivityForResult((CordovaPlugin) this,i, 0);
    

    don't forget to put intent filter in your target activity in manifest file

    <activity android:name="VideoPlayerActivity" >
           <intent-filter>
                <action android:name="ACTION_PLAY_VIDEO" />
    
    
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
    

    0 讨论(0)
  • 2020-12-13 07:20

    Post now in 2017, because it's the top-ranked google search result for "cordova plugin activity" and top-voted answer, along with Cordova plugin guide are both missing the following critical information, that took me many hours to figure out... the parent attrib of config-file and the specific code:

    Added to plugin.xml, customized according to your needs:

    <!-- 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>
    

    Updating launching code with above package & activity:

    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);
    
    0 讨论(0)
提交回复
热议问题