當前位置:首頁 » 安卓系統 » android分享功能實現原理

android分享功能實現原理

發布時間: 2024-01-16 16:45:34

⑴ androidstudio拍照並分享到qq

1、調用相機拍照。
2、對所拍攝的照片進行漏皮處理,比如壓縮圖片大小並保存到指定的路徑上。
3、通過調塌晌用QQ的API來實現分享功能。拍照分享功能可以在分享前讓用戶對照片進行編輯,比如添加濾鏡或加文字,實現將照返衫差片分享到其他社交媒體平台,比如微信、微博等,通過調用系統分享對話框來實現,這樣就可以讓用戶選擇分享到任意應用中。

⑵ 基於android天氣預報開發中的分享功能是怎麼實現的

現在的分享基本上都是現成:

  1. android 自帶分享功能:雖然比較low,而且不同廠家顯示的分享面板可能不一樣,但是功能是可以用的,如果要開發寫高級功能的那麼需要使用到第三方的分享啦

  2. java">/**
    *分享功能
    *
    *@paramcontext上下文
    *@paramactivityTitleActivity的名字
    *@parammsgTitle消息標題
    *@parammsgText消息內容
    *@paramimgPath圖片路徑,不分享圖片則傳null
    */
    publicvoidshareMsg(StringactivityTitle,StringmsgTitle,StringmsgText,
    StringimgPath){
    Intentintent=newIntent(Intent.ACTION_SEND);
    if(imgPath==null||imgPath.equals("")){
    intent.setType("text/plain");//純文本
    }else{
    Filef=newFile(imgPath);
    if(f!=null&&f.exists()&&f.isFile()){
    intent.setType("image/jpg");
    Uriu=Uri.fromFile(f);
    intent.putExtra(Intent.EXTRA_STREAM,u);
    }
    }
    intent.putExtra(Intent.EXTRA_SUBJECT,msgTitle);
    intent.putExtra(Intent.EXTRA_TEXT,msgText);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(Intent.createChooser(intent,activityTitle));
    }
    3. 第三方分享:使用較多的分享->Umeng(友盟),鏈接:http://www.umeng.com/

    4. 第三方分享:使用較多的分享->ShareSDK ,鏈接:http://www.mob.com/

⑶ 利用 Android 系統原生 API 實現分享功能(2)

在之前的一篇文章 利用 Android 系統原生 API 實現分享功能 中主要說了下實現流程,但具體實施起來其實還是有許多坑要面對。那這篇文章就是提供一個封裝好的 Share2 庫供大家參考。

GitHub 項目地址:Share2

看過上一篇文章的同學應該知道,要調用 Android 系統內建的分享功能,主要有三步流程:

更多相關內容請參考上一篇,這里就不再重復贅述了。

知道大致的實現流程後,其實只要解決下面幾個問題後就可以具體實施了。

這其實是直接決定了最終的實現形態,我們知道常見的使用場景中,只是為了在應用間分享圖片和一些文件,那對於那些只是分享文本的產品而言,兩者實現起來要考慮的問題完全不同。

所以為了解決這個問題,我們可以預先定好支持的分享內容類型,針對不同類型可以進行不同的處理。

在 Share2 中,一共定義了5種類別的分享內容,基本能覆蓋常見的使用場景。在調用分享介面時可以直接指定內容類型,比如像文本、圖片、音視頻、已經其他各種類型文件。

對於不同類別的內容,可能會有不同的來源。比如文本可能就只是一個字元串對象,而對於分享圖片或其他文件,我們需要一個 Uri 來標識一個資源。這其實就引出來具體實施時的一個大問題,如何獲取要分享文件的 Uri,並且這個 Uri 要能被接收分享內容的應用處理才行 。

那麼,如何獲取要分享內容文件的 Uri?如果處理才能讓接收方也能夠根據 Uri 獲取到文件?

我們把文件 Uri 的來源劃分為下面三種類型:

常見場景 :通過文件選擇器獲取一個文件的 Uri

