先介紹下整個環境:
硬體是android盒子:
系統是Andorid 5.1.1,這些都是廠家定制的。
螢屏就是用一個電腦的顯示幕用介面然后和盒子接起來。
(ps:本人作為稍微得道的一枚小白,要像大佬學習的地方還很多,所以能提供的資訊我都提供下,希望各位大佬能夠為我答疑解惑下,或者各位同仁一起探討學習)
接下來是正文:
原需求:保存檔案至SD卡上(這個簡單,也實作了)。
新需求:現在就是加一個 在保存檔案時候判斷是否有U盤,有的話,往U盤里也保存一份(就像上面那圖一樣,這個android盒子是能接U盤的,我也不清楚這個是否和手機OTG連U盤是一個性質。)
我做了哪些事情:
1.剛拿到需求的時候還覺得很簡單,不就是多寫個路徑保存下嘛。
先去系統自帶的檔案管理器里查看了U盤的路徑


于是就:
private String USB="/mnt/usbdisk";
private boolean saveDrawToFile(Bitmap bitmap, String fileName) {
File dir = new File(USB);
if (!dir.exists()) {
dir.mkdirs();
}
File file = new File(dir, fileName);
return FileWriter.writeBitmap(file, bitmap);
//writeBitmap-------->向指定檔案寫入bitmap
}
結果:不用想失敗了。
2.上面的方法失敗后,我就想或許是我把這個想的太簡單了,有沒可能是路徑的問題,而導致寫入失敗?
于是就:
(各種百度:如何獲取U盤的、外置存盤的路徑)
其中就參考了這篇文章:http://blog.csdn.net/u014587769/article/details/52072608
獲取到了所有的掛載點資訊(ps:第一次知道了這個詞:掛載,雖然貌似到現在還是不太懂啥含義)
我就把獲取到的所有掛載點資訊的地址都取了出來
得到:
/storage/emulated/0
/storage/sdcard1
/storage/usbdisk
/storage/usbdisk2
/storage/usbdisk3
/storage/usbdisk4
疑問就又來了(小白真是走一步一個坎坷吖),為什么用系統的檔案管理器看地址是/mnt/usbdisk 而這里獲取的卻是/storage/usbdisk,mnt和storage什么區別呢? 又上網查了一通,大概有點了解了,然后以為希望來了,心想上面肯定有一個地址就是U盤的了,就把上面的地址都試了一遍。。。
結果:還是失敗了
3.后來又想會不會是其實地址是正確了,只是寫入不成功呢?
為了印證這個想法我就先去讀了下U盤的其中一個檔案,看看是否能讀的到 是不是回傳true
public boolean fileIsExists(String path){
try{
File f=new File(path);
if(!f.exists()){
return false;
}
}catch (Exception e) {
// TODO: handle exception
return false;
}
return true;
}
Toast.makeText(ContextHolder.getContext(),"檔案是否存在--------->"+fileIsExists(USB+File.separator+"copy.bat"),Toast.LENGTH_LONG).show();結果:顯示檔案是存在的,說明說 /storage/usbdisk 這個地址是正確的。
4.感覺離問題的原因越來越近了,最有可能的問題就是沒有寫入權限!!
一開始我以為是不是AndroidMainfest.xml中漏加了什么權限?只要加上后就行。上網查了后
<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE"/>也把這個權限加上了還是不行
后邊我就查:(有關U盤的寫入權限問題),但是網上的方法貌似如出一轍,修改什么system\etc\permissions\platform.xml 檔案啊,修改framework里什么啊,也有說到RE管理器去修改什么啊(ps:難道說要每個安裝這個app的用戶都得到里面去做這些事嗎。。這讓我很不解)雖然到現在我連這些檔案在哪都不知道0.0但是我感覺這些都不是答案,其中也參考了這篇文章也是遇到了相關的問題http://bbs.csdn.net/topics/390259121
5.后來再RE管理器里找到U盤得位置,創建了個檔案夾顯示創建失敗,進一步印證了是沒有寫入權限得問題。RE管理器是提示沒有root權限,后來又回傳來又想了想系統自帶得檔案管理器,我在里面都是可以創建檔案夾,洗掉東西啥操作得。就又去查了如何為單個app增加root權限,也是各種偏底層得方法。(作為小白看這些卻是會有點吃力0.0)
好了。。。。上面寫了那么多,總結下來問題就是:我遇到得這個問題是不是就是沒有寫入權限導致得?沒有寫入權限是否是因為沒有root?那么該怎么辦?或者其實是別的原因導致得? 網上也看了很多資料,有的方法不行,有得看的不是很懂,寫的都是沒頭沒尾得。。還請各位大佬幫忙解惑下,或者有什么思路我們大家一起討論。
問個問題居然不知不覺寫了這么多 排版可能還有點雜 不知道各位大佬是否有耐心看完,在此先謝謝了。
uj5u.com熱心網友回復:
大佬呢
uj5u.com熱心網友回復:
是太長了,都不愛看嗎
uj5u.com熱心網友回復:
自己頂一下。。。uj5u.com熱心網友回復:
直接adb操作能夠創建檔案嗎?另外你寫檔案會報錯嗎?uj5u.com熱心網友回復:
第一個問題。。直接adb操作,沒試過,也不知道怎么操作
第二個,我用系統自帶的檔案管理器寫檔案不會報錯,再RE管理器里創建檔案夾就報錯。是提示沒有root
最后,感謝回復
uj5u.com熱心網友回復:
每日一頂
uj5u.com熱心網友回復:
大佬呢。。
uj5u.com熱心網友回復:
樓主問題解決 了嗎?我最近也要做U盤匯入匯出資料uj5u.com熱心網友回復:
樓主問題解決了嗎,最近也需要做個將檔案寫入到USB外部設備uj5u.com熱心網友回復:
獲取同樣的u盤路徑如果是預制為系統應用是可以的,但是第三方應用就不行uj5u.com熱心網友回復:
一直關注,等待大佬出現uj5u.com熱心網友回復:
提升為系統APP權限,并且簽名uj5u.com熱心網友回復:
請問博主的問題解決了嗎?我也遇到同樣的問題了,感覺是兩種可能 一:獲取到的U盤路徑不對;二:沒有U盤讀寫的權限。uj5u.com熱心網友回復:
Android5.0以上系統已經不支持開發者隨便寫手機的外部存盤(包含tf卡、otg外接u盤等),必須用特定的方法去讀寫,自己搜一下DocumentFile 的使用吧...又或者只能操作固定的目錄:Android/data/包名/...,這里面你可以隨便做操作,不過app刪了,這些資料也會自動刪掉。
uj5u.com熱心網友回復:
和樓主一樣,需要向U盤寫入資料,關注中。。uj5u.com熱心網友回復:
樓主 解決了么 遇到同樣的問題 百度都翻遍了uj5u.com熱心網友回復:
頂上去,讓更多人看到。uj5u.com熱心網友回復:
com.github.mjdev.libaums.fsuj5u.com熱心網友回復:
我也遇到了相關問題,目前還沒解決。首先你這種還有可能是命名的問題:需要按照Google官方給出的規則來創建,即為:外部路徑 + Android + data + 包名 + cache / file + 需要創建的檔案夾名稱;我這里按照上面的路徑可以在U盤格式為ntfs的U盤上創建目錄。但是fat32的不行。不知到樓主你有沒有找到什么合適的辦法uj5u.com熱心網友回復:
樓主你也可以試試是不是U盤和格式的問題uj5u.com熱心網友回復:
可以參考一下,實測可行。https://www.jianshu.com/p/a32e376ea70e轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/130711.html
標籤:Android
