權限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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM