在 Android 10 中,需要访问存储的应用程序需要请求访问具体路径的权限。但是像文件浏览器这样的应用程序可以请求访问根存储的权限并获得对所有存储的读/写权限。这就是我正在努力做的。
根据Android,我们必须ACTION_OPEN_DOCUMENT_TREE为此使用。我遇到的问题是一切似乎都正确,但未向应用授予权限。
private void askAndroid10Perm()
{
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
intent.addFlags(
Intent.FLAG_GRANT_READ_URI_PERMISSION
| Intent.FLAG_GRANT_WRITE_URI_PERMISSION
| Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION
| Intent.FLAG_GRANT_PREFIX_URI_PERMISSION);
startActivityForResult(intent, REQUEST_CODE_OPEN_DOCUMENT_TREE);
}
Run Code Online (Sandbox Code Playgroud)
在这里,用户可以看到 Android 文件树,并选择主存储,单击以授予权限。“它将允许 - 应用程序名称 - 可以完全访问当前存储在此位置下的所有文件,以及存储在此处的任何未来内容”-> 允许
然后:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case REQUEST_CODE_OPEN_DOCUMENT_TREE:
if (resultCode == Activity.RESULT_OK) {
Uri treeUri = data.getData();
int takeFlags = data.getFlags();
takeFlags &= (Intent.FLAG_GRANT_READ_URI_PERMISSION |
Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Log.i("TAG", "takePersistableUriPermission: " …Run Code Online (Sandbox Code Playgroud) 当我正在显示保存在sdcard文件夹中的图像时,我找到了以下链接.
我使用以下代码从SD卡中的指定文件夹中获取图像,但在这里我得到0计数.
MyCode.jav
String[] projection = {MediaStore.Images.Media._ID};
final String[] columns = { MediaStore.Images.Media.DATA,MediaStore.Images.Media._ID };
final String orderBy = MediaStore.Images.Media._ID;
Cursor imagecursor = managedQuery( MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
projection,
MediaStore.Images.Media.DATA + " like ? ",
new String[] {"/my_images"},
null);
int image_column_index = imagecursor.getColumnIndex(MediaStore.Images.Media._ID);
this.count = imagecursor.getCount();
this.thumbnails = new Bitmap[this.count];
this.arrPath = new String[this.count];
this.thumbnailsselection = new boolean[this.count];
for (int i = 0; i < this.count; i++) {
imagecursor.moveToPosition(i);
int id = imagecursor.getInt(image_column_index);
int dataColumnIndex = imagecursor
.getColumnIndex(MediaStore.Images.Media.DATA);
thumbnails[i] = MediaStore.Images.Thumbnails.getThumbnail(
getApplicationContext().getContentResolver(), …Run Code Online (Sandbox Code Playgroud) 第一张图片是默认相机视图的屏幕截图,第二张图片是我的应用程序意图打开的相机视图的屏幕截图.
问题是默认相机有图库图标.当我从我的应用程序打开相机时,我可以显示图库图标吗?
我用这个代码打开相机
Intent takeImageIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Run Code Online (Sandbox Code Playgroud)