您的位置:首页 > 移动开发 > Android开发

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

2014-07-19 15:52 1291 查看
/article/5215049.html

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

对应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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: