最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android Beam 文件傳輸失敗分析與解決方法

 更新時(shí)間:2017年09月18日 09:18:26   作者:RoidCoder  
最近在修改Android7.0原生平臺(tái)的一些bug,其中有關(guān)Android Beam傳輸文件的一些問(wèn)題還是挺多的。下面小編給大家?guī)?lái)了android beam 文件傳輸失敗的解決方法,一起看看吧

最近在修改Android7.0原生平臺(tái)的一些bug,其中有關(guān)Android Beam傳輸文件的一些問(wèn)題還是蠻多的。所以特地找時(shí)間總結(jié)下曾經(jīng)踏過(guò)的坑。

1.傳輸?shù)奈募形臅r(shí),導(dǎo)致傳輸失敗

可能是由于Google未考慮到本地化差異,導(dǎo)致在傳輸中文文件名的文件時(shí)直接提示傳輸失敗。

packages\apps\Nfc\src\com\android\nfc\beam\MimeTypeUtil.java 

MimeTypeUtil

其實(shí),上面忘了說(shuō)了,只是從文件管理器中進(jìn)入Android Beam分享才會(huì)出現(xiàn)上面的問(wèn)題。因?yàn)楫?dāng)從其他途徑,比如說(shuō)從圖庫(kù)中去分享圖片,由于是通過(guò)content uri(content://com.xx.xxx/xxx)形式分享的,所以并不會(huì)直接包含文件真實(shí)路徑,也就不存在中文問(wèn)題了。

當(dāng)從文件管理器中進(jìn)入Android Beam分享時(shí),是通過(guò)file uri(file://storage/xxx/aa.jpg)形式分享的,在獲取文件的mimeType的時(shí)候會(huì)走 else if 里面的流程。

frameworks\base\core\java\android\webkit\MimeTypeMap.java 

MimeTypeMap

從上面代碼可以看到,在獲取文件后綴名的時(shí)候,在最后對(duì)文件名做了正則匹配,包含中文的文件名肯定匹配失敗,導(dǎo)致最后返回空的后綴,所以也就返回null的mimeType。最終導(dǎo)致了文件傳輸失敗。

既然問(wèn)題找出來(lái)了,修改方法也就比較簡(jiǎn)單了,將上面那一層正則判斷去掉即可;由于這個(gè)是在fwk中的方法,為了不影響其他模塊的調(diào)用。你也可以將整個(gè)方法copy到nfc模塊中,然后將正則判斷去掉。

2.傳輸?shù)奈募厥庾址麜r(shí),導(dǎo)致傳輸失敗

比如文件名包含 “#” 時(shí),會(huì)導(dǎo)致傳輸失敗。其實(shí)這個(gè)問(wèn)題里面包含兩個(gè)問(wèn)題:
(1).從文件管理器中通過(guò)Android Beam分享時(shí),直接傳輸失敗。
其實(shí),這個(gè)問(wèn)題跟上面1中的問(wèn)題也是類(lèi)似的:

frameworks\base\core\java\android\webkit\MimeTypeMap.java 

MimeTypeMap

假如將1中的問(wèn)題修復(fù)了,即下面的正則判斷去除了,最后還是返回null的mimeType,導(dǎo)致傳輸失敗。修復(fù)方法也比較簡(jiǎn)單,將上面的 “#” 處理代碼去除,同時(shí)也需要將下面的正則判斷去除。

(2).修復(fù)了(1)中的問(wèn)題后,測(cè)試了幾下發(fā)現(xiàn)不管是通過(guò)文件管理器還是圖庫(kù)都提示傳輸失敗,不過(guò)跟上面不一樣的是:
通知欄進(jìn)度顯示是傳輸完畢了的,已經(jīng)100%了,但是過(guò)了一會(huì)兒接收端就提示傳輸失敗了,發(fā)送端顯示傳輸成功。

通過(guò)查看,文件也確實(shí)是傳到了接收端,不過(guò)不是在beam目錄下,而是在bluetooth目錄下。我們都知道,Android Beam傳輸文件其實(shí)底層是通過(guò)藍(lán)牙來(lái)實(shí)現(xiàn)傳輸?shù)?。只不過(guò)接收端和發(fā)送端并不需要藍(lán)牙的配對(duì),而是通過(guò)nfc來(lái)建立雙方的連接。

分析代碼流程發(fā)現(xiàn),文件首先傳輸?shù)搅薭luetooth文件夾下,然后通過(guò)renameTo將傳輸?shù)絙luetooth目錄中的文件移動(dòng)到beam目錄下。

packages\apps\Nfc\src\com\android\nfc\beam\BeamTransferManager.java 

BeamTransferManager

所以懷疑在renameTo的時(shí)候出現(xiàn)了異常,log中也印證了這一點(diǎn)。而且srcFile打印的文件路徑中將文件名中的 “#”去除了,所以在bluetooth目錄下就找不到這個(gè)文件了,renameTo當(dāng)然會(huì)失敗。

通過(guò)一步步跟蹤傳遞uri參數(shù)的地方,發(fā)現(xiàn)Bluetooth模塊通過(guò)廣播發(fā)送過(guò)來(lái)的uri是純粹的文件路徑,/storage/emulated/0/bluetooth/weeww#.jpg。所以getScheme返回的是null,調(diào)用uri.getPath的時(shí)候,自動(dòng)將文件路徑中的”#” 去除了。

