权限android.permission.WRITE_EXTERNAL_STORAGE 内外置sd卡写权限

[html] view plain copy
  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 plain copy
  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类型的数组,从而可以获得对应存储是否可读写一类的信息。

 

 

 

对应Android 1.5以上的版本中一定要在AndroidManifest.xml中加入:

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

其次:确保SD卡的镜像文件不是Read-Only属性的,不能写入内容

写入SD卡:
File f = new File(android.os.Environment.getExternalStorageDirectory()+"/aaa.txt");
String str="this is a test about Write SD card file";

方法A:
FileOutputStream fileOS=new FileOutputStream(f);
fileOS.write(str.getBytes());
fileOS.close();
BufferedWriter buf = new BufferedWriter (new OutputStreamWriter(fileOS));
buf.write(str,0,str.length());
buf.flush();
buf.close();

方法B:

//         FileWriter fw = new FileWriter("/sdcard/cc.txt");
//            fw.write(str);
//            fw.close();

读SD卡
File file[] = android.os.Environment.getExternalStorageDirectory().listFiles();  
         //这里我们只是取得列表中的第二个文件的绝对路径
         String path=file[1].getAbsolutePath();
try{
          
            FileInputStream fileIS = new FileInputStream(path);
           BufferedReader buf = new BufferedReader(new InputStreamReader(fileIS));
            String readString = new String();
            //just reading each line and pass it on the debugger
           while((readString = buf.readLine())!= null){
                Log.d("line: ", readString);
             }
            fileIS.close();
          } catch (FileNotFoundException e) {
             e.printStackTrace();
           } catch (IOException e){
            e.printStackTrace();
          }

删除SD卡中的文件

File file1= new File(path);
boolean isdelte=file1.delete();

 

添加WiFi以及访问网络的权限:
  <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" ></uses-permission>
  <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" ></uses-permission>
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" ></uses-permission>
  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" ></uses-permission>
  <uses-permission android:name="android.permission.INTERNET" ></uses-permission>
  <uses-permission android:name="android.permission.WAKE_LOCK" ></uses-permission>


操作外部存储设备文件:
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


录音时需要的权限:
<uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>


录制视频时需要的权限:
<uses-permission android:name="android.permission.CAMERA"></uses-permission>
<uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>


发送短信:
<uses-permission android:name="android.permission.SEND_SMS" ></uses-permission>


收短信:
<uses-permission android:name="android.permission.RECEIVE_SMS" />


收彩信:
<uses-permission android:name="android.permission.READ_SMS" />


GPS:
<!-- 權限 : 上網連線 -->
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<!-- 權限 : GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!-- 權限 : AGPS定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>

 

转载于:https://www.cnblogs.com/jiezzy/archive/2012/07/11/2586639.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android中的`android.permission.WRITE_EXTERNAL_STORAGE`权限用于访问外部存储设备(如SD卡)的权限。以下是Android 11及以上版本和Android 6.0到Android 10版本的适配方法: 1. Android 11及以上版本: 在AndroidManifest.xml文件中添加以下权限: ```xml <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> ``` 然后,在代码中使用`ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION`权限来请求用户授权操作手机中的文件管理: ```java Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION); intent.setData(Uri.parse("package:" + getPackageName())); startActivity(intent); ``` 2. Android 6.0到Android 10版本: 在AndroidManifest.xml文件中添加以下权限: ```xml <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> ``` 然后,在代码中使用运行时权限来请求用户授权: ```java if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE); } } ``` 请注意,从Android 11开始,即使在AndroidManifest.xml中声明了存储权限,也需要在代码中动态请求权限。此外,Android 11及以上版本的存储权限只允许访问媒体文件,无法直接操作手机的文件管理。只有通过`ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION`权限才能操作手机中的文件管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值