Cordova调用Activity

时间:2022-12-27 09:39:53

首先需要编写一个CallActivityPlugin插件,专门调用Activity

  1. package com.example.plugin;
  2. import org.apache.cordova.api.CallbackContext;
  3. import org.apache.cordova.api.CordovaPlugin;
  4. import org.apache.cordova.api.PluginResult;
  5. import org.json.JSONArray;
  6. import org.json.JSONException;
  7. import android.app.Activity;
  8. import android.content.Intent;
  9. import android.os.Bundle;
  10. import android.util.Log;
  11. public class CallActivityPlugin extends CordovaPlugin {
  12. public static final String ACTION = "call";
  13. @Override
  14. public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
  15. if (action.equals(ACTION)) {
  16. try {
  17. //下面两句最关键,利用intent启动新的Activity
  18. Intent intent = new Intent().setClass(cordova.getActivity(), Class.forName(args.getString(0)));
  19. this.cordova.startActivityForResult(this, intent, 1);
  20. //下面三句为cordova插件回调页面的逻辑代码
  21. PluginResult mPlugin = new PluginResult(PluginResult.Status.NO_RESULT);
  22. mPlugin.setKeepCallback(true);
  23. callbackContext.sendPluginResult(mPlugin);
  24. callbackContext.success("success");
  25. } catch (Exception e) {
  26. e.printStackTrace();
  27. return false;
  28. }
  29. }
  30. return true;
  31. }
  32. //onActivityResult为第二个Activity执行完后的回调接收方法
  33. @Override
  34. public void onActivityResult(int requestCode, int resultCode, Intent intent){
  35. switch (resultCode) { //resultCode为回传的标记,我在第二个Activity中回传的是RESULT_OK
  36. case Activity.RESULT_OK:
  37. Bundle b=intent.getExtras();  //data为第二个Activity中回传的Intent
  38. String str=b.getString("change01");//str即为回传的值
  39. break;
  40. default:
  41. break;
  42. }
  43. }
  44. }

然后配置CallActivityPlugin插件res/xml/config.xml

  1. <plugin name="CallActivityPlugin" value="com.example.plugin.CallActivityPlugin"/>

接着利用js调用插件(callActivity.js)

  1. window.callActivityPlugin = function(str,callback) {
  2. cordova.exec(callback, pluginFailed, "CallActivityPlugin", "call", [ str ]);
  3. };
  4. var pluginFailed = function(message) {
  5. alert("failed>>" + message);
  6. }
  7. $(function() {
  8. init();
  9. });
  10. var init = function() {
  11. console.log("phonegap init!!");
  12. document.addEventListener("deviceready", onDeviceReady, true);
  13. }
  14. var onDeviceReady = function() {
  15. console.log("deviceready event fired");
  16. window.callActivityPlugin("com.example.activity.MyActivity" , function(echoValue) {
  17. console.log("callActivityPlugin echo>>");
  18. });
  19. };

最后html页面加载(相对简单)

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Device Properties Example</title>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  6. <script type="text/javascript" charset="utf-8" src="../js/jquery-1.8.3.js"></script>
  7. <script type="text/javascript" charset="utf-8" src="../js/cordova-2.3.0.js"></script>
  8. <script type="text/javascript" charset="UTF-8" src="../js/callActivity.js"></script>
  9. </head>
  10. <body>
  11. <p id="callActivityPlugin">callActivityPlugin</p>
  12. <a href="../index.html">返回</a>
  13. </body>
  14. </html>

新的Activity代码(相对简单)

  1. package com.example.activity;
  2. import android.app.Activity;
  3. import android.content.Context;
  4. import android.content.Intent;
  5. import android.net.Uri;
  6. import android.os.Bundle;
  7. import android.util.Log;
  8. import android.view.View;
  9. import android.view.View.OnClickListener;
  10. import android.widget.Button;
  11. import com.example.ask.R;
  12. public class MyActivity extends Activity {
  13. private Button btn;
  14. private int flag = 0;
  15. private Intent intentNew = null;
  16. private Context context = this;
  17. @Override
  18. public void onCreate(Bundle savedInstanceState) {
  19. super.onCreate(savedInstanceState);
  20. setContentView(R.layout.my_activity_main);
  21. intentNew = this.getIntent();
  22. btn = (Button) findViewById(R.id.button1);
  23. btn.setOnClickListener(new OnClickListener() {
  24. public void onClick(View v) {
  25. Intent mIntent = new Intent();
  26. mIntent.putExtra("change01", "1000");
  27. mIntent.putExtra("change02", "2000");
  28. // 设置结果,并进行传送
  29. setResult(RESULT_OK, mIntent);
  30. finish();
  31. }
  32. });
  33. }
  34. }