原生分享內容
public class ShareUtils {
/**
* 分享文字
*
* @param a 上下文
* @param activityTitle Activity的名字
* @param msgTitle 消息標題
* @param msgText 消息內容
*/
public static void shareTxt(Activity a, String activityTitle, String msgTitle, String msgText) {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain"); // 純文本
intent.putExtra(Intent.EXTRA_SUBJECT, msgTitle);
intent.putExtra(Intent.EXTRA_TEXT, msgText);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
a.startActivity(Intent.createChooser(intent, activityTitle));
}
/**
* 原生分享圖片
*
* @param file 本地圖片文件
* @param activity
*/
public static void shareImage(File file, Activity activity) {
Intent intent = new Intent(Intent.ACTION_SEND);
Uri fileUri;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
fileUri = FileProvider.getUriForFile(activity, getAppPackageName(App.context) + ".fileprovider", file);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
} else {
fileUri = Uri.fromFile(file);
}
intent.putExtra(Intent.EXTRA_STREAM, fileUri);
intent.setType("image/*");
Intent chooser = Intent.createChooser(intent, "");
if (intent.resolveActivity(activity.getPackageManager()) != null) {
activity.startActivityForResult(chooser,101);
}
}
/**
* 原生分享視頻
*
* @param file 本地視頻文件
* @param activity
*/
public static void shareVideo(File file, Activity activity) {
Intent intent = new Intent(Intent.ACTION_SEND);
Uri fileUri;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
fileUri = FileProvider.getUriForFile(activity, getAppPackageName(App.context) + ".fileprovider", file);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
} else {
fileUri = Uri.fromFile(file);
}
intent.putExtra(Intent.EXTRA_STREAM, fileUri);
intent.setType("video/*");
Intent chooser = Intent.createChooser(intent, "");
if (intent.resolveActivity(activity.getPackageManager()) != null) {
activity.startActivityForResult(chooser,101);
}
}
public static String getAppPackageName(Context context) {
String packageName = "";
try {
packageName = context.getPackageName();
} catch (Exception e) {
e.printStackTrace();
}
return packageName;
}
}
微信分享內容
public class WXUtil {
/**
* 檢查是否安裝微信
*
* @param context
* @return
*/
public static boolean isWeixinAvilible(Context context) {
final PackageManager packageManager = context.getPackageManager();// 獲取packagemanager
List<PackageInfo> pinfo = packageManager.getInstalledPackages(0);// 獲取所有已安裝程序的包信息
if (pinfo != null) {
for (int i = 0; i < pinfo.size(); i++) {
String pn = pinfo.get(i).packageName;
if (pn.equals("com.tencent.mm")) {
return true;
}
}
}
return false;
}
private static final int IMAGE_SIZE = 32768;//微信分享圖片大小限制
/**
* 用戶分享鏈接
*/
public static volatile String shareUrl = "";
/**
* 微信分享
*
* @param friendsCircle true:朋友圈
* @param title 分享標題
* @param desc 分享描述
*/
public static void share(final IWXAPI iwxapi, final Activity activity, final boolean friendsCircle, final String title, final String desc, final String bookUrl) {
if (!isWeixinAvilible(App.context)) {
ToastUtil.showShortToast(activity, "請先安裝微信");
return;
}
if (shareUrl == null) {
ToastUtil.showShortToast(activity, "分享失敗");
return;
}
new Thread(new Runnable() {
@Override
public void run() {
final Bitmap bitmap = returnBitMap(bookUrl);
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
WXWebpageObject webPage = new WXWebpageObject();
webPage.webpageUrl = shareUrl;//分享url
WXMediaMessage msg = new WXMediaMessage(webPage);
msg.title = title;
msg.description = desc;
msg.thumbData = getThumbData(bitmap);//封面圖片byte數組
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = String.valueOf(System.currentTimeMillis());
req.message = msg;
req.scene = friendsCircle ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;
iwxapi.sendReq(req);
}
});
}
}).start();
}
private static Bitmap returnBitMap(final String url) {
URL imageurl = null;
try {
imageurl = new URL(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
Bitmap bitmap = null;
try {
HttpURLConnection conn = (HttpURLConnection) imageurl.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
bitmap = BitmapFactory.decodeStream(is);
is.close();
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
/**
* 獲取分享封面byte數組 我們這邊取的是軟件啓動icon
*
* @return
*/
private static byte[] getThumbData(Bitmap bitmap) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;
ByteArrayOutputStream output = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, output);
int quality = 100;
while (output.toByteArray().length > IMAGE_SIZE && quality != 10) {
output.reset(); // 清空baos
bitmap.compress(Bitmap.CompressFormat.JPEG, quality, output);// 這裏壓縮options%,把壓縮後的數據存放到baos中
quality -= 10;
}
bitmap.recycle();
byte[] result = output.toByteArray();
try {
output.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}