NOTE:这只是简单的实现,没有使用各自的SDK。基本思路是通过包名和类名来直接操作的。如果app修改了名字,可能就需要对应的修改报名和类名。
主要目的是对多张图片的分享做一次探索。
首先,需要一个检查APP是否安装的类 AppInstallHelper:
package com.util.share;
import java.util.List;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ResolveInfo;
public class AppInstallHelper {
//这些都是分享时,对应的包名和类名。怎么获取到的?嘿嘿。。
// 微信好友
// package = com.tencent.mm,
// activity = com.tencent.mm.ui.tools.ShareImgUI
// 微信朋友圈
// package = com.tencent.mm,
// activity = com.tencent.mm.ui.tools.ShareToTimeLineUI
//
// package = com.tencent.mobileqq,
// activity = com.tencent.mobileqq.activity.JumpActivity
// package = com.tencent.mobileqq,
// activity = com.tencent.mobileqq.activity.qfileJumpActivity
// QQ空间
// package = com.qzone, activity =
// com.qzone.ui.operation.QZonePublishMoodActivity
// 人人
// package = com.renren.mobile.android,
// activity = com.renren.mobile.android.publisher.UploadPhotoEffect
// 陌陌
// package = com.immomo.momo, activity =
// com.immomo.momo.android.activity.feed.SharePublishFeedActivity
// 新浪微博
// package = com.sina.weibo, activity = com.sina.weibo.EditActivity
// 腾讯微博
// package = com.tencent.WBlog, activity =
// com.tencent.WBlog.intentproxy.TencentWeiboIntent
//packageName = im.yixin, name = im.yixin.activity.share.ShareToSnsActivity
//packageName = im.yixin, name = im.yixin.activity.share.ShareToSessionActivity
//packageName = com.alibaba.android.babylon, name = com.alibaba.android.babylon.biz.im.activity.RecentIMListActivity
//packageName = com.alibaba.android.babylon, name = com.alibaba.android.babylon.biz.home.activity.CreateFeedActivity
public static boolean isInstalled(Context context, String packageName,
String activityName) {
Intent intent = new Intent();
intent.setClassName(packageName, activityName);
List<ResolveInfo> list = context.getPackageManager()
.queryIntentActivities(intent, 0);
if (list.size() > 0) {
return true;
}
return false;
}
}
接下来就是对应的分享代码了,挨个儿来吧:
来往好友:
public class ShareToLwFriend {
//来往好友
private static final String PackageName = "com.alibaba.android.babylon";
private static final String ActivityName = "com.alibaba.android.babylon.biz.im.activity.RecentIMListActivity";
//pics are OK。 text is not....
public static void share(Activity activity,String msg, ArrayList<Uri> images) {
if (AppInstallHelper.isInstalled(activity, PackageName,
ActivityName)) {
ShareUtil shareUtil = new ShareUtil(activity, images);
Intent baseIntent = shareUtil.getBaseIntent(ActivityName);
// baseIntent.putExtra("summary", msg);
// baseIntent.putExtra(Intent.EXTRA_TITLE, msg);
baseIntent.putExtra(Intent.EXTRA_TEXT, msg);
// baseIntent.putExtra(Intent.EXTRA_SUBJECT, msg);
activity.startActivity(baseIntent);
} else {
Toast.makeText(activity, "您还没有安装来往!", Toast.LENGTH_SHORT).show();
}
}
}
来往状态:
public class ShareToLwZone {
//来往状态
private static final String PackageName = "com.alibaba.android.babylon";
private static final String ActivityName = "com.alibaba.android.babylon.biz.home.activity.CreateFeedActivity";
//pics are OK。 text is not....
public static void share(Activity activity,String msg, ArrayList<Uri> images) {
if (AppInstallHelper.isInstalled(activity, PackageName,
ActivityName)) {
ShareUtil shareUtil = new ShareUtil(activity, images);
Intent baseIntent = shareUtil.getBaseIntent(ActivityName);
// baseIntent.putExtra("summary", msg);
// baseIntent.putExtra(Intent.EXTRA_TITLE, msg);
// baseIntent.putExtra(Intent.EXTRA_TEXT, msg);
baseIntent.putExtra(Intent.EXTRA_SUBJECT, msg);
activity.startActivity(baseIntent);
} else {
Toast.makeText(activity, "您还没有安装来往!", Toast.LENGTH_SHORT).show();
}
}
}
陌陌:
public class ShareToMomo {
private static final String PackageName = "com.immomo.momo";
private static final String ActivityName = "com.immomo.momo.android.activity.feed.SharePublishFeedActivity";
//不能分享多张图片
public static void share(Activity activity,String msg, ArrayList<Uri> images) {
if (AppInstallHelper.isInstalled(activity, PackageName,
ActivityName)) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_TITLE, msg);
intent.setType("text/*");
intent.putExtra(Intent.EXTRA_STREAM, images.get(0));
intent.setClassName(PackageName, ActivityName);
activity.startActivity(intent);
} else {
Toast.makeText(activity, "您还没有安装陌陌!", Toast.LENGTH_SHORT).show();
}
}
}
QQ好友:
public class ShareToQQFriend {
private static final String PackageName = "com.tencent.mobileqq";
private static final String ActivityName = "com.tencent.mobileqq.activity.JumpActivity";
//pics are OK。 text is not....
public static void share(Activity activity,String msg, ArrayList<Uri> images) {
if (AppInstallHelper.isInstalled(activity, PackageName,
ActivityName)) {
ShareUtil shareUtil = new ShareUtil(activity, images);
Intent baseIntent = shareUtil.getBaseIntent(ActivityName);
baseIntent.putExtra("summary", msg);
activity.startActivity(baseIntent);
} else {
Toast.makeText(activity, "您还没有安装QQ!", Toast.LENGTH_SHORT).show();
}
}
}
QQ空间:
public class ShareToQQZone {
private static final String PackageName = "com.qzone";
private static final String ActivityName = "com.qzone.ui.operation.QZonePublishMoodActivity";
public static void share(Activity activity,String msg, ArrayList<Uri> images) {
if (AppInstallHelper.isInstalled(activity, PackageName,
ActivityName)) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND_MULTIPLE);
intent.putExtra(Intent.EXTRA_TEXT, msg);
intent.setType("image/jpeg");
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, images);
intent.setClassName(PackageName, ActivityName);
activity.startActivity(intent);
} else {
Toast.makeText(activity, "您还没有安装QQ空间!", Toast.LENGTH_SHORT).show();
}
}
}
人人:
public class ShareToRenren {
private static final String PackageName = "com.renren.mobile.android";
private static final String ActivityName = "com.renren.mobile.android.publisher.UploadPhotoEffect";
//OK
public static void shareText(Activity activity, String msg) {
if (AppInstallHelper.isInstalled(activity, PackageName,
ActivityName)) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_TEXT, msg);
intent.setType("text/*");
intent.setClassName(PackageName, ActivityName);
activity.startActivity(intent);
} else {
Toast.makeText(activity, "您还没有安装人人!", Toast.LENGTH_SHORT).show();
}
}
//NG
public static void shareImgs(Activity activity,/*String msg,*/ ArrayList<Uri> images) {
if (AppInstallHelper.isInstalled(activity, PackageName,
ActivityName)) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND_MULTIPLE);
// intent.putExtra(Intent.EXTRA_TEXT, msg);
intent.setType("image/*");
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, images);
intent.setClassName(PackageName, ActivityName);
activity.startActivity(intent);
} else {
Toast.makeText(activity, "您还没有安装人人!", Toast.LENGTH_SHORT).show();
}
}
public static void share(Activity activity,String msg, ArrayList<Uri> images) {
if (AppInstallHelper.isInstalled(activity, PackageName,
ActivityName)) {
ArrayList<Uri> oneImg = new ArrayList<Uri>();
oneImg.add(images.get(0));
ShareUtil shareUtil = new ShareUtil(activity, oneImg);
Intent intent = shareUtil.getBaseIntent(ActivityName);
intent.putExtra(Intent.EXTRA_TEXT, msg);
activity.startActivity(intent);
} else {
Toast.makeText(activity, "您还没有安装人人!", Toast.LENGTH_SHORT).show();
}
}
}
腾讯微博:
public class ShareToTecentWeibo {
private static final String PackageName = "com.tencent.WBlog";
private static final String ActivityName = "com.tencent.WBlog.intentproxy.TencentWeiboIntent";
public static void share(Activity activity,String msg, ArrayList<Uri> images) {
if (AppInstallHelper.isInstalled(activity, PackageName,
ActivityName)) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_TEXT, msg);
intent.setType("image/jpeg");
intent.putExtra(Intent.EXTRA_STREAM, images.get(0));
intent.setClassName(PackageName, ActivityName);
activity.startActivity(intent);
} else {
Toast.makeText(activity, "您还没有安装腾讯微博!", Toast.LENGTH_SHORT).show();
}
}
}
微信好友:
public class ShareToWeixinFriend {
private static final String PackageName = "com.tencent.mm";
private static final String ActivityName = "com.tencent.mm.ui.tools.ShareImgUI";
public static void shareImgs(Activity activity, ArrayList<Uri> images) {
if (AppInstallHelper.isInstalled(activity, PackageName,
ActivityName)) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND_MULTIPLE);
intent.setType("image/*");
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, images);
intent.setClassName(PackageName, ActivityName);
activity.startActivity(intent);
} else {
Toast.makeText(activity, "您还没有安装微信!", Toast.LENGTH_SHORT).show();
}
}
public static void shareText(Activity activity,String msg) {
if (AppInstallHelper.isInstalled(activity, PackageName,
ActivityName)) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_TEXT, msg);
intent.setType("text/*");
intent.setClassName(PackageName, ActivityName);
activity.startActivity(intent);
} else {
Toast.makeText(activity, "您还没有安装微信!", Toast.LENGTH_SHORT).show();
}
}
}
朋友圈:
public class ShareToWeixinZone {
private static final String PackageName = "com.tencent.mm";
private static final String ActivityName = "com.tencent.mm.ui.tools.ShareToTimeLineUI";
public static void share(Activity activity,String msg, ArrayList<Uri> images) {
if (AppInstallHelper.isInstalled(activity, PackageName,
ActivityName)) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND_MULTIPLE);
intent.putExtra("Kdescription", msg);
intent.setType("image/*");
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, images);
intent.setClassName(PackageName, ActivityName);
activity.startActivity(intent);
} else {
Toast.makeText(activity, "您还没有安装微信!", Toast.LENGTH_SHORT).show();
}
}
}
还有一些,见下一篇。