caoliu最新地址2022cma

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();
    } 

猜你喜欢

转载自blog.51cto.com/13768801/2120720