Android——App內檔案分享功能
阿新 • • 發佈:2019-02-18
國內的Android開發者,在遇到App內有分享功能時,基本都是對接友盟分享、ShareSDK分享等第三方SDK。簡單的整合SDK以及配置之後,即可分享至多個不同App平臺。反而很少來使用Android系統原生提供的分享功能。
相比整合第三方分享平臺,系統自帶的分享功能的優勢為:
1、將篩選出手機內所有可以接收該分享的App用於分享(使用第三方指定分享到QQ等App時,該手機內可能並沒有安裝QQ軟體)。
2、對分享的內容、型別限制較小(比如可以檔案分享,可以大圖分享等,之前使用第三方分享的時候,圖片大小會有限制,且支援檔案分享的平臺較少)。
3、整合和使用簡便。程式碼在後面給出,程式碼量很少,而且使用系統自帶的功能,讓人放心。
而使用第三方平臺的優勢為:
1、內容只能分享到指定App去,而不是一大堆可選,且能保證分享正確性(比如系統自帶的分享檔案,會有微信朋友圈選項,點選後會提示不支援此種資源)。
2、能統計分享次數(第三方會幫我們統計),分享出去的東西會帶上App屬性(比如一個連結,會顯示是從哪個App分享過來的。原生分享沒試過,不知是否也會帶)。
// 呼叫系統方法分享檔案
public static void shareFile(Context context, File file) {
if (null != file && file.exists()) {
Intent share = new Intent(Intent.ACTION_SEND);
share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
share.setType(getMimeType(file.getAbsolutePath()));//此處可傳送多種檔案
share.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
share.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
context.startActivity(Intent.createChooser(share, "分享檔案" ));
} else {
ToastUtils.showToast("分享檔案不存在");
}
}
// 根據檔案字尾名獲得對應的MIME型別。
private static String getMimeType(String filePath) {
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
String mime = "*/*";
if (filePath != null) {
try {
mmr.setDataSource(filePath);
mime = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_MIMETYPE);
} catch (IllegalStateException e) {
return mime;
} catch (IllegalArgumentException e) {
return mime;
} catch (RuntimeException e) {
return mime;
}
}
return mime;
}