android 9.0以上版本,获取U盘路径的两种方式

这篇具有很好参考价值的文章主要介绍了android 9.0以上版本,获取U盘路径的两种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第一种,通过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 for "
                + authority);
    }

    if (!android.Manifest.permission.MANAGE_DOCUMENTS.equals(provider.readPermission)
            || !android.Manifest.permission.MANAGE_DOCUMENTS.equals(provider.writePermission)) {
        Log.w(TAG, "Provider is not protected by MANAGE_DOCUMENTS. Failed to load roots for "
                + authority);
    }

    Cursor cursor = null;
    try {
        cursor = client.query(rootsUri, null, null, null, null);
    } catch (RemoteException e) {
        e.printStackTrace();
    }
    while (cursor.moveToNext()) {
        String rootId = getCursorString(cursor, DocumentsContract.Root.COLUMN_ROOT_ID);
        String title = getCursorString(cursor, DocumentsContract.Root.COLUMN_TITLE);
        String summary = getCursorString(cursor, DocumentsContract.Root.COLUMN_SUMMARY);
        String documentId = getCursorString(cursor, DocumentsContract.Root.COLUMN_DOCUMENT_ID);
        long availableBytes = getCursorLong(cursor, DocumentsContract.Root.COLUMN_AVAILABLE_BYTES);
        long capacityBytes = getCursorLong(cursor, DocumentsContract.Root.COLUMN_CAPACITY_BYTES);
        String mimeTypes = getCursorString(cursor, DocumentsContract.Root.COLUMN_MIME_TYPES);
        String flags = getCursorString(cursor, DocumentsContract.Root.COLUMN_FLAGS);
        DocumentPathBean documentPathBean = new DocumentPathBean(rootId, title, documentId, availableBytes, flags, "/storage/" + rootId);

        Log.e(TAG, "rootId:" + rootId + "flags:" + flags);
        if(!"primary".equals(rootId) && !"home".equals(rootId)){
        Log.e(TAG, "rootId:" + rootId + "title:" + title
                +"summary:" + summary +"documentId:" + documentId +"availableBytes:" + availableBytes +"capacityBytes:" + capacityBytes +"mimeTypes:" + mimeTypes);
        }
    }


}

第二种,通过StorageManager,无法使用的记得用反射;文章来源地址https://www.toymoban.com/news/detail-541661.html

    private HashMap<String, String> getUsbDrivePath() {

        final StorageManager sm = getSystemService(StorageManager.class);
        final List<StorageVolume> volumes = sm.getStorageVolumes();
        HashMap<String, String> paths = new HashMap<>();
        volumes.forEach(new Consumer<StorageVolume>() {
            @Override
            public void accept(StorageVolume volume) {
                File path = volume.getPathFile();

                if (volume.isPrimary()) {
                    Log.v("storageVolume:", "put desc primary");
//                    pathMap.put("primary",path.getAbsolutePath());
                } else {
                    String state = volume.getState();
                    Log.v("storageVolume:", "path" + path.exists());
                    Log.v("storageVolume:", "path isDirectory" + path.isDirectory());
                    Log.v("storageVolume:", "path isFile " + path.isFile());
                    Log.v("storageVolume:", "path " + path.getAbsolutePath());
                    Log.v("storageVolume:", "put desc " + volume.getDescription(DocumentActivity.this) + "volume.isPrimary:" + volume.isPrimary());
//                String mediaStoreVolumeName = storageVolume.getMediaStoreVolumeName();
//                String absolutePath = storageVolume.getDirectory().getAbsolutePath();


                }


            }


        });

        return paths;

    }

