怎樣生成一個文件的uri
❶ 利用 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
❷ .net 如何生成URL編碼
1.網液閉頁裡面的話,直接派埋改就用Server.UrlEncode就塵判好了
2.WinForm裡面,可以引用System.Web,然後使用 System.Web.HttpUtility.UrlEncode()
❸ android 7.0 調用相機FileProvider生成的URI,作為相機開發的接收者,怎麼使用URI
android 7.0以租旅上, 禁止使用Uri中包含一個文件的絕對路徑, 必須弊答凳要使用content方舉橋式傳遞文件路徑
❹ c# 如何獲取字元串中域名
用這個串生成一個uri對象,然後從uri對象可以得到所有分解的部分。
Uri u = new Uri("http://www..com/sasasasas/fdfddfx.php");
string sHost = u.Host;
string sPort = u.Port;
還有以下的屬性可用:
名稱 說明
AbsolutePath 獲取 URI 的絕對路徑。
AbsoluteUri 獲取絕對 URI。
Authority 獲取伺服器的域名系統 (DNS) 主機襲手名或 IP 地址和埠號。
DnsSafeHost 獲得可安全用於 DNS 解析的未轉義主機名。
Fragment 獲取轉義 URI 片段。
Host 獲取此實例的主機部分。
HostNameType 獲取 URI 中指定的主機名的類型。
IsAbsoluteUri 獲取一個值,該值指示 Uri 實例是否為絕對 URI。
IsDefaultPort 獲取一個值,該值指示 URI 的埠值是否為此方案的默認值。
IsFile 獲取一個值,該值指示指定的 Uri 是否為文件 URI。
IsLoopback 獲取一個值,該值指示指定的 Uri 是否引用了本地亂禪輪主機。
IsUnc 獲取一個值,該值指示指定的 Uri 是否為統一命名約定 (UNC) 路徑。
LocalPath 獲取文件名的本地操作系統表示形式。
OriginalString 獲取傳遞給 Uri 構造函數的原始 URI 字元串。
PathAndQuery 獲取用問號 (?) 分隔的 AbsolutePath 和 Query 屬性。
Port 獲取此 URI 的埠號。
Query 獲取指定 URI 中包括的任何查詢信息。
Scheme 獲取此 URI 的方嘩信案名稱。
Segments 獲取包含構成指定 URI 的路徑段的數組。
UserEscaped 指示 URI 字元串在創建 Uri 實例之前已被完全轉義。
UserInfo 獲取用戶名、密碼或其他與指定 URI 關聯的特定於用戶的信息。
❺ flash的URL是什麼意思,URL是怎麼生成的呀
分類: 教育/科學 >> 學習幫助
解析:
就是鏈接地址,是自己寫的啊
URL:
URL是Uniform Resource Location的縮寫,譯為「統一資源定位符」。通俗地說,URL是Inter上用來描述信息資源的字元串,主要用在各種WWW客戶程序和伺服器程序上,特別是著名的Mosaic。採用URL可以用一種統一的格式來描述各種信息資源,包括文件、伺服器的地址和目錄等。
URL的格式URL的格式由下列三部分組成:
第一部分是協議(或稱為服務方式);
第二部分是存有該資源的主機IP地址(有時也包括埠號);
第三部分是主機資源的具體地址。,如目錄和文件名等。
第一部分和第二部分之間用「:」符號隔開,第二部分和第三部分用「/」符號隔開。第一部分和第二部分是不可缺少的,第三部分有時春配可以省略。
URL示例
文件的URL: 用URL表示文件時,伺服器方式用file表示,後面要有主機IP地址、文件的存取路徑(即目錄)和文件名等信息。有時可以省略目錄和文件名,但「/」符號不能省略。
例一:fileftp.linkwan/pub/files/foobar.txt
代表存放主機ftp.linkwan上的pub/files/目錄下的一個文件,文件名是foobar.txt。
例二:fileftp.linkwan/pub
代表扒廳指主機ftp.linkwan上的目錄/pub。
例三:fileftp.linkwan/
代表主機ftp.linkwan上的根目錄。
Gopher的URL: Gopher伺服器有可能使用特殊的埠,在這種情況下,主機IP地址與埠之間要用「:隔開。
例一:gophergopher.linkwan/
表示主機gopher.linkwan上的gopher伺服器。
例二:gophergopher.banzai.e:1234
表示主機gopher.banzai.e上的gopher伺服器,在埠1234上。
網路新聞的URL: 利用URL表示網路新聞組時,如果是use的話只要指定出新聞組的名字即可。
例如:news:rec.gardening
表示use上的rec.gardening新聞組(園藝)。
HTTP的 URL:
使用超級文本傳輸協議HTTP,提供超級文本信息服務的資源。
例一:linkwan/111/wele
其計算機域名為linkwan。超級文本文件(文伏游件類型為)是在目錄/111下的wele。
例二:linkwan/talk/talk1
其其計算機域名為linkwan。超級文本文件(文件類型為)是在目錄/talk下的talk1。這是瑞得聊天室的地址,可由此進入瑞得聊天室的第1室。
URL的缺點
最大的缺點:當信息資源的存放地點發生變化時,必須對URL作相應的改變。因此人們正在研究新的信息資源表示方法,例如:URI(Universal Resource Identifier)即「通用資源標識」(參見RFC 1630)、URN(Uniform Resource Name)即「統一資源名」和URC(Uniform Resource Citation)即「統一資源引用符」等。