google在android4.4给了cl地址一请点击地址二操作外置sd卡的功能,业界一片吐槽,so,在android5.0提供了全新的方式去操作外置sdcard。
1.首先获得外置sdcard的路径:
extSdcardPath = System.getenv("SECONDARY_STORAGE");
2.获取uri,防止重复进入documentui界面
if (!TextUtils.isEmpty(extSdcardPath)) {
String strUri = PreferenceManager.getDefaultSharedPreferences(this).getString(PREF_DEFAULT_URI, null);
if (TextUtils.isEmpty(strUri)) {
if (Build.VERSION.SDK_INT >= 19) {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, DOCUMENT_TREE_REQUEST);
}
} else {
Uri uri = Uri.parse(strUri);
DocumentFile rootDocumentFile = DocumentFile.fromTreeUri(this, uri);
createFile(rootDocumentFile);
}
}
3.处理返回结果
if (requestCode == DOCUMENT_TREE_REQUEST && resultCode == RESULT_OK) {
Uri uri = data.getData();
final int takeFlags = data.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
getContentResolver().takePersistableUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
PreferenceManager.getDefaultSharedPreferences(this).edit().putString(PREF_DEFAULT_URI, uri.toString()).commit();
DocumentFile documentFile = DocumentFile.fromTreeUri(this, uri);
for (DocumentFile file : documentFile.listFiles()) {
Log.d(TAG, "Found file " + file.getName() + " with size " + file.length());
}
createFile(documentFile);
} else {
Toast.makeText(getBaseContext(), "nonono", Toast.LENGTH_SHORT).show();
}