利用Android 系統的原生 API 實現分享功能

android快速開發工具類
關於
Fastandrutils 是一套整理修改整合的android開發常用的工具類。
這樣可以減少複製貼上程式碼,從而減少重複程式碼,也不用為了一個常用的功能去谷歌百度,讓程式碼更簡潔,讓開發更高效。
同時希望您的新增完善,讓android開發變得更簡單。

系統的分享介面

自定義分享介面
介紹
改工具類實現了
- 呼叫系統的分享功能
- 自定義分享介面功能
- 可分享文字,檔案,圖片等
- 簡單易用
- 無需接入第三方分享sdk
使用
呼叫系統的分享介面
new FShare.FShareBuilder(FShareActivity.this, null) .setShareContent("0000") .setShareSubject("dddd") .build() .shareBySystem();
呼叫自定義的分享介面
new FShare.FShareBuilder(FShareActivity.this, "cn.hotapk.goodfilemanager.fileprovider") .setShareContent("0000") .setShareSubject("dddd") //.setShareFilter(new String[]{"com.tencent.mm", "cn.andouya", "com.qihoo360.feichuan", "com.lenovo.anyshare", "com.sand.airdroid"}) .build() .shareByCustom();
引數說明
引數 | 說明 |
---|---|
mActivity | FragmentActivity |
shareFilter | 顯示你想要分享出去的應用的包名類別 |
filePath | 檔案路徑 |
topTitle | 顯示標題 |
shareContent | 分享的內容 |
shareSubject | 分享的主題 |
authorities | Android7.0的檔案許可權 的FileProvider AndroidManifest.xml provider下配置的名稱 |
requestCode | startActivityForResult 回撥 |
componentNames | ComponentName列表 |
關鍵程式碼
指定分享到某個應用
private Intent getIntent(ComponentName componentName, String mimeType, Uri uri) { Intent shareIntent = new Intent(Intent.ACTION_SEND); if (componentName != null) { shareIntent.setComponent(componentName); } shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); shareIntent.setType(mimeType); if (uri != null) { shareIntent.putExtra(Intent.EXTRA_STREAM, uri); } shareIntent.putExtra(Intent.EXTRA_TEXT, shareContent); shareIntent.putExtra(Intent.EXTRA_SUBJECT, shareSubject); return shareIntent; }
獲取所有支援分享的應用
List<ShareBean> shareBeans = new ArrayList<>(); Intent intent = new Intent(Intent.ACTION_SEND); intent.setType(mimeType); List<ResolveInfo> resolveInfos = getActivity().getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); for (int i = 0; i < resolveInfos.size(); i++) { ResolveInfo resolveInfo = resolveInfos.get(i); PackageManager pm = getActivity().getApplication().getPackageManager(); ActivityInfo activityInfo = resolveInfo.activityInfo; ShareBean shareBean = new ShareBean(); shareBean.setAppName(activityInfo.loadLabel(pm).toString()); shareBean.setPackageName(activityInfo.packageName); shareBean.setClassName(activityInfo.name); shareBean.setIcon(activityInfo.loadIcon(pm)); if (shareFilter != null && shareFilter.length > 0) { for (int j = 0; j < shareFilter.length; j++) { if (shareBean.getPackageName().equals(shareFilter[j])) { shareBeans.add(shareBean); } } } else { shareBeans.add(shareBean); } }