Android 中 Environment.getExternalStorageDirectory()無效


  我們在處理緩存的時候,並不是每次都會在應用私有存儲空間那里保存,很多時候是需要用到ExternalStorage。我們平時一般都是用Environment.getExternalStorageDirectory(),這在6.0以前一直是好的,(即使不對,那你的問題應該是沒注意加權限,或者是格式不對之類又或者sdcard被移走了等等)。但是到了6.0以后,就發現怎么都不無法創建文件了。很多人就疑惑,該加的權限都加了,怎么就沒法創建呢?

  原因是Android 6.0以后,google升級了Android的權限管理機制,對於一些敏感的權限,需要顯性申請並被用戶允許才可能運行。

 

    private void checkPermission() { if (Build.VERSION.SDK_INT >= 23) { int write = checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE); int read = checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE); if (write != PackageManager.PERMISSION_GRANTED || read != PackageManager.PERMISSION_GRANTED) { requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}, 300); } else { String name = "CrashDirectory"; File file1 = new File(Environment.getExternalStorageDirectory(), name); if (file1.mkdirs()) { Log.i("wytings", "permission -------------> " + file1.getAbsolutePath()); } else { Log.i("wytings", "permission -------------fail to make file "); } } } else { Log.i("wytings", "------------- Build.VERSION.SDK_INT < 23 ------------"); } } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (requestCode == 300) { Log.i("wytings", "--------------requestCode == 300->" + requestCode + "," + permissions.length + "," + grantResults.length); } else { Log.i("wytings", "--------------requestCode != 300->" + requestCode + "," + permissions + "," + grantResults); } }

 

備注:附上android的權限組,因為同一組的任何一個權限被授權了,其他權限也自動被授權。例如,一旦WRITE_EXTERNAL_STORAGE被授權了,app也有READ_EXTERNAL_STORAGE.所以,你只申請一個就可以了。

android.permission-group.CALENDAR
  • android.permission.READ_CALENDAR
  • android.permission.WRITE_CALENDAR
android.permission-group.CAMERA
  • android.permission.CAMERA
android.permission-group.CONTACTS
  • android.permission.READ_CONTACTS
  • android.permission.WRITE_CONTACTS
  • android.permission.GET_ACCOUNTS
android.permission-group.LOCATION
  • android.permission.ACCESS_FINE_LOCATION
  • android.permission.ACCESS_COARSE_LOCATION
android.permission-group.MICROPHONE
  • android.permission.RECORD_AUDIO
android.permission-group.PHONE
  • android.permission.READ_PHONE_STATE
  • android.permission.CALL_PHONE
  • android.permission.READ_CALL_LOG
  • android.permission.WRITE_CALL_LOG
  • com.android.voicemail.permission.ADD_VOICEMAIL
  • android.permission.USE_SIP
  • android.permission.PROCESS_OUTGOING_CALLS
android.permission-group.SENSORS
  • android.permission.BODY_SENSORS
android.permission-group.SMS
  • android.permission.SEND_SMS
  • android.permission.RECEIVE_SMS
  • android.permission.READ_SMS
  • android.permission.RECEIVE_WAP_PUSH
  • android.permission.RECEIVE_MMS
  • android.permission.READ_CELL_BROADCASTS
android.permission-group.STORAGE
  • android.permission.READ_EXTERNAL_STORAGE
  • android.permission.WRITE_EXTERNAL_STORAGE

 


免責聲明!

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



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