這次這個項目.用到了分享功能.之前做的項目分享是通過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下載.
第一次寫技術博客.寫的不好.請多多關照.安卓技術沒到位.代碼不規范.多多保函