編輯:關於android開發
Android做分享功能百度一下就兩種方案,其一是用系統原生的Activity,最終彈出一個對話框,下面這種的還好,像右圖的那種就嫌棄了,上面提供的應用也相對雜,還記得有次測試還給鄙人提了個Bug:建議分享中多列舉常用的App如QQ微信等。


那另外一種方案就彌補了上面兩種不足,使用第三方的,如ShareSDK,可以自定義界面,可以自己決定有哪些課分享的應用展示出來。但是我還是比較懶地嫌棄了,因為每開發一個引用都需要去申請一個Key,引用一堆的包。
所以我還是想找一個集合上面兩種優勢的方案,直到我看了Android原生的圖庫,我就覺得有希望了。最終試驗結果如下

然後就繼續引來更大的一波嫌棄:
還是那樣的難看,比之前更難看。。。。。。。。。。。
可重點是,現在能把這些分享的應用信息都那得到了,並且也可以順利的分享出去了。那剩下的事情就是把界面做得好看一點,把自己不喜歡的那些應用都篩選掉。實際上剩下的我都不做了。單純講講怎麼拿到這些分享信息數據和分享出去。
由於用的是系統原生的分享,故使用Intent是必不可少的,分享圖片和分享文字的分別如下
1 Intent intent=new Intent(Intent.ACTION_SEND);
2
3 intent.setType("image/*");
4
5 intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
6
7 intent.putExtra(Intent.EXTRA_STREAM, uri);
1 Intent intent=new Intent(Intent.ACTION_SEND);
2
3 intent.setType("text/plain");
4
5 intent.putExtra(Intent.EXTRA_TEXT, sharecontentstring);
6
7 intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
與網上眾多的方法相比,對Flags的設置有所不同,其余的還是一樣的,接下來的則是不一樣的
1 List<ResolveInfo> resolveInfo=this.getPackageManager().queryIntentActivities(intent, 0);
2
3 String label;
4
5 Drawable icon;
6
7 ResolveInfo info;
8
9 HashMap<String,Object> item;
10
11 datasource.clear();
12
13 for(int i=0;i<resolveInfo.size();i++)
14
15 {
16
17 item=new HashMap<String,Object>();
18
19 info=resolveInfo.get(i);
20
21 label=info.loadLabel(getPackageManager()).toString();
22
23 icon= info.loadIcon(getPackageManager());
24
25 if(this.appNameMapping.containsKey(info.activityInfo.applicationInfo.packageName))
26
27 item.put("label", this.appNameMapping.get( info.activityInfo.applicationInfo.packageName)+"——"+label);
28
29 else
30
31 item.put("label", label);
32
33 item.put("icon", icon );
34
35 item.put("resolve", resolveInfo.get(i));
36
37 item.put("intent", intent);
38
39 datasource.add(item);
40
41 }
通過Context獲取PackageManager,借助其篩選出符合這種Intent的Activity。得出了ResolveInfo。這個ResolveInfo就包含了分享應用的Activity信息,名稱還有Icon,光靠這些信息就可以分享了,但是鄙人還想直接通過應用名來篩選出不需要顯示在列表中的App,在上述代碼中,appNameMapping就存放著包名和應用名的鍵值對,這個也是通過類似方法獲取的
1 List<ApplicationInfo> listAppcations = this.getPackageManager()
2
3 .getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);
4
5 for(ApplicationInfo info :listAppcations)
6
7 {
8
9 appNameMapping.put(info.packageName, info.loadLabel(getPackageManager()));
10
11 }
當選擇好需要分享的應用後,接下來就執行分享操作了
1 ResolveInfo resolve=(ResolveInfo) datasource.get(index).get("resolve");
2
3 ActivityInfo ai= resolve.activityInfo;
4
5 Intent intent=new Intent((Intent) datasource.get(index).get("intent"));
6
7 intent.setComponent( new ComponentName(ai.applicationInfo.packageName,ai.name) );
8
9 startActivity(intent);
數據就如此被分享出去了。
稍微總結一下,這個方式仍有他的弊端,還沒滿足同時分享圖片和文字,如果能做到那就更好了,或者是對Intent了解還沒夠深入,這個分享調用主要靠的是Intent,另外則是那堆Info類了。當初學習Android時對Intent了解還是很不明不白,Intent終須要徹徹底底地理解一番。本方法暫時未封裝成工具類或組件,各位懂得用的園友們看了也能自己動手做一個,請啊!
【CityHunter】基於LBS的AR體感游戲設計理念,cityhunterar
【CityHunter】基於LBS的AR體感游戲設計理念,cityhunterar 本人目前還不是游戲行業的圈內人士,並不懂得,游戲行業的生態圈,也不懂得,所謂的什麼&l
Android 關於“NetworkOnMainThreadException”,networkonmainthread
Android 關於“NetworkOnMainThreadException”,networkonmainthread網絡收集的原因如下,以及解決辦法: 我補充總結一
android listview 替代品recyclerview詳解,recyclerview使用詳解
android listview 替代品recyclerview詳解,recyclerview使用詳解安卓v7支持包下的ListView替代品—&mdash
微信小程序監控,信小程序監控
微信小程序監控,信小程序監控HotApp小程序統計,第一個專業的微信第三方小程序監控統計工具 1.什麼是HotApp小程序統計 HotApp小程序統計是第一個微信第三方小
Android中使用ExpandableListView實現微信通訊錄界面(完善仿微信APP),expandablelistview
Android中使用ExpandableListView實現微信通訊錄界