先介绍下整个环境:
硬件是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/3902591215.后来再RE管理器里找到U盘得位置,创建了个文件夹显示创建失败,进一步印证了是没有写入权限得问题。RE管理器是提示没有root权限,后来又返回来又想了想系统自带得文件管理器,我在里面都是可以创建文件夹,删除东西啥操作得。就又去查了如何为单个app增加root权限,也是各种偏底层得方法。(作为小白看这些却是会有点吃力0.0)好了。上面写了那么多,总结下来问题就是:我遇到得这个问题是不是就是没有写入权限导致得?没有写入权限是否是因为没有root?那么该怎么办?或者其实是别的原因导致得? 网上也看了很多资料,有的方法不行,有得看的不是很懂,写的都是没头没尾得。。还请各位大佬帮忙解惑下,或者有什么思路我们大家一起讨论。
问个问题居然不知不觉写了这么多 排版可能还有点杂 不知道各位大佬是否有耐心看完,在此先谢谢了。
第一个问题。。直接adb操作,没试过,也不知道怎么操作
第二个,我用系统自带的文件管理器写文件不会报错,再RE管理器里创建文件夹就报错。是提示没有root最后,感谢回复
又或者只能操作固定的目录:Android/data/包名/...,这里面你可以随便做操作,不过app删了,这些数据也会自动删掉。