到了这里,关于android 9.0以上版本,获取U盘路径的两种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android——自定义Dialog的两种常见方式

    通常我们只需要关注三个回调方法: onCreateDialog:创建一个dialog外壳 onCreateView:给dialog外壳填充自己想要的样式布局 onViewCreated:这里面给布局的view进行初始化操作,可以设置一些监听器等等 事例: 自定义布局文件:随便写一个

    2024年02月16日
    浏览(39)
  • Android Studio 显示gif动图的两种方式

    将所需的.gif图片复制到drawable文件夹下,如下图所示。 在布局文件添加ImageView代码段,如下所示。 在MainActivity添加逻辑代码段,如下所示。 将下载的glide-3-6-0.jar复制到Project视图下的app-libs文件夹中,并右键选择Add As library导入包,如下图所示。 glide-3-6-0.jar的下载链接:htt

    2024年02月16日
    浏览(48)
  • Android Studio 导入framework.jar的两种方式

    第一种:把framework的jar包放到工程目录外 1、把framework.jar包放到当前工程以外的地方。例如我放到SDK目录下。如下图  2、在项目根目录的gradle中引入jar包  导入后我们可以在项目中导入的包 External Libraries 中找到“Gradle D”的包。是因为我的SDK在D盘下,framework包放在SDK包下。

    2024年02月09日
    浏览(56)
  • MyBatis中获取参数值的两种方式:${} 和 #{},以及它们之间区别是什么?

    ${}:的本质就是字符串拼接 #{}:的本质就是占位符赋值 ① 使用${}占位符,在字符串拼接的方式拼接sql,若为字符串类型或为日期类型的字段进行赋值时,需要手动加单引号 ② 使用#{}占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时,自动添加单引

    2024年02月04日
    浏览(43)
  • 用Python获取弹幕的两种方式(一种简单但量少,另一量大管饱)

    弹幕可以给观众一种“实时互动”的错觉,虽然不同弹幕的发送时间有所区别,但是其只会在视频中特定的一个时间点出现,因此在相同时刻发送的弹幕基本上也具有相同的主题,在参与评论时就会有与其他观众同时评论的错觉。 在国内的视频网站里,弹幕先是从A站被大家

    2023年04月27日
    浏览(36)
  • 阿里二面:adb 连接 Android 手机的两种方式,看完你就懂了...

    随着现在移动端技术的突飞猛进,导致现在市场上,APP 应用数不胜数,那对于测试工程师而言,对于 APP 的测试,那基本就是一个必修课了。 今天,我就来给大家介绍一下,adb 连接 Android 手机的两种方式 先使用 USB 线,连接 PC 和手机 通过 PC 给手机安装 adb 驱动,下载好安

    2024年03月22日
    浏览(50)
  • 华为二面:adb 连接 Android 手机的两种方式,看完你就懂了

    随着现在移动端技术的突飞猛进,导致现在市场上,APP 应用数不胜数,那对于测试工程师而言,对于 APP 的测试,那基本就是一个必修课了。 今天,我就来给大家介绍一下,adb 连接 Android 手机的两种方式 先使用 USB 线,连接 PC 和手机 通过 PC 给手机安装 adb 驱动,下载好安

    2024年02月09日
    浏览(53)
  • Android 两种方获取U盘的挂载路径

    Android 两种方获取U盘的挂载路径 第一种

    2024年02月14日
    浏览(49)
  • 【钉钉小程序】钉钉小程序预览文件的两种方式,从获取权限到预览文件全过程

    最近写钉钉小程序项目过程中,要实现页面展示pdf、word、ppt等文件的功能。在网上搜了很多文章,研究了很久,总结了一下有两种实现该功能的方法,方法一:借助web-view组件打开外部网页;方法二:通过上传到钉盘,从钉盘打开文件。具体过程如下。 钉钉开放文档-web-vie

    2024年02月15日
    浏览(174)
  • Android 9.0以上 连接wifi失败 解决方案

    Android9开始,WIFI那块的API发生了改变: addNetwork(WifiConfiguration config) 此方法在API级别Q中已弃用) 见addNetworkSuggestions(java.util.List), removeNetworkSuggestions(java.util.List)新的API添加Wi-Fi网络进行审议时,自动连接到无线网络。 兼容性注意:对于目标Build.VERSION_CODES.Q或更高的应用程序

    2024年02月12日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包