05- AndroidQ(10.0) sd卡权限问题 媒体库更新

最近在Q上又发现一个问题,在文件传输模式下对SD卡中的视音频文件及照片文件进行新增/删除,图库和音乐播放器列表未及时更新,先开始以为是没有接收广播,后面把文件直接丢进机身后,图库和音乐播放器就更新了,研究了下发现和之前写的相机权限有关,这次就写完整一点,以及在sd卡加文件后顺便更新媒体库。
具体代码如下:
首先一、导包:

import android.os.Environment;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.Manifest;
import android.content.pm.PackageManager;
import java.util.ArrayList;
import android.os.Environment;
import android.os.storage.DiskInfo;
import android.os.storage.StorageManager;
import android.os.storage.StorageVolume;
import android.os.storage.VolumeInfo;
import java.io.File;
import java.util.List;
import android.media.MediaScannerConnection;

二、判断权限问题:

private StorageManager mStorageManager;

在oncreate中添加判断,

mStorageManager = (StorageManager) getSystemService(Context.STORAGE_SERVICE);
        if (ContextCompat.checkSelfPermission(MusicBrowserActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE)
						!= PackageManager.PERMISSION_GRANTED){//没有权限则申请权限
					Sdcard();
				}else { //有权限直接执行
				 scanFile(getAvailableExternalVolume().path);
              }
编写申请权限代码,

public void Sdcard() {
            VolumeInfo externalVolume = getAvailableExternalVolume();
            if (externalVolume != null) {
                createAccessPermission(externalVolume.path);
            }
    }
    private void createAccessPermission(String path) {
        StorageVolume storageVolume = mStorageManager.getStorageVolume(new File(path));
        Intent intent = storageVolume.createOpenDocumentTreeIntent();
        intent.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
        startActivityForResult(intent, 1);
    }
    private VolumeInfo getAvailableExternalVolume() {
        List<VolumeInfo> volumes = mStorageManager.getVolumes();
        for (VolumeInfo volume : volumes) {
            DiskInfo diskInfo = volume.getDisk();
            if (diskInfo != null
                    && diskInfo.isAdoptable()
                    && volume.isMountedWritable()) {
                return volume;
            }
        }
        return null;
    }

三、获取权限后,实现媒体库更新:

public void scanFile(String filePath) {
        try {
            MediaScannerConnection.scanFile(this, new String[]{filePath}, null,
                    new MediaScannerConnection.OnScanCompletedListener() {
                        public void onScanCompleted(String path, Uri uri) {
                            android.util.Log.d("--", "Scanned " + path + ":");
                            android.util.Log.d("--", "-> uri=" + uri);
                        }
                    });
        } catch (Exception e) {
            e.printStackTrace();
        }
   }

完成以上,即可在启动时自动更新媒体库。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值