packages\apps\Nfc\src\com\android\nfc\beam\BeamStatusReceiver.java 

BeamStatusReceiver

解決方法也比較簡(jiǎn)單,我們不調(diào)用uri.getPath就行了,直接將uriString傳進(jìn)構(gòu)造File的參數(shù)中。

packages\apps\Nfc\src\com\android\nfc\beam\BeamStatusReceiver.java 

BeamStatusReceiver

總結(jié)

以上所述是小編給大家介紹的Android Beam 文件傳輸失敗分析與解決方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • android post請(qǐng)求接口demo

    android post請(qǐng)求接口demo

    這篇文章主要為大家詳細(xì)介紹了android post請(qǐng)求接口測(cè)試代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Android應(yīng)用讀取Excel文件的方法

    Android應(yīng)用讀取Excel文件的方法

    這篇文章主要介紹了Android應(yīng)用讀取Excel文件的方法,涉及Android針對(duì)Excel文件的讀寫(xiě)保存等相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-12-12
  • Android編程重寫(xiě)ViewGroup實(shí)現(xiàn)卡片布局的方法

    Android編程重寫(xiě)ViewGroup實(shí)現(xiàn)卡片布局的方法

    這篇文章主要介紹了Android編程重寫(xiě)ViewGroup實(shí)現(xiàn)卡片布局的方法,實(shí)例分析新建FlowLayout繼承ViewGroup類(lèi)及設(shè)置布局文件實(shí)現(xiàn)卡片布局效果的相關(guān)技巧,需要的朋友可以參考下
    2016-02-02
  • Android自定義控件實(shí)現(xiàn)UC瀏覽器語(yǔ)音搜索效果

    Android自定義控件實(shí)現(xiàn)UC瀏覽器語(yǔ)音搜索效果

    這篇文章主要為大家詳細(xì)介紹了Android自定義控件實(shí)現(xiàn)UC瀏覽器語(yǔ)音搜索效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Flutter控件之實(shí)現(xiàn)Widget基類(lèi)的封裝

    Flutter控件之實(shí)現(xiàn)Widget基類(lèi)的封裝

    在實(shí)際的開(kāi)發(fā)中,Widget的基類(lèi)還是很有必要存在的,不然就會(huì)存在很多的冗余嵌套代碼,本文為大家介紹了Flutter中基類(lèi)是如何封裝的,需要的可以收藏一下
    2023-05-05
  • 解析Android數(shù)據(jù)加密之異或加密算法

    解析Android數(shù)據(jù)加密之異或加密算法

    本篇文章主要介紹了Android數(shù)據(jù)加密之異或加密算法,現(xiàn)在分享給大家,也給大家做個(gè)參考。有興趣的可以了解一下。
    2016-11-11
  • Android設(shè)計(jì)登錄界面、找回密碼、注冊(cè)功能

    Android設(shè)計(jì)登錄界面、找回密碼、注冊(cè)功能

    這篇文章主要為大家詳細(xì)介紹了Android設(shè)計(jì)登錄界面的方法,Android實(shí)現(xiàn)找回密碼、注冊(cè)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Android中使用BitmapShader類(lèi)來(lái)制作各種圖片的圓角

    Android中使用BitmapShader類(lèi)來(lái)制作各種圖片的圓角

    這篇文章主要介紹了Android中使用BitmapShader類(lèi)來(lái)制作各種圖片的圓角的方法,文中隨教程講解帶出的例子可以輕松控制圖片圓形的變換,很好很強(qiáng)大,需要的朋友可以參考下
    2016-04-04
  • kotlin中的數(shù)據(jù)轉(zhuǎn)換方法(示例詳解)

    kotlin中的數(shù)據(jù)轉(zhuǎn)換方法(示例詳解)

    這篇文章介紹了Kotlin中將數(shù)字轉(zhuǎn)換為字符串和字符串轉(zhuǎn)換為數(shù)字的多種方法,包括使用`toString()`、字符串模板、格式化字符串、處理可空類(lèi)型等,同時(shí),也詳細(xì)講解了如何安全地進(jìn)行字符串到數(shù)字的轉(zhuǎn)換,并處理了不同進(jìn)制和本地化格式的字符串轉(zhuǎn)換,感興趣的朋友一起看看吧
    2025-03-03
  • 使用Android開(kāi)發(fā)接入第三方原生SDK實(shí)現(xiàn)微信登錄

    使用Android開(kāi)發(fā)接入第三方原生SDK實(shí)現(xiàn)微信登錄

    這篇文章主要介紹了使用Android開(kāi)發(fā)接入第三方原生SDK實(shí)現(xiàn)微信登錄,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03

最新評(píng)論

胶南市| 鸡西市| 长宁县| 灌云县| 新巴尔虎右旗| 赫章县| 石景山区| 故城县| 沙湾县| 府谷县| 巴彦淖尔市| 蛟河市| 海盐县| 台安县| 巢湖市| 上饶县| 利津县| 德清县| 霍城县| 天峻县| 朝阳区| 霸州市| 彭阳县| 沧源| 顺义区| 铜梁县| 宜黄县| 清原| 怀来县| 洛扎县| 镇远县| 富川| 西峡县| 武乡县| 江山市| 会理县| 襄樊市| 堆龙德庆县| 望奎县| 永平县| 辛集市|