`
Mr.Joe
  • 浏览: 136830 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

在sencha touch(worklight)中调用Android代码

阅读更多
worklight项目调原生方法
在sencha touch开发中有些功能实现比较困难,或是某些功能必须使用Android原生代码。这时就需要用sencha touch代码调用Android代码了,可以通过phonegap实现。举例如下(微信分享功能):

首先在Android项目src下添加包com.share,包中新建文件ShareWeiXin.java

文件代码如下

package com.share;

//import org.apache.cordova.CallbackContext;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.net.URL;


import org.apache.cordova.CordovaArgs;
import org.apache.cordova.api.CallbackContext;
import org.apache.cordova.api.CordovaPlugin;
//import org.apache.cordova.CordovaPlugin;
import org.json.JSONException;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;
import android.widget.Toast;

import com.tencent.mm.sdk.openapi.IWXAPI;
import com.tencent.mm.sdk.openapi.SendMessageToWX;
import com.tencent.mm.sdk.openapi.WXAPIFactory;
import com.tencent.mm.sdk.openapi.WXImageObject;
import com.tencent.mm.sdk.openapi.WXMediaMessage;
import com.tencent.mm.sdk.openapi.WXTextObject;
import com.tencent.mm.sdk.openapi.WXWebpageObject;

public class ShareWeiXin extends CordovaPlugin {

	private IWXAPI api;
	private static String APP_ID = "wx6cc5eb610de5f0b4";

	private static final int THUMBWIDTH_SIZE = 100;
	private static final int THUMBHEIGHT_SIZE = 150;

	private static final String SDCARD_ROOT = Environment
			.getExternalStorageDirectory().getAbsolutePath();

	@Override
	public boolean execute(String action, CordovaArgs args,
			CallbackContext callbackContext) throws JSONException {
		// TODO Auto-generated method stub
		if (action.equals("init")) {
			init();
			return true;
		} else if (action.equals("openWX")) {
			openWX();
			return true;
		}else if (action.equals("share")) {
			String message = args.getString(0);
			String description = args.getString(1);
			String url = args.getString(2);
			share(message, description, url);
			return true;
		}
		return false;
	}

	private void init() {
		System.out.println("微信初始化");
		api = WXAPIFactory.createWXAPI(this.cordova.getActivity(), APP_ID,
				false);
		api.registerApp(APP_ID);
	}
	
	private void openWX() {
		api.openWXApp();
	}

	private void share(String text, String description, String url) {
		System.out.println("微信分享...");
		System.out.println("微信分享..." + url);
//		String url = "http://images.liqucn.com/h004/h01/img201108170900460.jpg";
		try {
			WXImageObject imgObj = new WXImageObject();
			imgObj.setImagePath(url);
			
			WXMediaMessage msg = new WXMediaMessage();
			msg.mediaObject = imgObj;
			
			Bitmap bmp = BitmapFactory.decodeFile(url);
			bmp = compressImage(bmp);
			Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, THUMBWIDTH_SIZE, THUMBHEIGHT_SIZE, true);
			bmp.recycle();
			msg.thumbData = Util.bmpToByteArray(thumbBmp, true);
			
			SendMessageToWX.Req req = new SendMessageToWX.Req();
			req.transaction = buildTransaction("img");
			req.message = msg;
			req.scene = SendMessageToWX.Req.WXSceneSession;
			api.sendReq(req);
			

		} catch (Exception e) {
			System.out.println(e);
		}

	}


	private String buildTransaction(final String type) {
		return (type == null) ? String.valueOf(System.currentTimeMillis())
				: type + System.currentTimeMillis();
	}
	
	//图片大小压缩
	public static Bitmap compressImage(Bitmap image) {

		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
		int options = 100;
		while ( baos.toByteArray().length / 1024>100) {	//循环判断如果压缩后图片是否大于100kb,大于继续压缩		
			baos.reset();//重置baos即清空baos
			image.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中
			options -= 10;//每次都减少10
		}
		ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中
		Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream数据生成图片
		return bitmap;
	}

}


在res-xml下的config.xml中添加:
<plugin name="share" value="com.share.ShareWeiXin" />


然后在sencha 代码中调用,这里只例句下调用微信初始化方法:
//微信初始化
		cordova.exec(function(){
			//调用微信分享
			console.log("初始化微信成功...");
		}, function(error){
			console.log("初始化微信失败...");
		}, 'share', 'init', []);


worklight项目调原生页面
http://geoffrey-qiao.iteye.com/blog/2059500
分享到:
评论

相关推荐

    《SenchaTouch权威指南》源代码-

    可拷贝到MyApp文件夹下直接运行(使用服务器端PHP脚本文件的代码示例在运行时需要为MyApp文件夹建立网站服务器、或者将MyApp文件夹下的所有子文件夹及其中文件拷贝至某个网站服务器中),MyApp文件夹下包括了所有...

    touch-docs-2.2.1.zip(senchaTouch 离线API参考文档)

    2. **示例代码**:包含许多实际应用的例子,展示了如何在项目中使用Sencha Touch的各种功能。 3. **快速入门指南**:针对初学者的教程,引导他们快速上手Sencha Touch的开发环境和基本操作。 4. **用户手册**:...

    sencha-touch + cordova(PhoneGap)使用adt-eclipse打包实例

    这些插件的JavaScript接口可以在你的Sencha Touch应用中调用。 8. **打包发布**:完成开发和测试后,可以使用Eclipse的Export功能生成APK文件,进行签名和优化。然后,你可以将APK上传到Google Play Store或其他...

    一个完整的sencha touch 应用案例

    5. **config.xml**:在Sencha Touch中,这个文件可能用于配置应用程序的元数据,比如应用的名称、版本、图标、启动画面等,通常是针对PhoneGap或Cordova这样的混合应用开发环境。 6. **resource**:这个文件夹可能...

    PhoneGap+Sencha-touch2.0实现的android程序

    PhoneGap和Sencha Touch是两种在移动应用开发中广泛使用的框架,它们的结合可以让你创建跨平台的原生感观的Android应用程序。本教程将深入探讨如何利用PhoneGap和Sencha Touch 2.0来构建Android应用。 PhoneGap,现...

    sencha touch中文翻译文档

    1. **安装与设置**:如何下载Sencha Touch库,如何在项目中引入,以及配置开发环境,包括HTML、CSS和JavaScript的基础知识。 2. **架构与模型**:解释Sencha Touch的基本架构,如MVC模式,以及如何定义和使用数据...

    Sencha 和 Sencha Touch 简介

    本文通过对 Sencha Touch 框架的介绍,使读者对该框架有一定的了解,并通过一些代码示例给用户更详细直观的对 Sencha Touch 框架功能的了解。 ExtJS ExtJS 是为 web 开发人员提供的基于 JavaScript 和 web 标准快速...

    sencha touch在VScode上的插件

    标题中的"Sencha Touch在VScode上的插件"指的是为VSCode开发的扩展,目的是为了在VSCode环境中更好地支持Sencha Touch的开发工作。这样的插件通常会提供代码提示、自动完成、错误检查、格式化等特性,提升开发效率。...

    SenchaTouch权威指南示例代码

    SenchaTouch权威指南的代码示例,在本机亲自测试通过,是学习的好材料

    Sencha Touch开发的项目《般若人生》源码

    在深入探讨《般若人生》项目的源码之前,我们先来了解一下Sencha Touch的核心特性: 1. **跨平台兼容性**:Sencha Touch支持iOS、Android、BlackBerry等主流移动操作系统,通过HTML5、CSS3和JavaScript实现原生般的...

    Sencha Touch in Action

    5. 触摸事件处理:讲解在Sencha Touch中如何响应用户的触摸操作。 6. 数据管理:介绍如何使用数据包(Data Package)来管理应用中的数据。 7. 动画与过渡效果:展示如何使用Sencha Touch提供的动画效果来增强用户...

    sencha touch 登陆界面

    在登录场景中,控制器会监听登录按钮的点击事件,获取输入框的值,然后调用模型的同步方法,将数据发送到服务器进行验证。如果验证成功,可以跳转到下一个页面;如果失败,可以显示错误提示。 实现Sencha Touch登录...

    sencha touch list demo

    在“sencha touch list demo”中,我们主要关注的是Sencha Touch中的列表(List)组件,这是一个核心且常用的组件,用于展示数据集合。 1. **Sencha Touch 框架概述** Sencha Touch 是一个基于JavaScript的框架,...

    SenchaTouch权威指南》代码清单

    SenchaTouch权威指南》代码清单

    senchaTouch和fusioncharts结合的实例

    4. **初始化图表**:在Sencha Touch 的控制器(Controller)中,当数据加载完成后,利用FusionCharts的API创建图表实例。你需要指定图表类型、宽度、高度、数据源以及容器ID。 ```javascript var chart = new ...

    Sencha Touch 2入门教程之MVC例子程序源代码

    Sencha Touch 2是一款专为移动设备设计的前端框架,它允许开发者构建功能丰富的、响应式的Web应用程序,可运行在iOS、Android等多平台。在本教程中,我们将深入探讨Sencha Touch 2中的MVC(Model-View-Controller)...

    sencha touch 2.4.0最新版

    在Sencha Touch 2.4.0版本中,有几个关键的知识点值得关注: 1. **性能优化**:2.4.0版本针对移动设备的性能进行了优化,减少了内存占用和渲染时间,提高了应用的启动速度和整体用户体验。 2. **新UI组件**:此...

    sencha touch项目源码

    8. **模板与渲染**:Sencha Touch支持使用模板(Template)来动态生成HTML,这在创建复杂视图时非常有用,例如在列表中显示城市信息。 9. **路由与导航**:如果项目涉及多页面或组件间的导航,那么可能使用到了路由...

Global site tag (gtag.js) - Google Analytics