android 读写sdcard文件权限的问题

时间:2021-02-04 09:57:55
我向android的sdcard中创建文件提示如下错误:

java.io.IOException: open failed: EACCES (Permission denied)

java.io.File.createNewFile(File.java:940)

注:我已经添加过读写权限了

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

<user-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

15 个解决方案

#1


<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
不是user

#2


引用 楼主 zhh1030 的回复:
我向android的sdcard中创建文件提示如下错误:

java.io.IOException: open failed: EACCES (Permission denied)

java.io.File.createNewFile(File.java:940)

注:我已经添加过读写权限了

<uses-permission android:name……

哈哈  1L正确  LZ在哪里copy的权限写法....   

#3


有时某些错误是由于粗心造成的

#4


修改后,还是同样的错误。有没有其他办法

#5


    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>

#6


好像2.2以上的版本要这么写
File f = new File(path);
if(!if.exists()){
    file.createNewFile();
}
如果还是不行就是虚拟机没有sdcard的size,你可以再创建虚拟机中双击你已经创建好了的虚拟机看看你们的想象信息

#7


我也遇到了lz同样的问题,坐等呀

#8


引用 6 楼 modejun 的回复:
好像2.2以上的版本要这么写
File f = new File(path);
if(!if.exists()){
    file.createNewFile();
}
如果还是不行就是虚拟机没有sdcard的size,你可以再创建虚拟机中双击你已经创建好了的虚拟机看看你们的想象信息

还是不行啊

#9


引用 4 楼 zhh1030 的回复:
修改后,还是同样的错误。有没有其他办法

请问你最后怎么解决的?

#10




1. 



android4.0

源码出来以后,关于

sd

卡问题似乎没有解决好,起码上层

api

中没

有体现到位。其实在

framework

层中有相应的类去获得内外置

sd

卡信息,是否

可读写的权限。

   

  

  

  

  



2.x

的版本中,在

manifest

中配置的权限

android.permission.WRITE_EXTERNAL_STORAGE

确实是用来使得

sd



获得写的权限。而在

4.0

开发的源码当中,由于有了内外置

sd

卡的区分,

android.permission.WRITE_EXTERNAL_STORAGE

的权限用来设置了内



sd

卡的写权限,

如果在

manifest

中只是配置了这个权限,

那个应用只能在

内置

sd

卡中进行写操作,还是无法在外置

sd

卡中进行写操作。

需要写外置

sd

卡的话,需要配置另一个权限

android.permission.WRITE_MEDIA_STORAGE

,这样就可以在外置

sd



中进行写入操作了。

 

这两个权限都被定义在

 android

源码目录

\frameworks\base\data\etc\platform.xml

中:

 

[html]

 

view plaincopyprint?

 

1. 

<

permission

 

name

=

"android.permission.WRITE_EXTERNAL_STORAGE"

 

>

   

2. 

 

   

<group

 

gid

=

"sdcard_rw"

 

/>

   

3. 

<

/permission>

   

4. 

 

  

5. 

<

permission

 

name

=

"android.permission.WRITE_MEDIA_STORAGE"

 

>

   

6. 

 

   

<group

 

gid

=

"media_rw"

 

/>

   

7. 

<

/permission>

   

 

使用到的类主要是

framework/base/core/java/android/os/storage/StorageVolume.java

及相

同目录下的

StorageManager.java

文件。

 

 

StorageManager

类可以获得所有的存储媒体列表,



StorageVolume

类型

的数组,从而可以获得对应存储是否可读写一类的信息。

 

 

希望可以帮助遇到相同问题的童鞋。

#11


在android4.0源码出来以后,关于sd卡问题似乎没有解决好,起码上层api中没有体现到位。其实在framework层中有相应的类去获得内外置sd卡信息,是否可读写的权限。
     在2.x的版本中,在manifest中配置的权限android.permission.WRITE_EXTERNAL_STORAGE确实是用来使得sd卡获得写的权限。而在4.0开发的源码当中,由于有了内外置sd卡的区分,android.permission.WRITE_EXTERNAL_STORAGE的权限用来设置了内置sd卡的写权限,如果在manifest中只是配置了这个权限,那个应用只能在内置sd卡中进行写操作,还是无法在外置sd卡中进行写操作。需要写外置sd卡的话,需要配置另一个权限android.permission.WRITE_MEDIA_STORAGE,这样就可以在外置sd卡中进行写入操作了。
这两个权限都被定义在android源码目录\frameworks\base\data\etc\platform.xml中:

    <permission name="android.permission.WRITE_EXTERNAL_STORAGE" >

    <group gid="sdcard_rw" />

    </permission>

    <permission name="android.permission.WRITE_MEDIA_STORAGE" >

    <group gid="media_rw" />

    </permission>

