日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

【错误记录】Android 低版本使用分区存储错误 ( 低版本存储不得使用 MediaStore )

發(fā)布時間:2025/6/17 Android 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【错误记录】Android 低版本使用分区存储错误 ( 低版本存储不得使用 MediaStore ) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 一、報錯信息
  • 二、解決方案


Android 低版本系統(tǒng)中不能使用分區(qū)存儲方式管理文件 ;





一、報錯信息



在 Android 999 版本中使用 MediaStore 進行分區(qū)存儲 ;

/*** 創(chuàng)建文件* 在 Download 目錄下創(chuàng)建 hello.txt*/fun createFile(){// 操作 external.db 數(shù)據(jù)庫// 獲取 Uri 路徑var uri: Uri = MediaStore.Files.getContentUri("external")// 將要新建的文件的文件索引插入到 external.db 數(shù)據(jù)庫中// 需要插入到 external.db 數(shù)據(jù)庫 files 表中, 這里就需要設置一些描述信息var contentValues: ContentValues = ContentValues()// 設置插入 external.db 數(shù)據(jù)庫中的 files 數(shù)據(jù)表的各個字段的值// 設置存儲路徑 , files 數(shù)據(jù)表中的對應 relative_path 字段在 MediaStore 中以常量形式定義contentValues.put(MediaStore.Downloads.RELATIVE_PATH, "${Environment.DIRECTORY_DOWNLOADS}/hello")// 設置文件名稱contentValues.put(MediaStore.Downloads.DISPLAY_NAME, "hello.txt")// 設置文件標題, 一般是刪除后綴, 可以不設置contentValues.put(MediaStore.Downloads.TITLE, "hello")// uri 表示操作哪個數(shù)據(jù)庫 , contentValues 表示要插入的數(shù)據(jù)內(nèi)容var insert: Uri = contentResolver.insert(uri, contentValues)!!// 向 Download/hello/hello.txt 文件中插入數(shù)據(jù)var os: OutputStream = contentResolver.openOutputStream(insert)!!var bos = BufferedOutputStream(os)bos.write("Hello World".toByteArray())bos.close()}

報錯信息 :

2021-05-18 11:53:49.339 5599-5627/kim.hsl.file E/libc: Access denied finding property "vendor.debug.egl.profiler" 2021-05-18 11:53:49.518 5599-5599/kim.hsl.file E/AndroidRuntime: FATAL EXCEPTION: mainProcess: kim.hsl.file, PID: 5599java.lang.RuntimeException: Unable to start activity ComponentInfo{kim.hsl.file/kim.hsl.file.MainActivity}: java.lang.IllegalArgumentException: no path was provided when inserting new fileat android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2951)at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3086)at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816)at android.os.Handler.dispatchMessage(Handler.java:106)at android.os.Looper.loop(Looper.java:193)at android.app.ActivityThread.main(ActivityThread.java:6718)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)Caused by: java.lang.IllegalArgumentException: no path was provided when inserting new fileat android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:165)at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)at android.content.ContentProviderProxy.insert(ContentProviderNative.java:476)at android.content.ContentResolver.insert(ContentResolver.java:1588)at kim.hsl.file.MainActivity.createFile(MainActivity.kt:76)at kim.hsl.file.MainActivity.doSomethingWithPermissions(MainActivity.kt:37)at kim.hsl.file.MainActivity.onCreate(MainActivity.kt:23)at android.app.Activity.performCreate(Activity.java:7144)at android.app.Activity.performCreate(Activity.java:7135)at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2931)at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3086) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:6718) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)









二、解決方案



沒有解決方案 , 在 Android 11 及以上的版本中使用分區(qū)存儲 ;

在 Android 10 及以下的版本中 , 使用普通的存儲方式 ;

訪問外置 SD 卡 必須開發(fā)兩套存儲方式 去兼容 分區(qū)存儲 及 之前的版本 ;


Android 10 過渡版本中 , 可以選擇使用分區(qū)存儲方式 , 也可以選擇使用之前的存儲方式 ;

Android 101010 版本是過渡版本 , 在該版本中可以選擇啟用分區(qū)存儲 , 也可以選擇不用 , 在清單文件的 application 節(jié)點設置 requestLegacyExternalStorage=“true 屬性可以設置 不啟用 分區(qū)存儲 方案 , 但是 在 Android 111111 中 必須 啟用分區(qū)存儲 , 否則應用不能兼容 Android 111111 系統(tǒng) ;

總結

以上是生活随笔為你收集整理的【错误记录】Android 低版本使用分区存储错误 ( 低版本存储不得使用 MediaStore )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。