为什么80%的码农都做不了架构师?>>>
NOTE:这只是简单的实现,没有使用各自的SDK。基本思路是通过包名和类名来直接操作的。如果app修改了名字,可能就需要对应的修改报名和类名。
之前有分享到微信,QQ的代码,自行查找,就在上一篇博客。接着写:
新浪微博:
public class ShareToXinlangWeibo {private static final String PackageName = "com.sina.weibo";private static final String ActivityName = "com.sina.weibo.EditActivity";public static void share(Activity activity,String msg, ArrayList 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, "您还没有安装新浪微博!", Toast.LENGTH_SHORT).show();}}
}
易信好友:
public class ShareToYxFriend {//易信好友private static final String PackageName = "im.yixin";private static final String ActivityName = "im.yixin.activity.share.ShareToSessionActivity";//pics are OK。 text is not....public static void share(Activity activity,String msg, ArrayList 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 ShareToYxZone {private static final String PackageName = "im.yixin";private static final String ActivityName = "im.yixin.activity.share.ShareToSnsActivity";//pics are OK。 text is not....public static void share(Activity activity,String msg, ArrayList 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();}}}
ShareUtil:
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.net.Uri;public class ShareUtil {private Context mContext;private Intent mIntent;private ArrayList mActivities &#61; new ArrayList();public ShareUtil(Context context, ArrayList uris){mContext &#61; context;mIntent &#61; computeSharingIntent(uris);loadActivities();}private Intent computeSharingIntent(ArrayList uris) {final Intent intent &#61; new Intent();int size &#61; uris.size();final String mimeType &#61; "image/*";if (size > 1) {intent.setAction(Intent.ACTION_SEND_MULTIPLE).setType(mimeType);intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);} else {intent.setAction(Intent.ACTION_SEND).setType(mimeType);intent.putExtra(Intent.EXTRA_STREAM, uris.get(0));}intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);return intent;}private void loadActivities() {if (mIntent !&#61; null) {mActivities.clear();List resolveInfos &#61; mContext.getPackageManager().queryIntentActivities(mIntent, 0);final int resolveInfoCount &#61; resolveInfos.size();for (int i &#61; 0; i < resolveInfoCount; i&#43;&#43;) {ResolveInfo resolveInfo &#61; resolveInfos.get(i);mActivities.add(new ActivityResolveInfo(resolveInfo));}}}public Intent getBaseIntent(String activityName) {if (mIntent &#61;&#61; null) {return null;}for(int index &#61; 0; index < mActivities.size(); index &#43;&#43;){ActivityResolveInfo chosenActivity &#61; mActivities.get(index);if(activityName.equals(chosenActivity.resolveInfo.activityInfo.name)){ComponentName chosenName &#61; new ComponentName(chosenActivity.resolveInfo.activityInfo.packageName,chosenActivity.resolveInfo.activityInfo.name);Intent choiceIntent &#61; new Intent(mIntent);choiceIntent.setComponent(chosenName);choiceIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);return choiceIntent;}}return null;}// public void startAct(int index) {
// Intent launchIntent &#61; getBaseIntent(index);
// if (launchIntent !&#61; null) {
// launchIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
// mContext.startActivity(launchIntent);
// }
// }/*** Represents an activity.*/public final class ActivityResolveInfo implementsComparable {/*** The {&#64;link ResolveInfo} of the activity.*/public final ResolveInfo resolveInfo;/*** Weight of the activity. Useful for sorting.*/public float weight;/*** Creates a new instance.* * &#64;param resolveInfo* activity {&#64;link ResolveInfo}.*/public ActivityResolveInfo(ResolveInfo resolveInfo) {this.resolveInfo &#61; resolveInfo;}&#64;Overridepublic int hashCode() {return 31 &#43; Float.floatToIntBits(weight);}&#64;Overridepublic boolean equals(Object obj) {if (this &#61;&#61; obj) {return true;}if (obj &#61;&#61; null) {return false;}if (getClass() !&#61; obj.getClass()) {return false;}ActivityResolveInfo other &#61; (ActivityResolveInfo) obj;if (Float.floatToIntBits(weight) !&#61; Float.floatToIntBits(other.weight)) {return false;}return true;}public int compareTo(ActivityResolveInfo another) {return Float.floatToIntBits(another.weight)- Float.floatToIntBits(weight);}&#64;Overridepublic String toString() {StringBuilder builder &#61; new StringBuilder();builder.append("[");builder.append("resolveInfo:").append(resolveInfo.toString());builder.append("; weight:").append(new BigDecimal(weight));builder.append("]");return builder.toString();}}
}