复制代码

使用到的类主要是framework/base/core/java/android/os/storage/StorageVolume.java及相同目录下的StorageManager.java文件。
StorageManager类可以获得所有的存储媒体列表,及StorageVolume类型的数组,从而可以获得对应存储是否可读写一类的信息。
希望可以帮助遇到相同问题的童鞋。

#12


引用 11 楼 songjinshi 的回复:
在android4.0源码出来以后,关于sd卡问题似乎没有解决好,起码上层api中没有体现到位。其实在framework层中有相应的类去获得内外置sd卡信息,是否可读写的权限。
     在2.x的版本中,在manifest中配置的权限android.permission.WRITE_EXTERNAL_STORAGE确实是用来使得sd卡获得写的权限。而在4.0开发的源码当中,由于有了内外置sd卡的区分,android.permission.WRITE_EXTERNAL_STORAGE的权限用来设置了内置sd卡的写权限,如果在manifest中只是配置了这个权限,那个应用只能在内置sd卡中进行写操作,还是无法在外置sd卡中进行写操作。需要写外置sd卡的话,需要配置另一个权限android.permission.WRITE_MEDIA_STORAGE,这样就可以在外置sd卡中进行写入操作了。
这两个权限都被定义在android源码目录\frameworks\base\data\etc\platform.xml中:

    <permission name="android.permission.WRITE_EXTERNAL_STORAGE" >

    <group gid="sdcard_rw" />

    </permission>

    <permission name="android.permission.WRITE_MEDIA_STORAGE" >

    <group gid="media_rw" />

    </permission>

复制代码

使用到的类主要是framework/base/core/java/android/os/storage/StorageVolume.java及相同目录下的StorageManager.java文件。
StorageManager类可以获得所有的存储媒体列表,及StorageVolume类型的数组,从而可以获得对应存储是否可读写一类的信息。
希望可以帮助遇到相同问题的童鞋。

我遇到了同样的问题,想向你请教下!
是否是把这段代码    <permission name="android.permission.WRITE_EXTERNAL_STORAGE" >

    <group gid="sdcard_rw" />

    </permission>

    <permission name="android.permission.WRITE_MEDIA_STORAGE" >

    <group gid="media_rw" />

    </permission>
复制到framework/base/core/java/android/os/storage/StorageVolume.java及相同目录下的StorageManager.java文件。这两文件里面
然后
定义android.permission.WRITE_MEDIA_STORAGE这个就不会报错了?

#13


引用 12 楼 chenfzg 的回复:
Quote: 引用 11 楼 songjinshi 的回复:

在android4.0源码出来以后,关于sd卡问题似乎没有解决好,起码上层api中没有体现到位。其实在framework层中有相应的类去获得内外置sd卡信息,是否可读写的权限。
     在2.x的版本中,在manifest中配置的权限android.permission.WRITE_EXTERNAL_STORAGE确实是用来使得sd卡获得写的权限。而在4.0开发的源码当中,由于有了内外置sd卡的区分,android.permission.WRITE_EXTERNAL_STORAGE的权限用来设置了内置sd卡的写权限,如果在manifest中只是配置了这个权限,那个应用只能在内置sd卡中进行写操作,还是无法在外置sd卡中进行写操作。需要写外置sd卡的话,需要配置另一个权限android.permission.WRITE_MEDIA_STORAGE,这样就可以在外置sd卡中进行写入操作了。
这两个权限都被定义在android源码目录\frameworks\base\data\etc\platform.xml中:

    <permission name="android.permission.WRITE_EXTERNAL_STORAGE" >

    <group gid="sdcard_rw" />

    </permission>

    <permission name="android.permission.WRITE_MEDIA_STORAGE" >

    <group gid="media_rw" />

    </permission>

复制代码

使用到的类主要是framework/base/core/java/android/os/storage/StorageVolume.java及相同目录下的StorageManager.java文件。
StorageManager类可以获得所有的存储媒体列表,及StorageVolume类型的数组,从而可以获得对应存储是否可读写一类的信息。
希望可以帮助遇到相同问题的童鞋。

我遇到了同样的问题,想向你请教下!
是否是把这段代码    <permission name="android.permission.WRITE_EXTERNAL_STORAGE" >

    <group gid="sdcard_rw" />

    </permission>

    <permission name="android.permission.WRITE_MEDIA_STORAGE" >

    <group gid="media_rw" />

    </permission>
复制到framework/base/core/java/android/os/storage/StorageVolume.java及相同目录下的StorageManager.java文件。这两文件里面
然后
定义android.permission.WRITE_MEDIA_STORAGE这个就不会报错了?



you can use-permission for   <permission name="android.permission.WRITE_MEDIA_STORAGE" > in androidmanifest.xml file.

