關於獲得安卓外部儲存讀寫權限

來源:互聯網
上載者:User

標籤:util   perm   oid   card   xxx   else   理解   stp   this   

    最近做了一個關於相簿的小App,需要對安卓手機的存放裝置進行讀取,首先需要擷取系統讀寫權限,在網上一頓好找,對於老手來說,可能很容易,對於菜鳥來說,就有點困難了,為了容易學習,特把自己寫的一些心得寫下,用以參考。如有不當之處,歡迎指正。

 

   首先做一個關於手機內部儲存和外部儲存之間的介紹:

   對內部存放裝置不需要申請讀寫權限,一般是自動分配給手機的,在卸載app時消失:用getFileDirs()直接擷取/data/data/packageName/files/xxx.  

   外部存放裝置一般需要擷取路徑需要Environment.getExternalStorageDirectory()方法擷取/storage/emulate/0/,親測小米手機

 

一,主要是由於安卓6.0之後只在Manifest檔案中寫上這兩個許可權列表,已經不行了,需要寫代碼動態申請許可權

 

<!--許可權列表-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

二,以下是一下代碼,我也是找來的,有連結,主要是加以解說,更好理解。下面是一個類,主要判斷有沒有授權,沒有授權就授權
/*
* 借用博主的代碼實現訪問外部儲存 78081114
* */

/**
* 關於申請授權
* 只需要在主介面申請一次即可
* 在其他子activity,自動授權
* */
public class PermissionUtils {
//這是要申請的許可權
private static String[] PERMISSIONS_CAMERA_AND_STORAGE = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CAMERA};

/**
* 解決安卓6.0以上版本不能讀取外部儲存許可權的問題
*
* @param activity
* @param requestCode
* @return
*/
public static boolean isGrantExternalRW(Activity activity, int requestCode) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

int storagePermission = activity.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);
int cameraPermission = activity.checkSelfPermission(Manifest.permission.CAMERA);
//檢測是否有許可權,如果沒有許可權,就需要申請
if (storagePermission != PackageManager.PERMISSION_GRANTED ||
cameraPermission != PackageManager.PERMISSION_GRANTED) {
//申請許可權
activity.requestPermissions(PERMISSIONS_CAMERA_AND_STORAGE, requestCode);
//返回false。說明沒有授權
return false;
}
}
//說明已經授權
return true;
}
}


三,在具體的activity中如何使用

1.調用上面的類,來申請許可權,在oncreate函數裡面調用
//擷取授權 這個if..else可以不寫,直接寫入權限申請代碼
if (PermissionUtils.isGrantExternalRW(this, 1)) {

}
2.onRequestPermissionResult是對activity.requestPermissions()函數的回調,根據請求碼做具體處理。如果沒有授權,自然要授權後再能使用。只需要咋入口activity中申請許可權即可,其它子activity會自動被授權。此授權會在一開始開啟一個請求許可權頁面,點擊允許就會擷取許可權
//對擷取許可權處理的結果
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case 1:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//檢驗是否擷取許可權,如果擷取許可權,外部儲存會處於開放狀態,會彈出一個toast提示獲得授權
String sdCard = Environment.getExternalStorageState();
if (sdCard.equals(Environment.MEDIA_MOUNTED)){
Toast.makeText(this,"獲得授權",Toast.LENGTH_LONG).show();
}
} else {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "buxing", Toast.LENGTH_SHORT).show();
}
});
}
break;
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}

關於獲得安卓外部儲存讀寫權限

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.