在 Android 4.4 中从文件管理器访问文件显示异常

Posted

技术标签:

【中文标题】在 Android 4.4 中从文件管理器访问文件显示异常【英文标题】:Access a file from File Manager in Android 4.4 shows Exception 【发布时间】:2014-06-05 12:59:41 【问题描述】:

我正在开发一个 android 应用程序,在这个应用程序中,我从 android 的默认 file manger 访问一个文件。如果我在较低版本中运行这个应用程序(Android 4.4 除外),我可以将文件访问到我的应用程序中,但如果我运行我的带有android 4.4 kitkat OS 的应用程序我无法从文件管理器访问文件,它显示了一些Exceptions。在这里我附上了我的 LogCat 输出。

LogCat

06-03 15:59:34.127 W/System.err(14882): java.io.FileNotFoundException: /system/etc/vold.fstab: open failed: ENOENT (No such file or directory)
06-03 15:59:34.127 W/System.err(14882):     at libcore.io.IoBridge.open(IoBridge.java:409)
06-03 15:59:34.127 W/System.err(14882):     at java.io.FileInputStream.<init>(FileInputStream.java:78)
06-03 15:59:34.127 W/System.err(14882):     at java.util.Scanner.<init>(Scanner.java:158)
06-03 15:59:34.127 W/System.err(14882):     at java.util.Scanner.<init>(Scanner.java:138)
06-03 15:59:34.127 W/System.err(14882):     at com.ipaulpro.afilechooser.StorageOptions.readVoldFile(StorageOptions.java:81)
06-03 15:59:34.127 W/System.err(14882):     at com.ipaulpro.afilechooser.StorageOptions.determineStorageOptions(StorageOptions.java:21)
06-03 15:59:34.127 W/System.err(14882):     at com.ipaulpro.afilechooser.FileChooserActivity.onCreate(FileChooserActivity.java:348)
06-03 15:59:34.127 W/System.err(14882):     at com.wepanow.MyFileChooserActivity.onCreate(MyFileChooserActivity.java:24)
06-03 15:59:34.127 W/System.err(14882):     at android.app.Activity.performCreate(Activity.java:5231)
06-03 15:59:34.127 W/System.err(14882):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
06-03 15:59:34.127 W/System.err(14882):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
06-03 15:59:34.127 W/System.err(14882):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
06-03 15:59:34.127 W/System.err(14882):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
06-03 15:59:34.127 W/System.err(14882):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
06-03 15:59:34.127 W/System.err(14882):     at android.os.Handler.dispatchMessage(Handler.java:102)
06-03 15:59:34.127 W/System.err(14882):     at android.os.Looper.loop(Looper.java:136)
06-03 15:59:34.127 W/System.err(14882):     at android.app.ActivityThread.main(ActivityThread.java:5017)
06-03 15:59:34.127 W/System.err(14882):     at java.lang.reflect.Method.invokeNative(Native Method)
06-03 15:59:34.127 W/System.err(14882):     at java.lang.reflect.Method.invoke(Method.java:515)
06-03 15:59:34.127 W/System.err(14882):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
06-03 15:59:34.127 W/System.err(14882):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
06-03 15:59:34.127 W/System.err(14882):     at dalvik.system.NativeStart.main(Native Method)
06-03 15:59:34.127 W/System.err(14882): Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
06-03 15:59:34.127 W/System.err(14882):     at libcore.io.Posix.open(Native Method)
06-03 15:59:34.127 W/System.err(14882):     at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
06-03 15:59:34.127 W/System.err(14882):     at libcore.io.IoBridge.open(IoBridge.java:393)
06-03 15:59:34.127 W/System.err(14882):     ... 21 more



06-03 15:59:39.012 E/wepa    (14882): File select error
06-03 15:59:39.012 E/wepa    (14882): java.lang.NullPointerException
06-03 15:59:39.012 E/wepa    (14882):   at java.io.File.fixSlashes(File.java:185)
06-03 15:59:39.012 E/wepa    (14882):   at java.io.File.<init>(File.java:134)
06-03 15:59:39.012 E/wepa    (14882):   at com.ipaulpro.afilechooser.FileChooserActivity.onActivityResult(FileChooserActivity.java:453)
06-03 15:59:39.012 E/wepa    (14882):   at android.app.Activity.dispatchActivityResult(Activity.java:5423)
06-03 15:59:39.012 E/wepa    (14882):   at android.app.ActivityThread.deliverResults(ActivityThread.java:3361)
06-03 15:59:39.012 E/wepa    (14882):   at android.app.ActivityThread.handleSendResult(ActivityThread.java:3408)
06-03 15:59:39.012 E/wepa    (14882):   at android.app.ActivityThread.access$1300(ActivityThread.java:135)
06-03 15:59:39.012 E/wepa    (14882):   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1244)
06-03 15:59:39.012 E/wepa    (14882):   at android.os.Handler.dispatchMessage(Handler.java:102)
06-03 15:59:39.012 E/wepa    (14882):   at android.os.Looper.loop(Looper.java:136)
06-03 15:59:39.012 E/wepa    (14882):   at android.app.ActivityThread.main(ActivityThread.java:5017)
06-03 15:59:39.012 E/wepa    (14882):   at java.lang.reflect.Method.invokeNative(Native Method)
06-03 15:59:39.012 E/wepa    (14882):   at java.lang.reflect.Method.invoke(Method.java:515)
06-03 15:59:39.012 E/wepa    (14882):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
06-03 15:59:39.012 E/wepa    (14882):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
06-03 15:59:39.012 E/wepa    (14882):   at dalvik.system.NativeStart.main(Native Method)
06-03 15:59:39.012 D/ChooserActivity(14882): Intent Action: null
06-03 15:59:39.012 I/wepa    (14882): FileChooser > onResume
06-03 15:59:39.012 I/wepa    (14882): FC (onResume)has Extra:false
06-03 15:59:39.012 I/wepa    (14882): FC (onResume)has Extra:false
06-03 15:59:39.022 V/PhoneStatusBar(660): setLightsOn(true)
06-03 15:59:43.826 D/wepa    (14882): File selections canceled

【问题讨论】:

【参考方案1】:

我正在从 android 的默认文件管理器中访问一个文件

Android 没有文件管理器。

如果我使用 android 4.4 kitkat OS 运行我的应用程序,我无法从文件管理器访问文件,它会显示一些异常

您显然没有此设备上@9​​87654321@ 的读取权限。不要求普通 SDK 应用在所有设备上都可以读取此文件,Android 4.4.x 已逐步加强对文件系统访问的安全性。

【讨论】:

试图枚举路径低于 Android API 级别的人应该读取 /proc/mounts 而不是某些可能使用或可能不使用的守护进程的配置文件。但由于这似乎是第三方代码,甚至是一个独特的应用程序包,jamal 不太可能解决这个问题。 /system/etc/volds.fstab 甚至不在我的 kitkat 设备上。至少在文件资源管理器中不可见。 /proc/mount 是并且显示为 0 字节。然而,它可以被复制到外部存储器,它有 1983 字节并且充满了挂载路径。

以上是关于在 Android 4.4 中从文件管理器访问文件显示异常的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 中从 NDK 访问可绘制文件

Android文件选择器 自动申请存储权限 适配安卓 4.4 ~ 13支持无root权限访问和操作Android/data和Android/obb目录

如何在 Android 上运行的 Web 应用程序中从 CamScanner 或 Office Lens 获取文件?

Android 4.4以上的存储读写权限

如何在Android中从文件路径重命名文件?

访问设备/模拟器文件系统在Android Studio中