Android访问系统文件

2021-12-09  本文已影响0人  海东青_fb7a

存储在internal storage:这是你app私有的目录,你的shared preference文件数据库文件都在这里。目录为"data/data/<package name>/file/.." 访问方法为: File fdir=gerFilesDir();

存储在external storage:这类文件存在在"mnt/sdacard/Android/data/<package name>/file/.."目录下。随app的删除而删除。

获取这个路径的方法:File eFile=getExternalFilesDir(null);

有些时候我们的手机没有安装SD卡,所以我们使用前需要判断一下:

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {//SD卡已装入}

访问方式:

(1)File sdCard=Environment.getExternalStorageDirectory();这个路径为sd卡的根路径mnt/sdcard

(2)File directory_pictures = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
这个路径为sd卡的根路径mnt/sdcard/PICTURES/...
对于这类文件,Android给我们提供了特定的目录,这些目录都是以DIRECTORY开头的,例如:DIRECTORY_MUSIC , DIRECTORY_PICTURES。

(1)应用专属目录

//分区存储空间
val file = File(context.filesDir, filename) 
//应用专属外部存储空间
val appSpecificExternalDir = File(context.getExternalFilesDir(), filename) 

(2)访问公共媒体目录文件

val cursor = contentResolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null, "${MediaStore.MediaColumns.DATE_ADDED} desc")
if (cursor != null) {    
    while (cursor.moveToNext()) {        
        val id = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns._ID))        
        val uri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id)        
        println("image uri is $uri")    
    }    
    cursor.close()
} 

(3)SAF(存储访问框架--Storage Access Framework)

val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)    
intent.addCategory(Intent.CATEGORY_OPENABLE)    
intent.type = "image/*"    
startActivityForResult(intent, 100)     

@RequiresApi(Build.VERSION_CODES.KITKAT)    
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {        
    super.onActivityResult(requestCode, resultCode, data)        
    if (data == null || resultCode != Activity.RESULT_OK) 
        return        
    if (requestCode == 100) {            
        val uri = data.data            
        println("image uri is $uri")        
    }    
} 

(4)所有文件访问权限

<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />     
val intent = Intent()    
intent.action= Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION    
startActivity(intent)     
//判断是否获取MANAGE_EXTERNAL_STORAGE权限:    
val isHasStoragePermission= Environment.isExternalStorageManager()

上一篇 下一篇

猜你喜欢

热点阅读