最近APP要接入分享圖片和視頻功能,主流就是微博微信QQ,需要去開放平臺註冊APP,集成SDK,非常麻煩。
突然發現,可以調用手機系統系統的分享功能,這樣可以省去很多的麻煩,但是系統的分享是一次性啓用整個手機的所有分享,有時候會非常的多,並不是我們所需要的。
所以我寫了一個工具類,用來實現指定的平臺來分享圖片和視頻,再也不用接入分享SDK了
核心方法如下,根據指定的包名和分享方式,過濾所需要的的平臺,返回指定的分享intent
private Intent getChooser(String packageName,String packageMage){
Intent openInChooser;
List<LabeledIntent> intentList = new ArrayList<LabeledIntent>();
PackageManager pm = mContext.getPackageManager();
for (int i = 0; i < resInfo.size(); i++) {
ResolveInfo ri = resInfo.get(i);
String itemPackageName = ri.activityInfo.packageName;
String itemPackageMage = String.valueOf(ri.loadLabel(pm));
if (itemPackageName.equals(packageName) && itemPackageMage.equals(packageMage)) {
Intent intent = new Intent();
intent.setComponent(new ComponentName(itemPackageName, ri.activityInfo.name));
intent.setAction(Intent.ACTION_SEND);
intent.setType(type);
intent.putExtra(Intent.EXTRA_SUBJECT, title);
intent.putExtra(Intent.EXTRA_TEXT, text);
intent.putExtra(Intent.EXTRA_STREAM, uri);
intentList.add(new LabeledIntent(intent, itemPackageName, ri.loadLabel(pm), ri.icon));
}
}
if (intentList.size() > 0) {
openInChooser = Intent.createChooser(intentList.remove(0), "請選擇您要分享的方式");
LabeledIntent[] extraIntents = intentList.toArray(new LabeledIntent[intentList.size()]);
openInChooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, extraIntents);
} else {
return null;
}
return openInChooser;
}
至於包名和分享方式,已經把常用的寫在內部類
static class PackageInfo{
/*
這些包名和方法名,都是在getChooser的循環中輸出的itemPackageName和itemPackageMage
如有需要,可以自行添加
*/
static String QQ_PACKAGE_NAME="com.tencent.mobileqq";
static String QQ_FRIEND="發送給好友";
static String QQ_COLLECT="保存到QQ收藏";
static String QQ_PC="發送到我的電腦";
static String QQ_FACE_SEND="面對面快傳";
static String WX_PACKAGE_NAME="com.tencent.mm";
static String WX_FRIEND="發送給朋友";
static String WX_COLLECT="添加到微信收藏";
static String WX_MOMENTS="發送到朋友圈";
static String WB_PACKAGE_NAME="com.sina.weibo";
static String WB_BLOG="微博";
static String WB_STORY="微博故事";
static String WB_FRIEND="微博好友";
static String BAIDU_DISK_PACKAGE_NAME="com.baidu.netdisk";
static String BAIDU_DISK_SAVE="保存到網盤";
static String BLUETOOTH_PACKAGE_NAME="com.android.bluetooth";
static String BLUETOOTH_SEND="藍牙";
static String ALIPAY_PACKAGE_NAME="com.eg.android.AlipayGphone";
static String ALIPAY_SCAN_CODE="支付寶二維碼識別";
}
最後使用的時候就非常簡單了
public void shareQQFriend(){
//發送給QQ好友
startShareActivity(getChooser(PackageInfo.QQ_PACKAGE_NAME,PackageInfo.QQ_FRIEND));
}
public void shareWeChatCollection(){
//發送給微信收藏
startShareActivity(getChooser(PackageInfo.WX_PACKAGE_NAME,PackageInfo.WX_COLLECT));
}
public void shareWeChatMoments(){
//發送給微信朋友圈
startShareActivity(getChooser(PackageInfo.WX_PACKAGE_NAME,PackageInfo.WX_MOMENTS));
}
完整DEmo