这次这个项目.用到了分享功能.之前做的项目分享是通过shareSDK做的.shareSDK集成了很多主流具有分享功能的软件,简单几句代码就能分享到不同渠道,确实很好,也很方便.但是,随着第三方分享功能的升级,很多通过shareSDK分享同样也需要在第三方分享平台申请,验证.也很麻烦.
android自带了系统的分享功能.可快速搜索到手机内具有分享功能的程序.不用去第三方分享平台验证.所以这次为了方便,采用了调用android系统分享来实现其功能.
.....本来想一步一步描述我的过程.但是,由于时间关系.直接还是上我最终代码吧.很多开发者不看过程.只看结果.
代码解决问题如下:1.获得手机内具有分享功能软件.2.分享文本.3.分享本地图片.4.解决分享下载链接.再微信内浏览器直接分享内容.5.由于微信分享内容特殊.在普通微博分享后,显示和链接会有问题.故做了特殊处理.
待解决问题:我想通过此种方式.分享来自于网络的图片.(不下载到本地).弄了很久没实现.求高人指点.
1 public class Share { 2 public static void shareMsg(Context context, String activityTitle, String msgTitle, String content, String imgPath) { 3 Intent intent = new Intent(Intent.ACTION_SEND); 4 if (imgPath == null || imgPath.equals("")) { 5 intent.setType("text/plain"); // 纯文本 6 } else { 7 File f = new File(imgPath); 8 if (f != null && f.exists() && f.isFile()) { 9 intent.setType("image/png"); 10 Uri u = Uri.fromFile(f); 11 intent.putExtra(Intent.EXTRA_STREAM, u); 12 } 13 } 14 intent.putExtra(Intent.EXTRA_SUBJECT, msgTitle); 15 // gets the list of intents that can be loaded. 16 boolean isWeixin = false; 17 List<ResolveInfo> resInfos = context.getPackageManager().queryIntentActivities(intent, 0); 18 List<Intent> targetedShareIntents = new ArrayList<Intent>(); 19 for (ResolveInfo info : resInfos) { 20 Intent targeted = new Intent(Intent.ACTION_SEND); 21 targeted.setType("text/plain"); 22 ActivityInfo activityInfo = info.activityInfo; 23 // judgments : activityInfo.packageName, activityInfo.name, etc. 24 String packageName = activityInfo.packageName.toLowerCase(); 25 if (packageName.contains("bluetooth") || packageName.contains("bluetooth")) { 26 continue; 27 } 28 String msgText = content; 29 if (packageName.contains("com.tencent.mm")) { 30 String msgText1 = context.getString(R.string.download_url_mm); 31 msgText += msgText1; 32 } else { 33 String msgText2 = context.getString(R.string.download_url); 34 msgText += msgText2; 35 } 36 targeted.putExtra(Intent.EXTRA_TEXT, msgText); 37 targeted.setPackage(activityInfo.packageName); 38 targetedShareIntents.add(targeted); 39 } 40 Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), "分享到:"); 41 if (chooserIntent == null) { 42 return; 43 } 44 45 chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[] {})); 46 try { 47 context.startActivity(chooserIntent); 48 } catch (android.content.ActivityNotFoundException ex) { 49 Toast.makeText(context, "Can\'t find share component to share", Toast.LENGTH_SHORT).show(); 50 } 51 52 }
上述代码.可控制过虑程序,监听具体程序点击..外部直接调用该类静态方法.传入参数即可.
刚刚说到微信分享具有下载链接的内容时.打开微信浏览器.不能进行直接下载.(可能是微信做了特殊保护处理).下载链接地方做如下修改即可.
<string name="download_url_mm">下载地址:\n <a href=\"http://42.96.192.186/upload/apk/readfishing.apk#weixin.qq.com\">点击我下载..</a>\n</string>
其他应用下载内容字符串为:
<string name="upload_url">" 下载地址: http://42.96.192.186/upload/apk/readfishing.apk</string>
有的读者可能会问,既然第一个download_url_mm字符串解决微信浏览器直接下载问题.就直接用第一个.为什么还要过滤呢..以下是如果用第一种字符串进行分享.在微博内显示.如图1.这样,"点击我下载"是不好用的
而用upload_url字符串.显示效果为:这样直接点击下载链接即可进行apk下载.
第一次写技术博客.写的不好.请多多关照.安卓技术没到位.代码不规范.多多保函