提交 a5cc5f33 authored 作者: JarvanMo's avatar JarvanMo

share iamge & music

上级 9ed90582
......@@ -18,4 +18,6 @@ public class WechatPluginKeys {
public static final String IMAGE ="image";
public static final String THUMBNAIL ="thumbnail";
public static final String PACKAGE = "?package=";
}
package com.jarvanmo.wechatplugin.handler
import android.util.Log
import com.jarvanmo.wechatplugin.WechatPlugin
import com.jarvanmo.wechatplugin.constant.CallResult
import com.jarvanmo.wechatplugin.constant.WeChatPluginImageSchema
import com.jarvanmo.wechatplugin.constant.WeChatPluginMethods
import com.jarvanmo.wechatplugin.constant.WechatPluginKeys
import com.jarvanmo.wechatplugin.utils.AssetManagerUtil
import com.jarvanmo.wechatplugin.utils.FileUtil
import com.jarvanmo.wechatplugin.utils.ShareImageUtil
import com.jarvanmo.wechatplugin.utils.WeChatThumbnailUtil
import com.tencent.mm.opensdk.modelbase.BaseResp
import com.tencent.mm.opensdk.modelmsg.*
......@@ -15,7 +11,6 @@ import com.tencent.mm.opensdk.openapi.IWXAPI
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugin.common.PluginRegistry
import java.io.File
/***
......@@ -106,21 +101,20 @@ object WeChatPluginHandler {
private fun shareImage(call: MethodCall, result: MethodChannel.Result) {
val imagePath = call.argument<String>(WechatPluginKeys.IMAGE)
val imgObj = createWxImageObject(imagePath)
val byteArray = ShareImageUtil.getImageData(registrar,imagePath)
val imgObj = if(byteArray != null){
WXImageObject(byteArray)
}else{
null
}
if (imgObj == null) {
result.error(CallResult.RESULT_FILE_NOT_EXIST,CallResult.RESULT_FILE_NOT_EXIST,imagePath)
return
}
// val bmp = BitmapFactory.decodeResource(getResources(), R.drawable.send_img)
// val imgObj = WXImageObject(bmp)
//
val msg = WXMediaMessage()
msg.mediaObject = imgObj
//
// val thumbBmp = Bitmap.createScaledBitmap(bmp, THUMB_SIZE, THUMB_SIZE, true)
// bmp.recycle()
msg.thumbData = WeChatThumbnailUtil.thumbnailForCommon(call.argument(WechatPluginKeys.THUMBNAIL), registrar)
//
val req = SendMessageToWX.Req()
......@@ -130,25 +124,25 @@ object WeChatPluginHandler {
result.success(true)
}
private fun createWxImageObject(imagePath:String):WXImageObject?{
var imgObj: WXImageObject? = null
var imageFile:File? = null
if (imagePath.startsWith(WeChatPluginImageSchema.SCHEMA_ASSETS)){
val key = imagePath.substring(WeChatPluginImageSchema.SCHEMA_ASSETS.length, imagePath.length)
val assetFileDescriptor = AssetManagerUtil.openAsset(registrar,key,"")
imageFile = FileUtil.createTmpFile(assetFileDescriptor)
}else if (imagePath.startsWith(WeChatPluginImageSchema.SCHEMA_FILE)){
imageFile = File(imagePath)
}
if(imageFile != null && imageFile.exists()){
imgObj = WXImageObject()
imgObj.setImagePath(imagePath)
}else{
Log.d(WechatPlugin.TAG,CallResult.RESULT_FILE_NOT_EXIST)
}
return imgObj
}
// private fun createWxImageObject(imagePath:String):WXImageObject?{
// var imgObj: WXImageObject? = null
// var imageFile:File? = null
// if (imagePath.startsWith(WeChatPluginImageSchema.SCHEMA_ASSETS)){
// val key = imagePath.substring(WeChatPluginImageSchema.SCHEMA_ASSETS.length, imagePath.length)
// val assetFileDescriptor = AssetManagerUtil.openAsset(registrar,key,"")
// imageFile = FileUtil.createTmpFile(assetFileDescriptor)
// }else if (imagePath.startsWith(WeChatPluginImageSchema.SCHEMA_FILE)){
// imageFile = File(imagePath)
// }
// if(imageFile != null && imageFile.exists()){
// imgObj = WXImageObject()
// imgObj.setImagePath(imagePath)
// }else{
// Log.d(WechatPlugin.TAG,CallResult.RESULT_FILE_NOT_EXIST)
// }
//
// return imgObj
// }
fun onResp(resp: BaseResp) {
val result = mapOf(
"errStr" to resp.errStr,
......@@ -158,8 +152,6 @@ object WeChatPluginHandler {
"openId" to resp.openId
)
channel?.invokeMethod(WeChatPluginMethods.WE_CHAT_RESPONSE, result)
}
......
package com.jarvanmo.wechatplugin.utils;
import android.content.res.AssetFileDescriptor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import com.jarvanmo.wechatplugin.constant.WeChatPluginImageSchema;
import com.jarvanmo.wechatplugin.constant.WechatPluginKeys;
import java.io.IOException;
import java.io.InputStream;
import io.flutter.plugin.common.PluginRegistry;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody;
public class ShareImageUtil {
public static byte[] getImageData(PluginRegistry.Registrar registrar, String path) {
byte[] result = null;
if (path.startsWith(WeChatPluginImageSchema.SCHEMA_ASSETS)) {
String key = path.substring(WeChatPluginImageSchema.SCHEMA_ASSETS.length(), path.length());
AssetFileDescriptor fileDescriptor = AssetManagerUtil.openAsset(registrar, key, getPackage(key));
try {
InputStream inputStream = fileDescriptor.createInputStream();
result = streamToByteArray(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
} else if (path.startsWith(WeChatPluginImageSchema.SCHEMA_FILE)) {
Bitmap bmp = null;
bmp = BitmapFactory.decodeFile(path);
result = Util.bmpToByteArray(bmp, true);
} else {
InputStream inputStream = openStream(path);
if (inputStream != null) {
result = streamToByteArray(inputStream);
}
}
return result;
}
private static byte[] streamToByteArray(InputStream inputStream){
Bitmap bmp = null;
bmp = BitmapFactory.decodeStream(inputStream);
return Util.bmpToByteArray(bmp, true);
}
private static String getPackage(String assetsName) {
String packageStr = null;
if (assetsName.contains(WechatPluginKeys.PACKAGE)) {
int index = assetsName.indexOf(WechatPluginKeys.PACKAGE);
packageStr = assetsName.substring(index + WechatPluginKeys.PACKAGE.length(), assetsName.length());
}
return packageStr;
}
private static InputStream openStream(String url){
OkHttpClient okHttpClient = new OkHttpClient.Builder().build();
Request request = new Request.Builder().url(url).get().build();
try {
Response response = okHttpClient.newCall(request).execute();
ResponseBody responseBody = response.body();
if(response.isSuccessful() && responseBody!= null){
return responseBody.byteStream();
}else {
return null;
}
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
package com.jarvanmo.wechatplugin.utils;
import android.content.res.AssetFileDescriptor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import com.jarvanmo.wechatplugin.WechatPlugin;
import com.jarvanmo.wechatplugin.constant.WeChatPluginImageSchema;
import com.jarvanmo.wechatplugin.constant.WechatPluginKeys;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLConnection;
import java.security.Key;
import io.flutter.plugin.common.PluginRegistry;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody;
import okio.Okio;
import okio.Source;
public class WeChatThumbnailUtil {
private static final int COMMON_THUMB_SIZE = 150;
private WeChatThumbnailUtil() {
}
public static byte[] thumbnailForMiniProgram(String thumbnail, PluginRegistry.Registrar registrar) {
byte[] result = null;
if (thumbnail.startsWith(WeChatPluginImageSchema.SCHEMA_ASSETS)) {
result = fromAssetForMiniProgram(thumbnail,registrar);
result = fromAssetForMiniProgram(thumbnail, registrar);
} else if (thumbnail.startsWith(WeChatPluginImageSchema.SCHEMA_FILE)) {
} else {
}
return result;
}
private static byte[] fromAssetForMiniProgram(String thumbnail, PluginRegistry.Registrar registrar){
private static byte[] fromAssetForMiniProgram(String thumbnail, PluginRegistry.Registrar registrar) {
byte[] result = null;
String key = thumbnail.substring(WeChatPluginImageSchema.SCHEMA_ASSETS.length(), thumbnail.length());
AssetFileDescriptor fileDescriptor = AssetManagerUtil.openAsset(registrar, key, "");
AssetFileDescriptor fileDescriptor = AssetManagerUtil.openAsset(registrar, key, getPackage(key));
if (fileDescriptor != null && fileDescriptor.getLength() <= 128 * 1024) {
try {
......@@ -58,22 +72,35 @@ public class WeChatThumbnailUtil {
}
return result;
return result;
}
public static byte[] thumbnailForCommon(String thumbnail, PluginRegistry.Registrar registrar){
public static byte[] thumbnailForCommon(String thumbnail, PluginRegistry.Registrar registrar) {
byte[] result = null;
if (thumbnail.startsWith(WeChatPluginImageSchema.SCHEMA_ASSETS)) {
result = fromAssetForCommon(thumbnail,registrar);
result = fromAssetForCommon(thumbnail, registrar);
} else if (thumbnail.startsWith(WeChatPluginImageSchema.SCHEMA_FILE)) {
Bitmap bmp = BitmapFactory.decodeFile(thumbnail);
Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, COMMON_THUMB_SIZE, COMMON_THUMB_SIZE, true);
bmp.recycle();
result = Util.bmpToByteArray(thumbBmp, true);
} else {
InputStream input = openStream(thumbnail);
if (input != null) {
Bitmap bmp = BitmapFactory.decodeStream(input);
Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, COMMON_THUMB_SIZE, COMMON_THUMB_SIZE, true);
bmp.recycle();
result = Util.bmpToByteArray(thumbBmp, true);
}
}
return result;
}
private static byte[] fromAssetForCommon(String thumbnail, PluginRegistry.Registrar registrar){
private static byte[] fromAssetForCommon(String thumbnail, PluginRegistry.Registrar registrar) {
int size = 32;
byte[] result = null;
String key = thumbnail.substring(WeChatPluginImageSchema.SCHEMA_ASSETS.length(), thumbnail.length());
AssetFileDescriptor fileDescriptor = AssetManagerUtil.openAsset(registrar, key, "");
AssetFileDescriptor fileDescriptor = AssetManagerUtil.openAsset(registrar, key, getPackage(key));
if (fileDescriptor != null && fileDescriptor.getLength() <= size * 1024) {
try {
......@@ -105,6 +132,34 @@ public class WeChatThumbnailUtil {
// Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, COMMON_THUMB_SIZE, COMMON_THUMB_SIZE, true);
// bmp.recycle();
// result = Util.bmpToByteArray(thumbBmp, true);
return result;
return result;
}
private static String getPackage(String assetsName) {
String packageStr = null;
if (assetsName.contains(WechatPluginKeys.PACKAGE)) {
int index = assetsName.indexOf(WechatPluginKeys.PACKAGE);
packageStr = assetsName.substring(index + WechatPluginKeys.PACKAGE.length(), assetsName.length());
}
return packageStr;
}
private static InputStream openStream(String url){
OkHttpClient okHttpClient = new OkHttpClient.Builder().build();
Request request = new Request.Builder().url(url).get().build();
try {
Response response = okHttpClient.newCall(request).execute();
ResponseBody responseBody = response.body();
if(response.isSuccessful() && responseBody!= null){
return responseBody.byteStream();
}else {
return null;
}
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
......@@ -3,6 +3,9 @@ import 'package:wechat_plugin/src/wechat_scene.dart';
const String _scene = "scene";
const String _transaction = "transaction";
const String _thumbnail = "thumbnail";
const String _title = "title";
const String _description ="description";
class WeChatShareTextModel {
final String text;
......@@ -80,8 +83,7 @@ class WeChatShareImageModel {
: this.transaction = transaction ?? "text",
this.scene = scene ?? WeChatScene.TIMELINE,
this.thumbnail = thumbnail ?? "",
assert(image != null),
assert(thumbnail != null);
assert(image != null);
Map toMap() {
return {
......@@ -92,3 +94,40 @@ class WeChatShareImageModel {
};
}
}
class WeChatShareMusicModel {
final String transaction;
final WeChatScene scene;
final String musicUrl;
final String musicLowBandUrl;
final String thumbnail;
final String title;
final String description;
WeChatShareMusicModel(
{String transaction,
WeChatScene scene,
this.musicUrl,
this.musicLowBandUrl ,
this.title:"",
this.description:"",
String thumbnail})
: this.transaction = transaction ?? "text",
this.scene = scene ?? WeChatScene.TIMELINE,
this.thumbnail = thumbnail ?? "",
assert(musicUrl != null || musicLowBandUrl != null ),
assert(thumbnail != null);
Map toMap() {
return {
_transaction: transaction,
_scene: scene.toString(),
"musicUrl": musicUrl,
"musicLowBandUrl":musicLowBandUrl,
_thumbnail: thumbnail,
_title:title,
_description:description
};
}
}
......@@ -36,6 +36,11 @@ class WechatPlugin {
}
static Future shareMusic(WeChatShareMusicModel model)async{
return await _channel.invokeMethod("shareMusic",model.toMap());
}
static Future<dynamic> _handler(MethodCall methodCall){
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论