Android实现自定义分享功能

  效果图如下:

需求指定应用分享至图片中的5个应用,手机上未安装显示为灰色,点击打开应用市场;安装了点击打开。

在手机上只安装了微信

Android实现自定义分享功能   Android实现自定义分享功能

主要代码如下:

 

	/**

	 * 分享对话框

	 * 

	 * 显示5个排序好的分享app,提示是否安装

	 * 

	 * 需要分享的节目名称

	 * 

	 * @param shareContent

	 */

	public void showShare_5(final String shareContent) {

		dialog = new Dialog(context, R.style.dialog);

		dialog.setContentView(R.layout.dialog_factory_share_5);

		final TextView tv_sina_weibo = (TextView) dialog.findViewById(R.id.tv_sina);

		final TextView tv_renren = (TextView) dialog.findViewById(R.id.tv_renren);

		final TextView tv_tecent_weibo = (TextView) dialog.findViewById(R.id.tv_QQ_weibo);

		final TextView tv_message = (TextView) dialog.findViewById(R.id.tv_message);

		final TextView tv_weixin = (TextView) dialog.findViewById(R.id.tv_weixin);



		final List<AppInfo> shareAppInfos = getShareAppList();



		for (int i = 0; i < shareAppInfos.size(); i++) {

			if ("com.sina.weibo".equals(shareAppInfos.get(i).getAppPkgName())) {

				Drawable add = context.getResources().getDrawable(R.drawable.icon_share_sinaweibo);

				add.setBounds(0, 0, add.getMinimumWidth(), add.getMinimumHeight());

				tv_sina_weibo.setCompoundDrawables(add, null, null, null);// 设置左图标

				tv_sina_weibo.setTag(i);

			}

			if ("com.tencent.WBlog".equals(shareAppInfos.get(i).getAppPkgName())) {

				Drawable add = context.getResources().getDrawable(R.drawable.icon_share_tecent_weibo);

				add.setBounds(0, 0, add.getMinimumWidth(), add.getMinimumHeight());

				tv_tecent_weibo.setCompoundDrawables(add, null, null, null);// 设置左图标

				tv_tecent_weibo.setTag(i);

			}

			if ("com.android.mms".equals(shareAppInfos.get(i).getAppPkgName())) {

				Drawable add = context.getResources().getDrawable(R.drawable.icon_share_message);

				add.setBounds(0, 0, add.getMinimumWidth(), add.getMinimumHeight());

				tv_message.setCompoundDrawables(add, null, null, null);// 设置左图标

				tv_message.setTag(i);

			}

			if ("com.renren.mobile.android".equals(shareAppInfos.get(i).getAppPkgName())) {

				Drawable add = context.getResources().getDrawable(R.drawable.icon_share_renren);

				add.setBounds(0, 0, add.getMinimumWidth(), add.getMinimumHeight());

				tv_renren.setCompoundDrawables(add, null, null, null);// 设置左图标

				tv_renren.setTag(i);

			}

			if ("com.tencent.mm".equals(shareAppInfos.get(i).getAppPkgName())) {

				Drawable add = context.getResources().getDrawable(R.drawable.icon_share_tecent_weixin);

				add.setBounds(0, 0, add.getMinimumWidth(), add.getMinimumHeight());

				tv_weixin.setCompoundDrawables(add, null, null, null);// 设置左图标

				tv_weixin.setTag(i);

			}

		}

		// 直接写死5个分享的应用信息

		final AppInfo app_sina = new AppInfo("com.sina.weibo", "com.sina.weibo.EditActivity");

		final AppInfo app_tx_weibo = new AppInfo("com.tencent.WBlog",

				"com.tencent.WBlog.intentproxy.TencentWeiboIntent");

		final AppInfo app_renren = new AppInfo("com.renren.mobile.android",

				"com.renren.mobile.android.publisher.InputPublisherActivity");

		final AppInfo app_message = new AppInfo("com.android.mms", "com.android.mms.ui.ComposeMessageActivity");

		final AppInfo app_weixin = new AppInfo("com.tencent.mm", "com.tencent.mm.ui.tools.ShareImgUI");



		final String share = context.getString(R.string.dialog_share1) + shareContent

				+ context.getString(R.string.dialog_share2);



		tv_sina_weibo.setOnClickListener(new OnClickListener() {

			@Override

			public void onClick(View v) {

				setOnClick(tv_sina_weibo, app_sina, share);

			}

		});

		tv_renren.setOnClickListener(new OnClickListener() {

			@Override

			public void onClick(View v) {

				setOnClick(tv_renren, app_renren, share);

			}

		});

		tv_tecent_weibo.setOnClickListener(new OnClickListener() {

			@Override

			public void onClick(View v) {

				setOnClick(tv_tecent_weibo, app_tx_weibo, share);

			}

		});

		tv_message.setOnClickListener(new OnClickListener() {

			@Override

			public void onClick(View v) {

				setOnClick(tv_message, app_message, share);

			}

		});

		tv_weixin.setOnClickListener(new OnClickListener() {

			@Override

			public void onClick(View v) {

				setOnClick(tv_weixin, app_weixin, share);

			}

		});

		Button btn_close = (Button) dialog.findViewById(R.id.btn_dialog_close);

		btn_close.setOnClickListener(new Button.OnClickListener() {

			@Override

			public void onClick(View v) {

				dialog.dismiss();

			}

		});

		dialog.show();

	}

