实例介绍
【实例简介】调用phoneGap实现分享图片文字和视频等功能
【实例截图】暂无
【实例截图】暂无
【核心代码】
package com.phonegap.plugins.weixin;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.net.URL;
import com.tencent.mm.sdk.openapi.BaseReq;
import com.tencent.mm.sdk.openapi.BaseResp;
import com.tencent.mm.sdk.openapi.ConstantsAPI;
import com.tencent.mm.sdk.openapi.ShowMessageFromWX;
import com.tencent.mm.sdk.openapi.IWXAPI;
import com.tencent.mm.sdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.sdk.openapi.WXAPIFactory;
import com.tencent.mm.sdk.openapi.WXAppExtendObject;
import com.tencent.mm.sdk.openapi.SendMessageToWX;
import com.tencent.mm.sdk.openapi.WXEmojiObject;
import com.tencent.mm.sdk.openapi.WXImageObject;
import com.tencent.mm.sdk.openapi.WXMediaMessage;
import com.tencent.mm.sdk.openapi.WXMusicObject;
import com.tencent.mm.sdk.openapi.WXTextObject;
import com.tencent.mm.sdk.openapi.WXVideoObject;
import com.tencent.mm.sdk.openapi.WXWebpageObject;
import com.tencent.mm.sdk.openapi.SendAuth;
import com.tencent.mm.sdk.openapi.WXFileObject;
import com.phonegap.plugins.weixin.Util;
import com.example.weixin.R;
//import com.example.weixin.WeiXinMain;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaInterface;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CordovaWebView;
import org.apache.cordova.LOG;
import org.apache.cordova.PluginResult;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.content.DialogInterface;
import android.content.ContextWrapper;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Toast;
public class WeiXin extends CordovaPlugin /*implements IWXAPIEventHandler*/ {
private static final String SDCARD_ROOT = Environment.getExternalStorageDirectory().getAbsolutePath();
private static WeiXin instance;
public WeiXin(){
instance = this;
}
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) {
boolean result = false;
try {
if (action.equals("register")) {
String appId = args.getString(0);
this.register(appId);
callbackContext.success();
result = true;
} else if (action.equals("unregister")) {
this.unregister();
callbackContext.success();
result = true;
}
else if (action.equals("openWeixin")) {
this.open();
callbackContext.success();
result = true;
}else if(action.equals("showToast")){
String txt = args.getString(0);
this.showToast(txt);
}
else if (action.equals("send")) {
JSONObject cfg = args.getJSONObject(0);
if (cfg.getString("type").equals("text")) {
this.sendText(cfg.getString("text"), cfg.getBoolean("isSendToTimeline"));
} else if (cfg.getString("type").equals("image")) {
this.sendImage(cfg.getString("data"), cfg.getString("imageType"), cfg.getBoolean("isSendToTimeline"));
} else if (cfg.getString("type").equals("music")) {
this.sendMusic(cfg.getString("url"), cfg.getBoolean("isLowBand"), cfg.getString("title"), cfg.getString("desc"), cfg.getString("imgUrl"), cfg.getBoolean("isSendToTimeline"));
} else if (cfg.getString("type").equals("video")) {
this.sendVideo(cfg.getString("url"), cfg.getBoolean("isLowBand"), cfg.getString("title"), cfg.getString("desc"), cfg.getString("imgUrl"), cfg.getBoolean("isSendToTimeline"));
} else if (cfg.getString("type").equals("webpage")) {
this.sendWebPage(cfg.getString("url"), cfg.getString("title"), cfg.getString("desc"), cfg.getString("imgUrl"), cfg.getBoolean("isSendToTimeline"));
} else if (cfg.getString("type").equals("file")) {
this.sendFile(cfg.getString("path"), cfg.getString("title"), cfg.getString("desc"), cfg.getString("imgUrl"), cfg.getBoolean("isSendToTimeline"));
}
callbackContext.success();
result = true;
}
else {
result = false;
}
} catch (JSONException e) {
callbackContext.error("JSON Exception");
result = false;
}
return result;
}
public void showToast(String txt){
Context Activity = this.cordova.getActivity().getApplicationContext();
Toast.makeText(Activity, txt, Toast.LENGTH_LONG).show();
}
//回调
public static void sendCallBack(int result){
if (instance == null) {
return;
}
instance.webView.sendJavascript("navigator.weixin.sendCallBack(" String.valueOf(result) ")");
}
private IWXAPI api;
public void register(String appId) {
Context Activity = this.cordova.getActivity().getApplicationContext();
api = WXAPIFactory.createWXAPI(Activity, appId, false);
api.registerApp(appId);
}
public void open() {
api.openWXApp();
}
//send text
public void sendText(String text, boolean isSendToTimeline) {
try{
WXTextObject textObj = new WXTextObject();
textObj.text = text;
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = textObj;
msg.description = text;
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = String.valueOf(System.currentTimeMillis());//buildTransaction("text");
req.message = msg;
int wxSdkVersion = api.getWXAppSupportAPI();
if (wxSdkVersion >= 0x21020001) {
req.scene = isSendToTimeline ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;
} else {
req.scene = SendMessageToWX.Req.WXSceneSession;
}
api.sendReq(req);
//this.webView.sendJavascript("navigator.weixin.callback()");
} catch(Exception e) {
e.printStackTrace();
}
}
//send image
public void sendImage(String data, String imageType, boolean isSendToTimeline) {
File file = null;
String path = "";
Bitmap bmp = null;
try{
WXImageObject imgObj = new WXImageObject();
if (imageType.equals("url")) {
imgObj.imageUrl = data;
bmp = BitmapFactory.decodeStream(new URL(data).openStream());
} else if (imageType.equals("path")) {
LOG.d("WeChat Plugin", "file path: " SDCARD_ROOT data);
if(data.startsWith(SDCARD_ROOT)){
path = data;
}else{
path = (SDCARD_ROOT data).replaceAll(" ", "%20");
}
file = new File(path);
if (!file.exists()) {
LOG.d("WeChat Plugin", "file not exists");
return;
} else {
LOG.d("WeChat Plugin", "get file @" path);
}
imgObj.setImagePath(path);
FileInputStream fis = new FileInputStream(path);
bmp = BitmapFactory.decodeStream(fis);
//bmp = BitmapFactory.decodeFile(path);
}
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = imgObj;
Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, 150, 150, true);
bmp.recycle();
msg.thumbData = Util.bmpToByteArray(thumbBmp, true);
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = String.valueOf(System.currentTimeMillis());
req.message = msg;
int wxSdkVersion = api.getWXAppSupportAPI();
if (wxSdkVersion >= 0x21020001) {
req.scene = isSendToTimeline ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;
} else {
req.scene = SendMessageToWX.Req.WXSceneSession;
}
api.sendReq(req);
} catch(Exception e) {
e.printStackTrace();
}
}
//send music
public void sendMusic(String url, boolean isLowBand, String title, String desc, String imgUrl, boolean isSendToTimeline) {
WXMusicObject music = new WXMusicObject();
if (isLowBand == false) {
music.musicUrl = url;
} else {
music.musicLowBandUrl = url;
}
//"http://staff2.ustc.edu.cn/~wdw/softdown/index.asp/0042515_05.ANDY.mp3";
//music.musicUrl="http://120.196.211.49/XlFNM14sois/AKVPrOJ9CBnIN556OrWEuGhZvlDF02p5zIXwrZqLUTti4o6MOJ4g7C6FPXmtlh6vPtgbKQ==/31353278.mp3";
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = music;
msg.title = title;
msg.description = desc;
Bitmap bmp = null;
try{
if (imgUrl.equals("")) {
Context Activity = this.cordova.getActivity().getApplicationContext();
Bitmap thumb = BitmapFactory.decodeResource(Activity.getResources(), R.drawable.music);
msg.thumbData = Util.bmpToByteArray(thumb, true);
} else {
bmp = BitmapFactory.decodeStream(new URL(imgUrl).openStream());
Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, 150, 150, true);
bmp.recycle();
msg.thumbData = Util.bmpToByteArray(thumbBmp, true);
}
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("music");
req.message = msg;
int wxSdkVersion = api.getWXAppSupportAPI();
if (wxSdkVersion >= 0x21020001) {
req.scene = isSendToTimeline ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;
} else {
req.scene = SendMessageToWX.Req.WXSceneSession;
}
api.sendReq(req);
} catch(Exception e) {
e.printStackTrace();
}
}
//send video
public void sendVideo(String url, boolean isLowBand, String title, String desc, String imgUrl, boolean isSendToTimeline) {
WXVideoObject video = new WXVideoObject();
if (isLowBand == false) {
video.videoUrl = url;
} else {
video.videoLowBandUrl = url;
}
WXMediaMessage msg = new WXMediaMessage(video);
msg.title = title;
msg.description = desc;
Bitmap bmp = null;
try{
if (imgUrl.equals("")) {
Context Activity = this.cordova.getActivity().getApplicationContext();
Bitmap thumb = BitmapFactory.decodeResource(Activity.getResources(), R.drawable.video);
msg.thumbData = Util.bmpToByteArray(thumb, true);
} else {
bmp = BitmapFactory.decodeStream(new URL(imgUrl).openStream());
Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, 150, 150, true);
bmp.recycle();
msg.thumbData = Util.bmpToByteArray(thumbBmp, true);
}
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("video");
req.message = msg;
int wxSdkVersion = api.getWXAppSupportAPI();
if (wxSdkVersion >= 0x21020001) {
req.scene = isSendToTimeline ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;
} else {
req.scene = SendMessageToWX.Req.WXSceneSession;
}
api.sendReq(req);
//LOG.d("!!!!!!!!!!!!!!!!!!!!", video.videoUrl);
} catch(Exception e) {
e.printStackTrace();
}
}
//send webpage
public void sendWebPage(String url, String title, String desc, String imgUrl, boolean isSendToTimeline) {
WXWebpageObject webpage = new WXWebpageObject();
webpage.webpageUrl = url;
WXMediaMessage msg = new WXMediaMessage(webpage);
msg.title = title;
msg.description = desc;
Bitmap bmp = null;
try{
if (imgUrl.equals("")) {
Context Activity = this.cordova.getActivity().getApplicationContext();
Bitmap thumb = BitmapFactory.decodeResource(Activity.getResources(), R.drawable.webpage);
msg.thumbData = Util.bmpToByteArray(thumb, true);
} else {
bmp = BitmapFactory.decodeStream(new URL(imgUrl).openStream());
Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, 150, 150, true);
bmp.recycle();
msg.thumbData = Util.bmpToByteArray(thumbBmp, true);
}
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("webpage");
req.message = msg;
int wxSdkVersion = api.getWXAppSupportAPI();
if (wxSdkVersion >= 0x21020001) {
req.scene = isSendToTimeline ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;
} else {
req.scene = SendMessageToWX.Req.WXSceneSession;
}
api.sendReq(req);
LOG.d("!!!!!!!!!!!!!!!!!!!!", webpage.webpageUrl);
} catch(Exception e) {
e.printStackTrace();
}
}
//send webpage
public void sendFile(String path, String title, String desc, String imgUrl, boolean isSendToTimeline) {
WXFileObject appdata = new WXFileObject();
//String pathStr = SDCARD_ROOT path;
//LOG.d("!!!!!!!!!!!!!!!!!!!!", pathStr);
if(path.startsWith(SDCARD_ROOT)){
appdata.filePath = path;
}else{
appdata.filePath = SDCARD_ROOT path;
}
//appdata.fileData = Util.readFromFile(pathStr, 0, -1);
WXMediaMessage msg = new WXMediaMessage(appdata);
Bitmap bmp = null;
try{
if (imgUrl.equals("")) {
Context Activity = this.cordova.getActivity().getApplicationContext();
Bitmap thumb = BitmapFactory.decodeResource(Activity.getResources(), R.drawable.file);
msg.thumbData = Util.bmpToByteArray(thumb, true);
} else {
bmp = BitmapFactory.decodeStream(new URL(imgUrl).openStream());
Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, 150, 150, true);
bmp.recycle();
msg.thumbData = Util.bmpToByteArray(thumbBmp, true);
}
msg.title = title;
msg.description = desc;
msg.mediaObject = appdata;
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("appdata");
req.message = msg;
int wxSdkVersion = api.getWXAppSupportAPI();
if (wxSdkVersion >= 0x21020001) {
req.scene = isSendToTimeline ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;
} else {
req.scene = SendMessageToWX.Req.WXSceneSession;
}
api.sendReq(req);
LOG.d("!!!!!!!!!!!!!!!!!!!!", appdata.filePath);
} catch(Exception e) {
e.printStackTrace();
}
}
//unregister
public void unregister() {
api.unregisterApp();
}
/**
@Override
public void onReq(BaseReq req) {
LOG.d("req", "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
switch (req.getType()) {
case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX:
LOG.d("onReq", "COMMAND_GETMESSAGE_FROM_WX");
System.out.println(ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX);
break;
case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:
LOG.d("onReq", "COMMAND_SHOWMESSAGE_FROM_WX");
System.out.println(ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX);
break;
default:
break;
}
showToast("发送消息成功");
//this.webView.sendJavascript("navigator.weixin.callback()");
}
@Override
public void onResp(BaseResp resp) {
LOG.d("resp", "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
int result = 0;
switch (resp.errCode) {
case BaseResp.ErrCode.ERR_OK:
result = 1;
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
result = 2;
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED:
result = 3;
break;
default:
result = 4;
break;
}
showToast("测试信息");
this.webView.sendJavascript("navigator.weixin.callback()");
//LOG.d("onResp", "result");
//LOG.d("WeChat Plugin", "weixin_info");
//System.out.println(result);
}
**/
private String buildTransaction(final String type) {
return (type == null) ? String.valueOf(System.currentTimeMillis()) : type System.currentTimeMillis();
}
}
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论