個人原創(chuàng)文章,請尊重原創(chuàng)炼杖,轉(zhuǎn)載請注明出處:吳磊的簡書:http://www.reibang.com/p/a4c29ec5712f
前言
最近在做項目的時候戈鲁,大部分項目的分享功能都是通過微信、微博之類的SDK實現(xiàn)分享嘹叫,又或是利用ShareSdk來做,很少使用系統(tǒng)自帶的分享功能诈乒,碰到現(xiàn)在的項目只要求用系統(tǒng)的分享即可罩扇,雖然簡單,但是一下子無從下手。經(jīng)過網(wǎng)上的搜索研究喂饥,最終解決消约,此博文一為學習筆記,二為也要使用此功能的同學指引方向员帮。
需求
直接調(diào)用系統(tǒng)的分享功能或粮,分享文本、圖片等信息到指定的平臺捞高。
實現(xiàn)
- 首先獲取系統(tǒng)中所有的支持此分享的應用氯材,以下為文本分享為例:
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
List<ResolveInfo> resolveInfos = thisActivity.getPackageManager().queryIntentActivities(shareIntent, PackageManager.MATCH_DEFAULT_ONLY);
- 其次要找到你要分享的應用的包名,你可以直接網(wǎng)上搜硝岗,可以在上面的 resolveInfos中查看所有可分享的應用氢哮,然后看到包名,以下列舉幾個常用的應用包名:
- QQ:com.tencent.mobileqq (包括QQ分享型檀、QQ收藏冗尤、發(fā)送到電腦)
- 微信:com.tencent.mm (包括微信好友、微信收藏)
- 微博:com.sina.weibo (發(fā)布微博)
篩選代碼如下:
if (resolveInfos.isEmpty()) {
return;
}
List<Intent> targetIntents = new ArrayList<>();
for (ResolveInfo info : resolveInfos) {
ActivityInfo ainfo = info.activityInfo;
switch (ainfo.packageName) {
case "com.tencent.mm":
addShareIntent(targetIntents, ainfo);
break;
case "com.tencent.mobileqq":
addShareIntent(targetIntents, ainfo);
break;
case "com.sina.weibo":
addShareIntent(targetIntents, ainfo);
break;
}
}
其中的addShareIntent 方法如下:
private void addShareIntent(List<Intent> list, ActivityInfo ainfo) {
Intent target = new Intent(Intent.ACTION_SEND);
target.setType("text/plain");
target.putExtra(Intent.EXTRA_TITLE, "這里是標題");
target.putExtra(Intent.EXTRA_TEXT, "這是我的分享內(nèi)容");
target.setPackage(ainfo.packageName);
target.setClassName(ainfo.packageName, ainfo.name);
list.add(target);
}
- 最后拉起分享選擇dialog:
if (targetIntents == null || targetIntents.size() == 0) {
return;
}
Intent chooserIntent = Intent.createChooser(targetIntents.remove(0), "請選擇分享平臺");
if (chooserIntent == null) {
return;
}
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetIntents.toArray(new Parcelable[]{}));
try {
startActivity(chooserIntent);
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(thisActivity, "找不到該分享應用組件", Toast.LENGTH_SHORT).show();
}
以上就實現(xiàn)了指定應用的系統(tǒng)分享功能胀溺。完整代碼如下:
public void onShareClicked() {
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
List<ResolveInfo> resolveInfos = thisActivity.getPackageManager().queryIntentActivities(shareIntent, PackageManager.MATCH_DEFAULT_ONLY);
if (resolveInfos.isEmpty()) {
return;
}
List<Intent> targetIntents = new ArrayList<>();
for (ResolveInfo info : resolveInfos) {
ActivityInfo ainfo = info.activityInfo;
switch (ainfo.packageName) {
case "com.tencent.mm":
addShareIntent(targetIntents, ainfo);
break;
case "com.tencent.mobileqq":
addShareIntent(targetIntents, ainfo);
break;
case "com.sina.weibo":
addShareIntent(targetIntents, ainfo);
break;
}
}
if (targetIntents == null || targetIntents.size() == 0) {
return;
}
Intent chooserIntent = Intent.createChooser(targetIntents.remove(0), "請選擇分享平臺");
if (chooserIntent == null) {
return;
}
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetIntents.toArray(new Parcelable[]{}));
try {
startActivity(chooserIntent);
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(thisActivity, "找不到該分享應用組件", Toast.LENGTH_SHORT).show();
}
}
private void addShareIntent(List<Intent> list, ActivityInfo ainfo) {
Intent target = new Intent(Intent.ACTION_SEND);
target.setType("text/plain");
target.putExtra(Intent.EXTRA_TITLE, "網(wǎng)盤搜索");
target.putExtra(Intent.EXTRA_TEXT, "這是我的分享內(nèi)容");
target.setPackage(ainfo.packageName);
target.setClassName(ainfo.packageName, ainfo.name);
list.add(target);
}
歡迎指正代碼中的錯誤裂七,共同進步!
個人原創(chuàng)文章仓坞,請尊重原創(chuàng)背零,轉(zhuǎn)載請注明出處:吳磊的簡書:http://www.reibang.com/p/a4c29ec5712f
歡迎聯(lián)系我、提供工作機會:Github:https://github.com/MondeoWu/GestureUnlockE-mail:331948214@qq.comQQ:331948214