通過這種方式獲取到的 Uri 是由系統 ContentProvider 返回的,在 Android 4.4 之前的版本和之後的版本有較大的區別,我們後面再說怎麼處理。只要先記住這種系統返回給我們的 Uri 就行了。

比如調用系統相機進行拍照或錄制音視頻,要傳入一個生成目標文件的 Uri ,從 7.0 開始我們需要用到 FileProvider 來實現。

如果用到了 FileProvider 就要注意跟系統 ContentProvider 返回 Uri 的區別,比如我們在 Manifest 中對 FileProvider 配置 android:authorities="com.xx.xxx.fileProvider" 屬性,那這時系統返回的 Uri 格式就變成了 : content://com.xx.xxx.fileProvider... ,對於這種類型的 Uri 我們姑且叫 自定義 FileProvider 返回的 Uri ,後面一並說怎麼處理。

我們調用 new File 時需要傳入指定的文件路徑,這個絕對路徑通常是: /storage/emulated/0/... 這種樣式,我們要想調用分享時也要變成 Uri 的形式才可以,那麼如何把文件路徑變成一個文件 Uri ?這個問題下面也一並進行回答。

前面提到了文件 Uri 的三種分類,對應不同類型處理方式也不同,不然你最先遇到的問題就是:

這是由於對系統返回的 Uri 缺失訪問許可權導致,所以要對應用進行臨時訪問 Uri 的授權才行,不然會提示許可權缺失。

對於要分享系統返回的 Uri 我們可以這樣進行處理:

需要注意的是對於自定義 FileProvider 返回 Uri 的處理,即使是設置臨時訪問許可權,但是分享到第三方應用也會無法識別該 Uri

典型的場景就是,我們如果把自定義 FileProvider 的返回的 Uri 設置分享到微信或 QQ 之類的第三方應用,會提示文件不存在,這是因為他們無法識別該 Uri。

關於這個問題的處理其實跟下面要說的把文件路徑變成系統返回的 Uri 一樣,我們只需要把自定義 FileProvider 返回的 Uri 變成第三方應用可以識別系統返回的 Uri 就行了。

創建 FileProvider 時需要傳入一個 File 對象,所以直接可以知道文件路徑,那就把問題都轉換成了: 如何通過文件路徑獲取系統返回的 Uri

下面是根據傳入的 File 對象和類型來查詢系統 ContentProvider 來獲取相應的 Uri,已經按照不同文件類型在不同系統版本下的進行了適配。

其中 forceGetFileUri 方法是通過反射實現的,處理 7.0 以上系統的特殊情況下的兼容性,一般情況下不會調用到。Android 7.0 開始不允許 file:// Uri 的方式在不同的 App 間共享文件,但是如果換成 FileProvider 的方式依然是無效的,我們可以通過反射把該檢測幹掉。

通過 File Path 轉成 Uri 的方式,我們最終統一了調用系統分享時傳入內容 Uri 的三種不同場景,最終全部轉換為傳遞系統返回的 Uri,讓第三方應用能夠正常的獲取到分享內容。

Share2 按照上述方法進行了具體實施,可以通過下面的方式進行集成:

分享圖片到指定界面,比如分享到微信朋友圈

GitHub 項目地址:Share2

熱點內容
廣數編程p 發布:2024-11-28 20:38:37 瀏覽:665
sql2008vs2010 發布:2024-11-28 20:38:34 瀏覽:373
編譯plc程序 發布:2024-11-28 20:28:49 瀏覽:916
母嬰源碼 發布:2024-11-28 20:23:13 瀏覽:299
ftp標題下劃線怎麼添加 發布:2024-11-28 20:23:09 瀏覽:793
電腦金鏟鏟之戰伺服器已滿怎麼辦 發布:2024-11-28 20:09:58 瀏覽:618
腳本六要素 發布:2024-11-28 19:41:07 瀏覽:986
linuxoralce 發布:2024-11-28 19:39:51 瀏覽:608
4k存儲量 發布:2024-11-28 19:39:36 瀏覽:825
php動態鏈接 發布:2024-11-28 19:34:16 瀏覽:151