Android 分享實現,微信、微博、騰訊 不同分享方式不同內容

調用系統的分享方式,沒什麼好說的,只說怎麼針對不同的分享方式分享不同內容,demo代碼貼上,有更好方式的哥們可以留言一下。

 


 

/**
 * 分享工具類
 * 
 * @fileName ShareUtil.java
 * @author naibo-liao
 * @CreateTime 2013-4-19 上午11:01:04
 */
public class ShareUtil {
	private List<ResolveInfo> resInfo;
	private PackageManager pm;
	private Map<String, Boolean> noPicApps;
	private SettingManager mSettingManager;
	private static ShareUtil mShareUtil;

	private ShareUtil() {
		mSettingManager = SettingManager.getInstance(GirlApplication
				.getInstance());
		pm = GirlApplication.getInstance().getPackageManager();
		getShareNoPicApps();
	}

	public static ShareUtil getInstance() {
		if (mShareUtil == null) {
			mShareUtil = new ShareUtil();
		}
		return mShareUtil;
	}
	/**
	 * 獲取分享目標
	 * 
	 * @return
	 */
	public List<Intent> getTargetedShareIntents(String picUrl) {
		try {

			String path = FileUtils.copyFile(picUrl);

			File file = new File(path);
			Intent intent = new Intent(Intent.ACTION_SEND);
			intent.setType("text/plain");
			if (null == resInfo) {
				resInfo = pm.queryIntentActivities(intent, 0);
			}
			if (!resInfo.isEmpty()) {
				List<Intent> targetedShareIntents = new ArrayList<Intent>();
				for (ResolveInfo info : resInfo) {
					Intent targeted = new Intent(Intent.ACTION_SEND);

					/**
					 * 以下的代碼大致可以理解爲 獲取本地有分享動作的應用,如微信、微博等,
					 * 根據包名或應用名來分配不同的內容。
					 */
					ActivityInfo activityInfo = info.activityInfo;
					String packageName = activityInfo.packageName;
					PackageInfo pinfo = pm.getPackageInfo(packageName, 0);
					String appName = pinfo.applicationInfo.loadLabel(pm)
							.toString();

					if (null != noPicApps && noPicApps.size() > 0) {
						//需要特別處理分享內容的應用,由服務器派發
						if (noPicApps.containsKey(appName.toUpperCase())) {
							targeted.setType("text/plain");
						} else {
							targeted.setType("image/*");
							targeted.putExtra(Intent.EXTRA_STREAM,
									Uri.fromFile(file));
						}
					} else {
						//需要特別處理分享內容的應用,本地自行判斷,代碼有點多餘了,哈哈
						if (appName.contains("微信") || appName.contains("UC")) {
							targeted.setType("text/plain");
						} else {
							targeted.setType("image/*");
							targeted.putExtra(Intent.EXTRA_STREAM,
									Uri.fromFile(file));
						}
					}

					//分享的文本信息
					targeted.putExtra(Intent.EXTRA_TEXT,
							reconfigurationShareMessage(appName));
					// targeted.setClassName(getApplication(), className);
					targeted.setPackage(packageName);
					targetedShareIntents.add(targeted);
				}
				return targetedShareIntents;
			}
		} catch (Exception e) {
		}
		return null;
	}

	/**
	 * 獲取不需要分享圖片的應用
	 */
	private void getShareNoPicApps() {
		if (noPicApps == null) {
			noPicApps = new HashMap<String, Boolean>();
			if (!TextUtils.isEmpty(mSettingManager.getShareNoPicApps())) {
				String[] strNoPicApps = mSettingManager.getShareNoPicApps()
						.split(",");
				for (int i = 0; i < strNoPicApps.length; i++) {
					noPicApps.put(strNoPicApps[i].toUpperCase(), true);
				}
			}
		}
	}

	/**
	 * 構建分享內容
	 * 
	 * @param appName
	 * @return
	 */
	private String reconfigurationShareMessage(String appName) {
		String message = mSettingManager.getShareMessage();
		String shareUrl = mSettingManager.getShareUrl();
		String encode = "frapp="
				+ URLEncoder.encode(appName)
				+ "&frid="
				+ EncryptUtils.encryptToMD5(NetParameters.IMEI)
						.substring(8, 24);
		if (!TextUtils.isEmpty(shareUrl)) {
			if (shareUrl.contains("?")) {
				shareUrl = shareUrl + "&" + encode;
			} else {
				shareUrl = shareUrl + "?" + encode;
			}
		}
		if (message.contains("{#shareurl#}") && !TextUtils.isEmpty(shareUrl)) {
			return message.replace("{#shareurl#}", shareUrl);
		}
		return message;
	}
}


 

List<Intent> targetedShareIntents = ShareUtil.getInstance()
					.getTargetedShareIntents(picdetail.getPictureurl());
			// 分享框標題
			Intent chooserIntent = Intent.createChooser(
					targetedShareIntents.remove(0), "分享給好友");
			if (chooserIntent == null) {
				return;
			}

			chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS,
					targetedShareIntents.toArray(new Parcelable[]{}));
			chooserIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
			startActivity(chooserIntent);


 

發佈了58 篇原創文章 · 獲贊 78 · 訪問量 74萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章