#14


使用真机调试手机连接进入后会一个usb数据存储开关,软件读写不了SD卡的

#15


14楼正解啊!

#1


<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
不是user

#2


引用 楼主 zhh1030 的回复:
我向android的sdcard中创建文件提示如下错误:

java.io.IOException: open failed: EACCES (Permission denied)

java.io.File.createNewFile(File.java:940)

注:我已经添加过读写权限了

<uses-permission android:name……

哈哈  1L正确  LZ在哪里copy的权限写法....   

#3


有时某些错误是由于粗心造成的

#4


修改后,还是同样的错误。有没有其他办法

#5


    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>

#6


好像2.2以上的版本要这么写
File f = new File(path);
if(!if.exists()){
    file.createNewFile();
}
如果还是不行就是虚拟机没有sdcard的size,你可以再创建虚拟机中双击你已经创建好了的虚拟机看看你们的想象信息

#7


我也遇到了lz同样的问题,坐等呀

#8


引用 6 楼 modejun 的回复:
好像2.2以上的版本要这么写
File f = new File(path);
if(!if.exists()){
    file.createNewFile();
}
如果还是不行就是虚拟机没有sdcard的size,你可以再创建虚拟机中双击你已经创建好了的虚拟机看看你们的想象信息

还是不行啊

#9


引用 4 楼 zhh1030 的回复:
修改后,还是同样的错误。有没有其他办法

请问你最后怎么解决的?

#10




1. 



android4.0

源码出来以后,关于

sd

卡问题似乎没有解决好,起码上层

api

中没

有体现到位。其实在

framework

层中有相应的类去获得内外置

sd

卡信息,是否

可读写的权限。

   

  

  

  

  



2.x

的版本中,在

manifest

中配置的权限

android.permission.WRITE_EXTERNAL_STORAGE

确实是用来使得

sd



获得写的权限。而在

4.0

开发的源码当中,由于有了内外置

sd

卡的区分,

android.permission.WRITE_EXTERNAL_STORAGE

的权限用来设置了内



sd

卡的写权限,

如果在

manifest

中只是配置了这个权限,

那个应用只能在

内置

sd

卡中进行写操作,还是无法在外置

sd

卡中进行写操作。

需要写外置

sd

卡的话,需要配置另一个权限

android.permission.WRITE_MEDIA_STORAGE

,这样就可以在外置

sd



中进行写入操作了。

 

这两个权限都被定义在

 android

源码目录

\frameworks\base\data\etc\platform.xml

中:

 

[html]

 

view plaincopyprint?

 

1. 

<

permission

 

name

=

"android.permission.WRITE_EXTERNAL_STORAGE"

 

>

   

2. 

 

   

<group

 

gid

=

"sdcard_rw"

 

/>

   

3. 

<

/permission>

   

4. 

 

  

5. 

<

permission

 

name

=

"android.permission.WRITE_MEDIA_STORAGE"

 

>

   

6. 

 

   

<group

 

gid

=

"media_rw"

 

/>

   

7. 

<

/permission>

   

 

使用到的类主要是

framework/base/core/java/android/os/storage/StorageVolume.java

及相

同目录下的

StorageManager.java

文件。

 

 

StorageManager

类可以获得所有的存储媒体列表,



StorageVolume

类型

的数组,从而可以获得对应存储是否可读写一类的信息。

 

 

希望可以帮助遇到相同问题的童鞋。

#11


在android4.0源码出来以后,关于sd卡问题似乎没有解决好,起码上层api中没有体现到位。其实在framework层中有相应的类去获得内外置sd卡信息,是否可读写的权限。
     在2.x的版本中,在manifest中配置的权限android.permission.WRITE_EXTERNAL_STORAGE确实是用来使得sd卡获得写的权限。而在4.0开发的源码当中,由于有了内外置sd卡的区分,android.permission.WRITE_EXTERNAL_STORAGE的权限用来设置了内置sd卡的写权限,如果在manifest中只是配置了这个权限,那个应用只能在内置sd卡中进行写操作,还是无法在外置sd卡中进行写操作。需要写外置sd卡的话,需要配置另一个权限android.permission.WRITE_MEDIA_STORAGE,这样就可以在外置sd卡中进行写入操作了。
这两个权限都被定义在android源码目录\frameworks\base\data\etc\platform.xml中:

    <permission name="android.permission.WRITE_EXTERNAL_STORAGE" >

    <group gid="sdcard_rw" />

    </permission>

    <permission name="android.permission.WRITE_MEDIA_STORAGE" >

    <group gid="media_rw" />

    </permission>

复制代码

