1. 程式人生 > >Android——App內檔案分享功能

Android——App內檔案分享功能

國內的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; }