Android文件系统入门知识
内外存储的由来:因为历史原因,老版本的Android手机可用容量小, 加载外部存储设备以便加大容量, 如sdcard. 后来随着技术的不断提高, 手机本身的容量逐渐加大, 但是这个分法一直保留了下来.
二者区别
内部存储
不需要权限
其它APP不可访问, 用户也不能操作
卸载APP时会移除内部存储数据
外部存储
首先要确认可访问性, 因为外部存储可卸载
其它APP可以访问
需要权限
1
| <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
*内部存储简单介绍**
所在路径: Android 6.0在/data/user/0/package_name/
其它版本也对应在/data/下的某个地方, 以包名作为区分, 未root的文件管理中查看不了
使用:
在继承自ContextWrapper中, 如Activity, Application
1 2 3 4 5 6 7 8 9 10 11 12
| File file = getFilesDir();
String inPath = file.getAbsolutePath();
Log.d("test-file","getFileDir:"+ inPath);
FileOutputStream fileOutputStream = openFileOutput("hello.txt", MODE_PRIVATE); fileOutputStream.write("hello".getBytes());
fileOutputStream.close();
|
外部存储简单介绍
通过android.os包中的Environment类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
public boolean isExternalStorageWritable() { String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { return true; } return false; }
public boolean isExternalStorageReadable() { String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { return true; } return false; }
Environment.getExternalStorageDirectory();
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC));
|
得到File对象后, 你就可以为所欲为
File类
###共享数据
记得第一份工作面试的时候被问了一个问题:如何自己实现类似友盟分享功能?
当时回答的很含糊, 现在再来看, 就是通过Intent来定义分享action, 遍历所有的APP, 显示符合这个action的应用, 按规则启动隐式Intent