兼容SDK 18以上的系統(tǒng)赛不,直接調(diào)用系統(tǒng)分享功能,分享文本罢洲、圖片踢故、文件到第三方APP,如:微信惹苗、QQ殿较、微博等,可直達微信桩蓉、朋友圈淋纲、QQ、QQ空間院究、微博的分享僅寫了圖片分享的洽瞬,其他的文本、文件分享不常用到业汰,就不寫了片任。
具體圖片分享區(qū)分單張圖片分享和多張圖片分享,詳情請看代碼:
/**
* 分享文件蔬胯、圖片对供、文本
*/
public class ShareFileUtils {
/**
* 分享文本
*
* @param context
* @param path
*/
public static void shareUrl(Context context, String path) {
if (TextUtils.isEmpty(path)) {
return;
}
checkFileUriExposure();
Intent it = new Intent(Intent.ACTION_SEND);
it.putExtra(Intent.EXTRA_TEXT, path);
it.setType("text/plain");
context.startActivity(Intent.createChooser(it, "分享APP"));
}
/**
* 分享文件
*
* @param context
* @param path
*/
public static void shareFile(Context context, String path) {
if (TextUtils.isEmpty(path)) {
return;
}
checkFileUriExposure();
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(path))); //傳輸圖片或者文件 采用流的方式
intent.setType("*/*"); //分享文件
context.startActivity(Intent.createChooser(intent, "分享"));
}
/**
* 分享單張圖片
*
* @param context
* @param path
*/
public static void shareImage(Context context, String path) {
shareImage(context, path, null, null, null);
}
/**
* 分享多張圖片
*
* @param context
* @param pathList
*/
public static void shareImage(Context context, List<String> pathList) {
shareImage(context, null, pathList, null, null);
}
/**
* 分享到微信好友,單圖
*/
public static void shareImageToWeChat(Context context, String path) {
//判斷是否安裝微信氛濒,如果沒有安裝微信 又沒有判斷就直達微信分享是會掛掉的
if (!isAppInstall(context, "com.tencent.mm")) {
ToastUtils.showToast(context, "您還沒有安裝微信");
return;
}
shareImage(context, path, null, "com.tencent.mm", "com.tencent.mm.ui.tools.ShareImgUI");
}
/**
* 分享到微信好友产场,多圖
*/
public static void shareImageToWeChat(final Context context, List<String> pathList) {
//判斷是否安裝微信,如果沒有安裝微信 又沒有判斷就直達微信分享是會掛掉的
if (!isAppInstall(context, "com.tencent.mm")) {
ToastUtils.showToast(context, "您還沒有安裝微信");
return;
}
shareImage(context, null, pathList, "com.tencent.mm", "com.tencent.mm.ui.tools.ShareImgUI");
}
/**
* 分享到微信朋友圈舞竿,單圖
*/
public static void shareImageToWeChatFriend(Context context, String path) {
if (!isAppInstall(context, "com.tencent.mm")) {
ToastUtils.showToast(context, "您還沒有安裝微信");
return;
}
shareImage(context, path, null, "com.tencent.mm", "com.tencent.mm.ui.tools.ShareToTimeLineUI");
}
/**
* 分享到微信朋友圈京景,多圖
*/
public static void shareImageToWeChatFriend(Context context, List<String> pathList) {
if (!isAppInstall(context, "com.tencent.mm")) {
ToastUtils.showToast(context, "您還沒有安裝微信");
return;
}
shareImage(context, null, pathList, "com.tencent.mm", "com.tencent.mm.ui.tools.ShareToTimeLineUI");
}
/**
* 分享圖片給QQ好友,單圖
*/
public static void shareImageToQQ(Context context, String path) {
if (!isAppInstall(context, "com.tencent.mobileqq")) {
ToastUtils.showToast(context, "您還沒有安裝QQ");
return;
}
shareImage(context, path, null, "com.tencent.mobileqq", "com.tencent.mobileqq.activity.JumpActivity");
}
/**
* 分享圖片給QQ好友骗奖,多圖
*/
public static void shareImageToQQ(Context context, List<String> pathList) {
if (!isAppInstall(context, "com.tencent.mobileqq")) {
ToastUtils.showToast(context, "您還沒有安裝QQ");
return;
}
shareImage(context, null, pathList, "com.tencent.mobileqq", "com.tencent.mobileqq.activity.JumpActivity");
}
/**
* 分享圖片到QQ空間确徙,單圖
*/
public static void shareImageToQZone(Context context, String path) {
if (!isAppInstall(context, "com.qzone")) {
ToastUtils.showToast(context, "您還沒有安裝QQ空間");
return;
}
shareImage(context, path, null, "com.qzone", "com.qzonex.module.operation.ui.QZonePublishMoodActivity");
}
/**
* 分享圖片到QQ空間醒串,多圖
*/
public static void shareImageToQZone(Context context, List<String> pathList) {
if (!isAppInstall(context, "com.qzone")) {
ToastUtils.showToast(context, "您還沒有安裝QQ空間");
return;
}
shareImage(context, null, pathList, "com.qzone", "com.qzonex.module.operation.ui.QZonePublishMoodActivity");
}
/**
* 分享圖片到微博,單圖
*/
public static void shareImageToWeibo(Context context, String path) {
if (!isAppInstall(context, "com.sina.weibo")) {
ToastUtils.showToast(context, "您還沒有安裝新浪微博");
return;
}
shareImage(context, path, null, "com.sina.weibo", "com.sina.weibo.EditActivity");
}
/**
* 分享圖片到微博鄙皇,多圖
*/
public static void shareImageToWeibo(Context context, List<String> pathList) {
if (!isAppInstall(context, "com.sina.weibo")) {
ToastUtils.showToast(context, "您還沒有安裝新浪微博");
return;
}
shareImage(context, null, pathList, "com.sina.weibo", "com.sina.weibo.EditActivity");
}
/**
* 檢測手機是否安裝某個應(yīng)用
*
* @param context
* @param appPackageName 應(yīng)用包名
* @return true-安裝芜赌,false-未安裝
*/
public static boolean isAppInstall(Context context, String appPackageName) {
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 (appPackageName.equals(pn)) {
return true;
}
}
}
return false;
}
/**
* 分享前必須執(zhí)行本代碼,主要用于兼容SDK18以上的系統(tǒng)
*/
private static void checkFileUriExposure() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
builder.detectFileUriExposure();
}
}
/**
* @param context 上下文
* @param path 不為空的時候伴逸,表示分享單張圖片缠沈,會檢驗圖片文件是否存在
* @param pathList 不為空的時候表示分享多張圖片,會檢驗每一張圖片是否存在
* @param pkg 分享到的指定app的包名
* @param cls 分享到的頁面(微博不需要指定頁面)
*/
private static void shareImage(Context context, String path, List<String> pathList, String pkg, String cls) {
if (path == null && pathList == null) {
ToastUtils.showToast(context, "找不到您要分享的圖片文件");
return;
}
checkFileUriExposure();
try {
if (path != null) {
//單張圖片
if (!MyFileUtils.isFile(path)) {
ToastUtils.showToast(context, "圖片不存在错蝴,請檢查后重試");
return;
}
Intent intent = new Intent();
if (pkg != null && cls != null) {
//指定分享到的app
if (pkg.equals("com.sina.weibo")) {
//微博分享的需要特殊處理
intent.setPackage(pkg);
} else {
ComponentName comp = new ComponentName(pkg, cls);
intent.setComponent(comp);
}
}
intent.setAction(Intent.ACTION_SEND);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(path)));
intent.setType("image/*"); //分享文件
context.startActivity(Intent.createChooser(intent, "分享"));
} else {
//多張圖片
ArrayList<Uri> uriList = new ArrayList<>();
for (int i = 0; i < pathList.size(); i++) {
if (!MyFileUtils.isFile(pathList.get(i))) {
ToastUtils.showToast(context, "第" + (i + 1) + "張圖片不存在洲愤,請檢查后重試");
return;
}
uriList.add(Uri.fromFile(new File(pathList.get(i))));
}
Intent intent = new Intent();
if (pkg != null && cls != null) {
//指定分享到的app
if (pkg.equals("com.sina.weibo")) {
//微博分享的需要特殊處理
intent.setPackage(pkg);
} else {
ComponentName comp = new ComponentName(pkg, cls);
intent.setComponent(comp);
}
}
intent.setAction(Intent.ACTION_SEND_MULTIPLE);
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uriList);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setType("image/*");
context.startActivity(Intent.createChooser(intent, "分享"));
}
} catch (Exception e) {
ToastUtils.showToast(context, "分享失敗,未知錯誤");
}
}
}