AppInfo:

 

 

public class AppInfo {



		private String		AppPkgName;

		private String		AppLauncherClassName;

		private String		AppName;

		private Drawable	AppIcon;



		public AppInfo() {

			super();

		}



		public AppInfo(String appPkgName, String appLauncherClassName) {

			super();

			AppPkgName = appPkgName;

			AppLauncherClassName = appLauncherClassName;

		}



		public String getAppPkgName() {

			return AppPkgName;

		}



		public void setAppPkgName(String appPkgName) {

			AppPkgName = appPkgName;

		}



		public String getAppLauncherClassName() {

			return AppLauncherClassName;

		}



		public void setAppLauncherClassName(String appLauncherClassName) {

			AppLauncherClassName = appLauncherClassName;

		}



		public String getAppName() {

			return AppName;

		}



		public void setAppName(String appName) {

			AppName = appName;

		}



		public Drawable getAppIcon() {

			return AppIcon;

		}



		public void setAppIcon(Drawable appIcon) {

			AppIcon = appIcon;

		}



	}

 

	/**

	 * 查询所有支持分享的应用信息

	 * 

	 * @param context

	 * @return

	 */

	private List<ResolveInfo> getShareApps(Context context) {

		List<ResolveInfo> mApps = new ArrayList<ResolveInfo>();

		Intent intent = new Intent(Intent.ACTION_SEND, null);

		intent.addCategory(Intent.CATEGORY_DEFAULT);

		intent.setType("text/plain");

		PackageManager pManager = context.getPackageManager();

		mApps = pManager.queryIntentActivities(intent, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);

		return mApps;

	}



	/**

	 * 得到应用列表

	 * 

	 * @return

	 */

	private List<AppInfo> getShareAppList() {

		List<AppInfo> shareAppInfos = new ArrayList<AppInfo>();

		PackageManager packageManager = context.getPackageManager();

		List<ResolveInfo> resolveInfos = getShareApps(context);

		if (null == resolveInfos) {

			return null;

		}

		else {

			for (ResolveInfo resolveInfo : resolveInfos) {

				AppInfo appInfo = new AppInfo();

				appInfo.setAppPkgName(resolveInfo.activityInfo.packageName);

				appInfo.setAppLauncherClassName(resolveInfo.activityInfo.name);

				appInfo.setAppName(resolveInfo.loadLabel(packageManager).toString());

				appInfo.setAppIcon(resolveInfo.loadIcon(packageManager));

				shareAppInfos.add(appInfo);

			}

		}

		return shareAppInfos;

	}



 

 

你可能感兴趣的:(android)