使用到的类主要是framework/base/core/java/android/os/storage/StorageVolume.java及相同目录下的StorageManager.java文件。
StorageManager类可以获得所有的存储媒体列表,及StorageVolume类型的数组,从而可以获得对应存储是否可读写一类的信息。
希望可以帮助遇到相同问题的童鞋。

#12


引用 11 楼 songjinshi 的回复:
在android4.0源码出来以后,关于sd卡问题似乎没有解决好,起码上层api中没有体现到位。其实在framework层中有相应的类去获得内外置sd卡信息,是否可读写的权限。
     在2.x的版本中,在manifest中配置的权限android.permission.WRITE_EXTERNAL_STORAGE确实是用来使得sd卡获得写的权限。而在4.0开发的源码当中,由于有了内外置sd卡的区分,android.permission.WRITE_EXTERNAL_STORAGE的权限用来设置了内置sd卡的写权限,如果在manifest中只是配置了这个权限,那个应用只能在内置sd卡中进行写操作,还是无法在外置sd卡中进行写操作。需要写外置sd卡的话,需要配置另一个权限android.permission.WRITE_MEDIA_STORAGE,这样就可以在外置sd卡中进行写入操作了。
这两个权限都被定义在android源码目录\frameworks\base\data\etc\platform.xml中:

    <permission name="android.permission.WRITE_EXTERNAL_STORAGE" >

    <group gid="sdcard_rw" />

    </permission>

    <permission name="android.permission.WRITE_MEDIA_STORAGE" >

    <group gid="media_rw" />

    </permission>

复制代码

使用到的类主要是framework/base/core/java/android/os/storage/StorageVolume.java及相同目录下的StorageManager.java文件。
StorageManager类可以获得所有的存储媒体列表,及StorageVolume类型的数组,从而可以获得对应存储是否可读写一类的信息。
希望可以帮助遇到相同问题的童鞋。

我遇到了同样的问题,想向你请教下!
是否是把这段代码    <permission name="android.permission.WRITE_EXTERNAL_STORAGE" >

    <group gid="sdcard_rw" />

    </permission>

    <permission name="android.permission.WRITE_MEDIA_STORAGE" >

    <group gid="media_rw" />

    </permission>
复制到framework/base/core/java/android/os/storage/StorageVolume.java及相同目录下的StorageManager.java文件。这两文件里面
然后
定义android.permission.WRITE_MEDIA_STORAGE这个就不会报错了?

#13


引用 12 楼 chenfzg 的回复:
Quote: 引用 11 楼 songjinshi 的回复:

在android4.0源码出来以后,关于sd卡问题似乎没有解决好,起码上层api中没有体现到位。其实在framework层中有相应的类去获得内外置sd卡信息,是否可读写的权限。
     在2.x的版本中,在manifest中配置的权限android.permission.WRITE_EXTERNAL_STORAGE确实是用来使得sd卡获得写的权限。而在4.0开发的源码当中,由于有了内外置sd卡的区分,android.permission.WRITE_EXTERNAL_STORAGE的权限用来设置了内置sd卡的写权限,如果在manifest中只是配置了这个权限,那个应用只能在内置sd卡中进行写操作,还是无法在外置sd卡中进行写操作。需要写外置sd卡的话,需要配置另一个权限android.permission.WRITE_MEDIA_STORAGE,这样就可以在外置sd卡中进行写入操作了。
这两个权限都被定义在android源码目录\frameworks\base\data\etc\platform.xml中:

    <permission name="android.permission.WRITE_EXTERNAL_STORAGE" >

    <group gid="sdcard_rw" />

    </permission>

    <permission name="android.permission.WRITE_MEDIA_STORAGE" >

    <group gid="media_rw" />

    </permission>

复制代码

使用到的类主要是framework/base/core/java/android/os/storage/StorageVolume.java及相同目录下的StorageManager.java文件。
StorageManager类可以获得所有的存储媒体列表,及StorageVolume类型的数组,从而可以获得对应存储是否可读写一类的信息。
希望可以帮助遇到相同问题的童鞋。

我遇到了同样的问题,想向你请教下!
是否是把这段代码    <permission name="android.permission.WRITE_EXTERNAL_STORAGE" >

    <group gid="sdcard_rw" />

    </permission>

    <permission name="android.permission.WRITE_MEDIA_STORAGE" >

    <group gid="media_rw" />

    </permission>
复制到framework/base/core/java/android/os/storage/StorageVolume.java及相同目录下的StorageManager.java文件。这两文件里面
然后
定义android.permission.WRITE_MEDIA_STORAGE这个就不会报错了?



you can use-permission for   <permission name="android.permission.WRITE_MEDIA_STORAGE" > in androidmanifest.xml file.

#14


使用真机调试手机连接进入后会一个usb数据存储开关,软件读写不了SD卡的

#15


14楼正解啊!