首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android应用程序能否获得/mnt/asec或/mnt/obb的写权限?

Android应用程序能否获得/mnt/asec或/mnt/obb的写权限?
EN

Stack Overflow用户
提问于 2014-10-03 18:20:36
回答 1查看 2K关注 0票数 0

我有一个在外部SD卡上执行写操作的应用程序(在外部,不是在设备的闪存中的“外部”),但是由于已经对here和其他一些问题进行了彻底的讨论,似乎没有通用的方法/支持的API从不同的制造商检索每个手机上工作的SD卡安装点。

考虑到这一点,需要执行如下代码的操作,以确定是否安装了外部存储设备,以及在何处:

代码语言:javascript
复制
final String state = Environment.getExternalStorageState();

if ( Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state) ) {  // we can read the External Storage...           
    //Retrieve the primary External Storage:
    final File primaryExternalStorage = Environment.getExternalStorageDirectory();

    //Retrieve the External Storages' root directory:
    final String externalStorageRootDir;
    if ( (externalStorageRootDir = primaryExternalStorage.getParent()) == null ) {  // no parent...
        Log.i("SD Card Path", "External Storage: " + primaryExternalStorage + "\n");
    }
    else {
        final File externalStorageRoot = new File( externalStorageRootDir );
        final File[] files = externalStorageRoot.listFiles();

        for ( final File file : files ) {
            if ( file.isDirectory() && file.canRead() && (file.listFiles().length > 0) ) {  // it is a real directory (not a USB drive)...
                Log.i("SD Card Path", "External Storage: " + file.getAbsolutePath() + "\n");
            }
        }
    }
}

我可能错了,但我知道SD卡可能是完全空的,最后一个条件(file.listFiles().length > 0)可以返回false。所以我想,与其检查length,不如添加file.canWrite()。这和我目前正在测试的手机(摩托罗拉Atrix MB860 --我知道,它是旧的,但我的要求之一是使它与从姜饼、API 9开始的版本兼容)一样有效,但我不确定这个条件是否能在其他手机上返回到/mnt/asec//mnt/obb上,最近的或者不是,因为它们都是可读的目录,因此也满足了前两个条件(如果它上写了一些东西,甚至可以将true返回给(file.listFiles().length > 0) (比如/mnt/obb上的50MB+大小文件)。

因此,简而言之,我需要知道的是,应用程序是否会对这两个位置有写权限,或者只有系统才有这样的权限。如果是,我还能检查什么才能将它们排除在我希望获得的最终路径之外:安装在设备上的外部SD卡?

提前感谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-03 18:24:37

这是Nexus 5的输出

代码语言:javascript
复制
shell@hammerhead:/ $ ls -la /mnt/                                              
drwxr-xr-x root     system            1970-09-18 01:42 asec
drwx------ media_rw media_rw          1970-09-18 01:42 media_rw
drwxr-xr-x root     system            1970-09-18 01:42 obb

如您所见,只有root拥有对目录的写权限。因此,应用程序编写该目录的唯一方法是作为root执行。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26184538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档