`
longgangbai
  • 浏览: 7325598 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Native+WebApp中Phonegap调用Android Activity

 
阅读更多

          在项目采用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();
	@Override
	public PluginResult execute(String action, JSONArray data, String callbackID) {
		// TODO Auto-generated method stub
		if(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;
			}
		};
	};
	
	@Override
	public void onActivityResult(int requestCode, int resultCode, Intent intent) {
		// TODO Auto-generated method stub	
		if(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>

 

分享到:
评论
11 楼 myruby520 2015-01-08  
myruby520 写道
AndroidActivityPlugin  中 64行:ctx.getBaseContext() 请问这个ctx哪来的???

刚才查了下,现在版本是这样获取的 cordova.getActivity()
10 楼 myruby520 2015-01-08  
AndroidActivityPlugin  中 64行:ctx.getBaseContext() 请问这个ctx哪来的???
9 楼 longgangbai 2013-06-18  
xie_en 写道
你的context用的太想当然了吧。

不明白,一个字汗, 
8 楼 xie_en 2013-06-18  
你的context用的太想当然了吧。
7 楼 longgangbai 2012-09-22  
小花_理想 写道
小花_理想 写道
楼主,导入之后显示版本问题。Unable to resolve target 'android-8'。改了project.properties中的版本还是不行。求指导

楼主,调试好了。但是感觉没有调用Activity。因为我在Activity打sysout与log.i都没有办法执行

你采用Debug模式启动,你就会发现,这是phonegap插件的原理,你调试应该就明白了
6 楼 小花_理想 2012-09-18  
小花_理想 写道
楼主,导入之后显示版本问题。Unable to resolve target 'android-8'。改了project.properties中的版本还是不行。求指导

楼主,调试好了。但是感觉没有调用Activity。因为我在Activity打sysout与log.i都没有办法执行
5 楼 小花_理想 2012-09-18  
楼主,导入之后显示版本问题。Unable to resolve target 'android-8'。改了project.properties中的版本还是不行。求指导
4 楼 zhiduo5 2012-08-24  
longgangbai 写道
zhiduo5 写道
简单点说就是让你你的程序能从ThirdAndroidActivity跳回PhonegapAndroidActivityActivity能跳回来吗,跳不回来我只能在插件里加载了!希望哥哥把你的程序改成能跳回来!

如果想从Activity中跳到js页面起始可以
1.采用插件方法。
插件调用js,js跳转到相关的页面
2.采用webview跳转到相关的页面。

不是很明白,把你的第一种方法,给个关键代码谢谢!
3 楼 longgangbai 2012-08-24  
zhiduo5 写道
简单点说就是让你你的程序能从ThirdAndroidActivity跳回PhonegapAndroidActivityActivity能跳回来吗,跳不回来我只能在插件里加载了!希望哥哥把你的程序改成能跳回来!

如果想从Activity中跳到js页面起始可以
1.采用插件方法。
插件调用js,js跳转到相关的页面
2.采用webview跳转到相关的页面。
2 楼 zhiduo5 2012-08-23  
简单点说就是让你你的程序能从ThirdAndroidActivity跳回PhonegapAndroidActivityActivity能跳回来吗,跳不回来我只能在插件里加载了!希望哥哥把你的程序改成能跳回来!
1 楼 zhiduo5 2012-08-23  
我想要从目标Activity跳回来,就是super.loadUrl("file:///android_asset/wwwindex.html");
咋跳啊,求代码!

相关推荐

    ionic+phonegap 案例源码

    3. **cordova_plugins.js** - 该文件记录了已安装的Cordova插件,每个插件都提供了特定的设备功能接口,开发者可以通过这些接口在Web应用中调用设备功能。 4. **img** - 图像资源文件夹,包含应用所需的图片资源。 ...

    webapp,Html调用android后台百度地图定位,获取手机imei

    综上所述,实现Webapp调用Android后台的百度地图定位及获取IMEI功能,需要结合HTML、JavaScript和Android原生代码,通过WebView桥接它们之间的通信。在开发过程中,除了技术实现,还要注意用户隐私保护和安全性,...

    20190703 IN+ WebApp管理框架HTML版本

    2. 漂亮的界面:框架中的UI组件设计精致,配色协调,图标清晰,布局合理,为用户提供了优质的视觉体验。 3. 响应式布局:基于Bootstrap的响应式设计,IN+框架能够自适应不同尺寸的屏幕,无论是桌面、平板还是手机,...

    myeclilpse开发EJB+Webapp

    【标题】"myeclipse开发EJB+Webapp"涵盖了在Eclipse集成开发环境中创建和部署Enterprise JavaBeans(EJB)以及与Web应用程序交互的知识点。EJB是Java平台企业版(Java EE)的核心组件,主要用于构建可扩展、分布式、...

    基于dclound旗下html5+的webApp调用原生支付插件.zip

    MUI的支付模块通常会提供与原生支付接口的桥梁,使WebApp能调用手机支付功能,如微信支付、支付宝等,实现无缝的用户支付体验。 结合以上信息,我们可以详细阐述以下几个关键知识点: 1. **HTML5核心特性**:学习...

    Android 原生webApp的运行壳

    许多开源库和工具简化了创建原生WebApp的过程,如Cordova(Apache PhoneGap)、React Native、Ionic等。它们提供了更高级别的抽象,使得开发者可以更专注于WebApp的业务逻辑,而不是底层的原生实现。 五、实际应用 ...

    PhoneGap Webapp程序

    通过PhoneGap,开发者可以利用自己熟悉的Web技术快速构建应用,同时享受移动设备的硬件特性,而无需深入学习各种操作系统(如iOS、Android或Windows Phone)的底层细节。 1. **PhoneGap核心概念**:PhoneGap的核心...

    html5封装webapp调用手机蓝牙连接蓝牙设备并实现收发数据

    从晚上下载的例子,发现不能自动获取设备、服务和特征值,这就导致了程序通用性大大降低,在通过自己的摸索后,将这部分功能调试通过,现在已经是一个通用的webapp调用ble的程序了,功能包括搜索、连接蓝牙,选取...

    Python-WebADB一个简单的webapp和API用于通过ABD管理和操作连接的Android设备

    这个项目的目标是简化对多台Android设备进行自动化测试、调试或者管理的过程,无需频繁地在命令行界面中输入ADB命令。 **ADB(Android Debug Bridge)** 是Android SDK中的一个强大工具,允许开发者通过USB或无线...

    Android通过webview控件实现webapp的demo androidstudio

    对于JavaScript与Java之间的交互,可以使用`addJavascriptInterface`方法在Java代码中暴露出接口,然后在JavaScript中调用。例如,我们创建一个名为`AppBridge`的接口: ```java webView.addJavascriptInterface...

    网站转换APP源代码 WebAPP源代码 网站生成APP源代码 Flutter项目 带控制端-网盘链接提取码下载 .txt

    这是一款网站转换成APP的源代码,开发语言使用Flutter,开发工具使用的是AndroidStudio,你只需要在APP源代码里面填写你的域名,即可生成即可生成APP,包括安卓或者苹果 添加或者编辑底部菜单或者悬浮按钮等等,当用户...

    基于dclound旗下html5的webApp调用原生支付插件

    当用户在WebApp中触发支付操作时,JavaScript代码会调用支付插件,传递必要的参数(如订单信息),然后由插件处理这些请求,完成实际的支付流程。 2. **JavaScript开发支付流程**: - **初始化插件**:首先,...

    2018最新版 INSPINIA IN+ - WebApp Admin Theme v2.7.1

    INSPINIA IN+ 是一款2018年发布的最新版本的WebApp管理主题,版本号为2.7.1。这款主题专为构建高效、现代的后台管理系统而设计,尤其适合那些寻求ASP.NET MVC5技术栈解决方案的开发者。其核心特点在于提供了直观的...

    android,webapp

    4. **JavaScript与Java交互**:通过WebView提供的JavaScriptInterface,开发者可以在JavaScript代码中调用Android的Java方法,实现两者之间的通信。反之,Java也可以通过WebView的loadUrl方法注入JavaScript代码,...

    phonegap webapp环境配置

    - "location of the android sdk has not been setup in the preferences":检查 Eclipse 中的 Android SDK 设置是否正确。 - "workspace Unavailable":可能是删除项目但未删除项目目录,移除残留的目录或重新指定...

    Phonegap二维码扫描

    "barcode"可能指的是一个具体的示例项目,展示如何在PhoneGap应用中调用二维码扫描功能。开发者需要在项目中引入相关库,配置PhoneGap插件,并编写JavaScript代码来触发扫描并处理扫描结果。 4. **Android环境设置...

    Android应用程序之WebApp开发实战

    在Android平台上,WebApp开发是一项重要的技能,它允许开发者利用Web技术来构建应用程序,从而减少了对原生开发的依赖。本篇文章将深入探讨Android WebApp开发的各个方面,旨在为开发者提供一个全面的理解和实践指导...

    PhoneGap做的手机WebAPP安装程序

    PhoneGap做的手机WebAPP安装程序

Global site tag (gtag.js) - Google Analytics