此次這個項目.用到了分享功能.以前作的項目分享是經過shareSDK作的.shareSDK集成了不少主流具備分享功能的軟件,簡單幾句代碼就能分享到不一樣渠道,確實很好,也很方便.可是,隨着第三方分享功能的升級,不少經過shareSDK分享一樣也須要在第三方分享平臺申請,驗證.也很麻煩.android
android自帶了系統的分享功能.可快速搜索到手機內具備分享功能的程序.不用去第三方分享平臺驗證.因此此次爲了方便,採用了調用android系統分享來實現其功能.瀏覽器
.....原本想一步一步描述個人過程.可是,因爲時間關係.直接仍是上我最終代碼吧.不少開發者不看過程.只看結果.微信
代碼解決問題以下:1.得到手機內具備分享功能軟件.2.分享文本.3.分享本地圖片.4.解決分享下載連接.再微信內瀏覽器直接分享內容.5.因爲微信分享內容特殊.在普通微博分享後,顯示和連接會有問題.故作了特殊處理.網絡
待解決問題:我想經過此種方式.分享來自於網絡的圖片.(不下載到本地).弄了好久沒實現.求高人指點.url
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 }
上述代碼.可控制過慮程序,監聽具體程序點擊..外部直接調用該類靜態方法.傳入參數便可.spa
剛剛說到微信分享具備下載連接的內容時.打開微信瀏覽器.不能進行直接下載.(多是微信作了特殊保護處理).下載連接地方作以下修改便可.3d
<string name="download_url_mm">下載地址:\n <a href=\"http://42.96.192.186/upload/apk/readfishing.apk#weixin.qq.com\">點擊我下載..</a>\n</string>
其餘應用下載內容字符串爲:code
<string name="upload_url">" 下載地址: http://42.96.192.186/upload/apk/readfishing.apk</string>
有的讀者可能會問,既然第一個download_url_mm字符串解決微信瀏覽器直接下載問題.就直接用第一個.爲何還要過濾呢..如下是若是用第一種字符串進行分享.在微博內顯示.如圖1.這樣,"點擊我下載"是很差用的component
而用upload_url字符串.顯示效果爲:這樣直接點擊下載連接便可進行apk下載.blog
第一次寫技術博客.寫的很差.請多多關照.安卓技術沒到位.代碼不規範.多多保函