Native+WebApp中Phonegap调用Android(安卓)Activity
16lz
2021-12-04
在项目采用Native+Web方式开发,Android团队开发一个模块的代码,WebApp phonegap开发几个模块,需要将Android中的模块潜入到Phonegap开发的几个模块中。需要通过Phonegap调用Android 的Activity。
demo如下:
Phonegap插件类:
package com.easyway.etrip.plugins;import org.json.JSONArray;import android.app.Activity;import android.content.Intent;import android.os.Handler;import android.os.Message;import android.util.Log;import com.phonegap.api.Plugin;import com.phonegap.api.PluginResult;/** * Phonegap 调用Android Activity的插件 * * @Title: * @Description: 实现TODO * @Copyright:Copyright (c) 2011 * @Company:易程科技股份有限公司 * @Date:2012-7-5 * @author longgangbai * @version 1.0 */public class AndroidActivityPlugin extends Plugin{ private Object synObj = new Object();@Overridepublic PluginResult execute(String action, JSONArray data, String callbackID) {// TODO Auto-generated method stubif(action.equals("startActivity")){PluginResult result = null;try {PluginResult.Status status = PluginResult.Status.OK;if(action.equals("startActivity")){ Log.e("test", "test plugin js -> java~~~~"+data.getString(0)); Log.e("test", "test plugin js -> java~~~~"); result = new PluginResult(status, data.getString(0));Message msg=new Message();msg.what=1;Log.e("参数信息:", data.toString());msg.obj=data.getString(0);handler.sendMessage(msg);sleep();}} catch (Exception e) {}return result;}else { return new PluginResult(PluginResult.Status.INVALID_ACTION);}}private Handler handler = new Handler() {public void handleMessage(Message msg) {if (msg == null) {return;}switch (msg.what) {case 1:String className=msg.obj.toString();try {Class activityClass = Class.forName(className);Intent intent = new Intent(ctx.getBaseContext(), activityClass);//你想去的activity(exp:Temp)ctx.startActivityForResult(AndroidActivityPlugin.this, intent, 1);} catch (ClassNotFoundException e) {Log.e("Why", "错误原因:"+className);e.printStackTrace();}break;}};};@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent intent) {// TODO Auto-generated method stubif(requestCode==1){if(resultCode == Activity.RESULT_CANCELED){//返回时调用Log.e("test", "result plugin -> java~~~~"); Log.e("test", "result plugin -> java~~~~"); weakup();}}else{super.onActivityResult(requestCode, resultCode, intent);}}private void sleep() { try { synchronized(synObj) { synObj.wait(); } } catch (InterruptedException e) { e.printStackTrace(); } }private void weakup() { synchronized(synObj) { synObj.notify(); } }}
phonegap启动类:
package com.easyway.etrip;import android.os.Bundle;import com.phonegap.DroidGap;/** * phonegap启动类 * * @Title: * @Description: 实现TODO * @Copyright:Copyright (c) 2011 * @Company:易程科技股份有限公司 * @Date:2012-7-5 * @author longgangbai * @version 1.0 */public class PhonegapAndroidActivityActivity extends DroidGap { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.loadUrl("file:///android_asset/www/index.html"); }}
Android的Activity类:
package com.easyway.etrip;import android.app.Activity;import android.os.Bundle;/** * * * @Title: * @Description: 实现TODO * @Copyright:Copyright (c) 2011 * @Company:易程科技股份有限公司 * @Date:2012-7-5 * @author longgangbai * @version 1.0 */public class ThirdAndroidActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.main); }}
phonegap的插件配置类phonegap.xml:
<plugin name="AndroidActivity" value="com.easyway.etrip.plugins.AndroidActivityPlugin"/>
androidActivity.js
var AndroidActivity=function(){}; AndroidActivity.prototype.startActivity = function(success, fail,parmas){ return PhoneGap.exec( function(args){ success(args); }, function(args){ fail(args); }, 'AndroidActivity', //java类 'startActivity', //action [parmas] //params ); };PhoneGap.addConstructor(function() { PhoneGap.addPlugin('androidActivity', new AndroidActivity());});
调用的测试类:
<!DOCTYPE HTML><html> <head> <meta name="viewport" content="width=320; user-scalable=no" /> <meta http-equiv="Content-type" content="text/html; charset=utf-8"> <title>Minimal AppLaud App</title> <script type="text/javascript" charset="utf-8" src="phonegap-1.4.1.js"></script> <script type="text/javascript" charset="utf-8" src="androidActivity.js"></script> <script type="text/javascript" charset="utf-8">function openAndroidActivity(){ window.plugins.androidActivity.startActivity(function(r){//alert(r);},function(e){//alert(e);},"com.easyway.etrip.ThirdAndroidActivity");}</script></head><body><h1>Hello World</h1> <input type="button" value="打开Android Activity" onclick="javascript:openAndroidActivity();"></body></html>
更多相关文章
- Android开发从入门到精通
- Android开发环境搭建天下第一例
- Android(安卓)Studio Kotlin开发之ListView
- Android图形报表之AchartEngine(附开发包+API文档)
- android基础(开发环境搭建)
- 几个android实用网站
- android开发 常用技巧
- Android(安卓)AIDL 理解及开发要点
- 【Android基础】Android开发学习笔记