android 系统分享.(解决微信浏览器分享,分享文字,图片)

时间:2024-04-17 18:57:11

  这次这个项目.用到了分享功能.之前做的项目分享是通过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 &lt;a href=\"http://42.96.192.186/upload/apk/readfishing.apk#weixin.qq.com\"&gt;点击我下载..&lt;/a&gt;\n</string>

其他应用下载内容字符串为:

 <string name="upload_url">"  下载地址: http://42.96.192.186/upload/apk/readfishing.apk</string>

有的读者可能会问,既然第一个download_url_mm字符串解决微信浏览器直接下载问题.就直接用第一个.为什么还要过滤呢..以下是如果用第一种字符串进行分享.在微博内显示.如图1.这样,"点击我下载"是不好用的

 

 而用upload_url字符串.显示效果为:这样直接点击下载链接即可进行apk下载.

 

第一次写技术博客.写的不好.请多多关照.安卓技术没到位.代码不规范.多多保函