十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
我周末剛研究過(guò)。新版的ES文件瀏覽器已有“遠(yuǎn)程設(shè)置”功能,就是\x0d\x0a文件共享。實(shí)際就是ftp服務(wù)端,端口3721,協(xié)義就是ftp協(xié)義。\x0d\x0a與PC的ftp是一樣的協(xié)議。\x0d\x0a將ES的瀏覽器的“遠(yuǎn)程文件訪問(wèn)”勾上,就可讓PC通過(guò)無(wú)線WIFI訪問(wèn)SD卡了。\x0d\x0a訪問(wèn)路徑,手機(jī)上會(huì)顯示的!
創(chuàng)新互聯(lián)建站主營(yíng)來(lái)賓網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都App定制開發(fā),來(lái)賓h5微信平臺(tái)小程序開發(fā)搭建,來(lái)賓網(wǎng)站營(yíng)銷推廣歡迎來(lái)賓等地區(qū)企業(yè)咨詢
在之前的一篇文章 利用 Android 系統(tǒng)原生 API 實(shí)現(xiàn)分享功能 中主要說(shuō)了下實(shí)現(xiàn)流程,但具體實(shí)施起來(lái)其實(shí)還是有許多坑要面對(duì)。那這篇文章就是提供一個(gè)封裝好的 Share2 庫(kù)供大家參考。
GitHub 項(xiàng)目地址:Share2
看過(guò)上一篇文章的同學(xué)應(yīng)該知道,要調(diào)用 Android 系統(tǒng)內(nèi)建的分享功能,主要有三步流程:
更多相關(guān)內(nèi)容請(qǐng)參考上一篇,這里就不再重復(fù)贅述了。
知道大致的實(shí)現(xiàn)流程后,其實(shí)只要解決下面幾個(gè)問(wèn)題后就可以具體實(shí)施了。
這其實(shí)是直接決定了最終的實(shí)現(xiàn)形態(tài),我們知道常見的使用場(chǎng)景中,只是為了在應(yīng)用間分享圖片和一些文件,那對(duì)于那些只是分享文本的產(chǎn)品而言,兩者實(shí)現(xiàn)起來(lái)要考慮的問(wèn)題完全不同。
所以為了解決這個(gè)問(wèn)題,我們可以預(yù)先定好支持的分享內(nèi)容類型,針對(duì)不同類型可以進(jìn)行不同的處理。
在 Share2 中,一共定義了5種類別的分享內(nèi)容,基本能覆蓋常見的使用場(chǎng)景。在調(diào)用分享接口時(shí)可以直接指定內(nèi)容類型,比如像文本、圖片、音視頻、已經(jīng)其他各種類型文件。
對(duì)于不同類別的內(nèi)容,可能會(huì)有不同的來(lái)源。比如文本可能就只是一個(gè)字符串對(duì)象,而對(duì)于分享圖片或其他文件,我們需要一個(gè) Uri 來(lái)標(biāo)識(shí)一個(gè)資源。這其實(shí)就引出來(lái)具體實(shí)施時(shí)的一個(gè)大問(wèn)題,如何獲取要分享文件的 Uri,并且這個(gè) Uri 要能被接收分享內(nèi)容的應(yīng)用處理才行 。
那么,如何獲取要分享內(nèi)容文件的 Uri?如果處理才能讓接收方也能夠根據(jù) Uri 獲取到文件?
我們把文件 Uri 的來(lái)源劃分為下面三種類型:
常見場(chǎng)景 :通過(guò)文件選擇器獲取一個(gè)文件的 Uri
通過(guò)這種方式獲取到的 Uri 是由系統(tǒng) ContentProvider 返回的,在 Android 4.4 之前的版本和之后的版本有較大的區(qū)別,我們后面再說(shuō)怎么處理。只要先記住這種系統(tǒng)返回給我們的 Uri 就行了。
比如調(diào)用系統(tǒng)相機(jī)進(jìn)行拍照或錄制音視頻,要傳入一個(gè)生成目標(biāo)文件的 Uri ,從 7.0 開始我們需要用到 FileProvider 來(lái)實(shí)現(xiàn)。
如果用到了 FileProvider 就要注意跟系統(tǒng) ContentProvider 返回 Uri 的區(qū)別,比如我們?cè)?Manifest 中對(duì) FileProvider 配置 android:authorities="com.xx.xxx.fileProvider" 屬性,那這時(shí)系統(tǒng)返回的 Uri 格式就變成了 : content://com.xx.xxx.fileProvider... ,對(duì)于這種類型的 Uri 我們姑且叫 自定義 FileProvider 返回的 Uri ,后面一并說(shuō)怎么處理。
我們調(diào)用 new File 時(shí)需要傳入指定的文件路徑,這個(gè)絕對(duì)路徑通常是: /storage/emulated/0/... 這種樣式,我們要想調(diào)用分享時(shí)也要變成 Uri 的形式才可以,那么如何把文件路徑變成一個(gè)文件 Uri ?這個(gè)問(wèn)題下面也一并進(jìn)行回答。
前面提到了文件 Uri 的三種分類,對(duì)應(yīng)不同類型處理方式也不同,不然你最先遇到的問(wèn)題就是:
這是由于對(duì)系統(tǒng)返回的 Uri 缺失訪問(wèn)權(quán)限導(dǎo)致,所以要對(duì)應(yīng)用進(jìn)行臨時(shí)訪問(wèn) Uri 的授權(quán)才行,不然會(huì)提示權(quán)限缺失。
對(duì)于要分享系統(tǒng)返回的 Uri 我們可以這樣進(jìn)行處理:
需要注意的是對(duì)于自定義 FileProvider 返回 Uri 的處理,即使是設(shè)置臨時(shí)訪問(wèn)權(quán)限,但是分享到第三方應(yīng)用也會(huì)無(wú)法識(shí)別該 Uri
典型的場(chǎng)景就是,我們?nèi)绻炎远x FileProvider 的返回的 Uri 設(shè)置分享到微信或 QQ 之類的第三方應(yīng)用,會(huì)提示文件不存在,這是因?yàn)樗麄儫o(wú)法識(shí)別該 Uri。
關(guān)于這個(gè)問(wèn)題的處理其實(shí)跟下面要說(shuō)的把文件路徑變成系統(tǒng)返回的 Uri 一樣,我們只需要把自定義 FileProvider 返回的 Uri 變成第三方應(yīng)用可以識(shí)別系統(tǒng)返回的 Uri 就行了。
創(chuàng)建 FileProvider 時(shí)需要傳入一個(gè) File 對(duì)象,所以直接可以知道文件路徑,那就把問(wèn)題都轉(zhuǎn)換成了: 如何通過(guò)文件路徑獲取系統(tǒng)返回的 Uri
下面是根據(jù)傳入的 File 對(duì)象和類型來(lái)查詢系統(tǒng) ContentProvider 來(lái)獲取相應(yīng)的 Uri,已經(jīng)按照不同文件類型在不同系統(tǒng)版本下的進(jìn)行了適配。
其中 forceGetFileUri 方法是通過(guò)反射實(shí)現(xiàn)的,處理 7.0 以上系統(tǒng)的特殊情況下的兼容性,一般情況下不會(huì)調(diào)用到。Android 7.0 開始不允許 file:// Uri 的方式在不同的 App 間共享文件,但是如果換成 FileProvider 的方式依然是無(wú)效的,我們可以通過(guò)反射把該檢測(cè)干掉。
通過(guò) File Path 轉(zhuǎn)成 Uri 的方式,我們最終統(tǒng)一了調(diào)用系統(tǒng)分享時(shí)傳入內(nèi)容 Uri 的三種不同場(chǎng)景,最終全部轉(zhuǎn)換為傳遞系統(tǒng)返回的 Uri,讓第三方應(yīng)用能夠正常的獲取到分享內(nèi)容。
Share2 按照上述方法進(jìn)行了具體實(shí)施,可以通過(guò)下面的方式進(jìn)行集成:
分享圖片到指定界面,比如分享到微信朋友圈
GitHub 項(xiàng)目地址:Share2
訪問(wèn)方法如下:
1,按 Win+R 打開運(yùn)行,輸入 service.msc 并回車打開。
2,確認(rèn)其中Server與Windows Media Player Network Sharing Service這兩項(xiàng)服務(wù)是啟動(dòng)的。
3,打開:控制面板——用戶賬戶和家庭安全——用戶賬戶——管理其他賬戶。
4,點(diǎn)擊“ Guest帳戶 ”。
5,點(diǎn)擊“ 啟用 ”,開啟系統(tǒng)來(lái)賓賬戶,使安卓設(shè)備訪問(wèn)pc時(shí)不用輸入用戶名和密碼即可訪問(wèn),因?yàn)樘幱谕患彝ゾ钟蚓W(wǎng),因此不用擔(dān)心安全性。
6,打開需要共享的文件夾屬性,在“ 共享 ”選項(xiàng)卡下,點(diǎn)擊“ 共享 ”按鈕。
7,在下拉列表里選擇Guest帳戶,并點(diǎn)擊“ 添加 ”。
8,確定后返回,點(diǎn)擊“ 網(wǎng)絡(luò)和共享中心 ”。
9,在高級(jí)共享設(shè)置中,選擇“ 啟用網(wǎng)絡(luò)發(fā)現(xiàn) ”、“ 啟用文件和打印機(jī)共享 ”、“ 啟用共享以便可以訪問(wèn)網(wǎng)絡(luò)的用戶可以讀取和寫入公用文件夾中的文件 ”。
10,確認(rèn)“ 媒體流已打開 ”和“ 關(guān)閉密碼保護(hù)共享 ”,然后單擊“ 保存修改 ”。
對(duì)于其他手機(jī)可能就無(wú)能為力了,但是強(qiáng)大的android手機(jī)還可以通過(guò)WIFI與電腦間共享文件,android手機(jī)有wifi功能,現(xiàn)在絕大部分筆記本及電腦有自帶wifi功能,使用wifi速度快且操作簡(jiǎn)便。下面就來(lái)說(shuō)說(shuō)怎么共享吧!
1、先確定手機(jī)已經(jīng)和家中或者公司無(wú)線網(wǎng)絡(luò)連接成功(這步有用wifi的機(jī)友一般都不用設(shè)置了),如果沒連接的,去手機(jī)設(shè)置-無(wú)線和網(wǎng)絡(luò)-WIFI設(shè)置中選擇自己的無(wú)線網(wǎng)絡(luò)進(jìn)行連接。電腦也要連上無(wú)線網(wǎng)絡(luò)哦,而且要和手機(jī)連的WIFI網(wǎng)絡(luò)是同一個(gè),要不然就無(wú)法連接了。
2、在手機(jī)端安裝名為EStrongs File Explorer的文件瀏覽器(后面簡(jiǎn)稱ES文件管理器),該文件管理器是免費(fèi)的,支持中文,而且功能相當(dāng)強(qiáng)大。
3、在手機(jī)端打開ES文件瀏覽器,然后在菜單中選擇顯示標(biāo)簽
4、此時(shí)在軟件的上方就會(huì)看到三個(gè)標(biāo)簽,有本地,共享和遠(yuǎn)程,本地代表的就是您手機(jī)中的文件,共享就是我們下面要用到的,而遠(yuǎn)程則是FTP遠(yuǎn)程文件,一般高級(jí)用戶才會(huì)用到,這里就不多做介紹了。
5、進(jìn)入共享后會(huì)看到如下的界面,什么也沒有,這時(shí)需要我們來(lái)新建了,屏幕中央也給出了相應(yīng)的操作提示。
6、打開程序的菜單,在菜單中選擇新建選項(xiàng)
7、在彈出的菜單中選擇搜索,這樣比較省事,如果您比較在行,也可以選擇服務(wù)器自己手動(dòng)新建。
8、選擇搜索后,稍等片刻,這時(shí)候就會(huì)搜索到與wifi網(wǎng)絡(luò)相連接的'電腦IP,如果您是在家中,只有自己的電腦在連接,那就只會(huì)搜到一個(gè),演示時(shí)我是在公共網(wǎng)絡(luò),所以會(huì)搜到很多和該wifi連接的IP,只需找到自己電腦相應(yīng)的IP打開即可。
9、例如我的電腦IP是192.168.1.1,只需雙擊192.168.1.1的電腦圖標(biāo),這時(shí)候就可以看到電腦已經(jīng)共享的文件夾名稱,如下圖
10、最后一步要做的就是將需要的文件進(jìn)行復(fù)制和粘貼的操作了,選擇需要的文件,然后復(fù)制粘貼到您手機(jī)本地的內(nèi)存卡中,這樣就算完成了!
建議自己組網(wǎng),如群暉,掛在路由器下面就行,共享不是問(wèn)題的。
安卓手機(jī)和psv互聯(lián)并實(shí)現(xiàn)文件共享或傳輸方法: 1、用Android手機(jī)開熱點(diǎn)傳輸,給手機(jī)下一個(gè) wifi file explore 然后手機(jī)開熱點(diǎn)。psv接入然后用psv瀏覽器查看手機(jī)文件然后下載下來(lái); 2、看見一個(gè)局域網(wǎng)的網(wǎng)址記下來(lái); 3、用psv登錄后找到自己要傳輸?shù)奈募?4、然后就可以下載了。