第一种,通过DocumentProvider:
private void handleDocumentsProvider() { String authority = "com.android.externalstorage.documents"; final Uri rootsUri = DocumentsContract.buildRootsUri("com.android.externalstorage.documents"); ContentResolver resolver = getContentResolver(); final ContentProviderClient client = resolver.acquireUnstableContentProviderClient( authority); final PackageManager pm = getPackageManager(); ProviderInfo provider = pm.resolveContentProvider( authority, PackageManager.GET_META_DATA); if (provider == null) { Log.w(TAG, "Failed to get provider info for " + authority); } if (!provider.exported) { Log.w(TAG, "Provider is not exported. Failed to load roots for " + authority); } if (!provider.grantUriPermissions) { Log.w(TAG, "Provider doesn't grantUriPermissions. Failed to load roots fo