android 系統分享.(解決微信瀏覽器分享,分享文字,圖片)


  這次這個項目.用到了分享功能.之前做的項目分享是通過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下載.

 

第一次寫技術博客.寫的不好.請多多關照.安卓技術沒到位.代碼不規范.多多保函


 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM