• Android实现自定义分享功能


      效果图如下:

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

    在手机上只安装了微信

       

    主要代码如下:

    	/**
    	 * 分享对话框
    	 * 
    	 * 显示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;
    	}



  • 相关阅读:
    分别使用vue和react创建一个可伸缩的树
    渲染一颗树(分别使用vue和react创建)
    n皇后问题JS实现(N-Queens)
    中序遍历二叉树(js)
    LeetCode 258 Add Digits
    js二维数组去重
    js 数组中sort方法存在的问题
    原生js实现一个简单轮播效果
    原生js实现一个连连看小游戏(三)-----------点击列表获取索引
    js生成随机不重复数字的几种方法
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/2981372.html
Copyright © 2020-2023  润新知