Android获取磁盘监听和路径

Android  小知识  2024年9月4日 pm6:02发布3个月前更新 城堡大人
143 0 0

前言

简单记录一监听和获取USB真实路径,记录一下方便自己查阅。

系统应用下测试!

正文

磁盘监听

监听磁盘挂载卸载这个就是Android原生接口广播监听,这个之前有介绍过。

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_MEDIA_MOUNTED);
intentFilter.addAction(Intent.ACTION_MEDIA_EJECT);
//intentFilter.addAction(Intent.ACTION_MEDIA_REMOVED);
intentFilter.addDataScheme("file");
intentFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
registerReceiver(mMountedReceiver, intentFilter);

还有一种方式,监听设备USB_DEVICE_ATTACHEDUSB_DEVICE_DETACHED

IntentFilter intentFilter= new IntentFilter();
intentFilter.addAction("android.hardware.usb.action.USB_DEVICE_ATTACHED");
intentFilter.addAction("android.hardware.usb.action.USB_DEVICE_DETACHED");
registerReceiver(mDeviceReceiver, intentFilter);
  1. 收到USB_DEVICE_ATTACHED广播并不是表示磁盘挂载成功了

  2. 收到ACTION_MEDIA_MOUNTED广播才表示磁盘挂载成功

获取磁盘路径

遍历所有的VolumeInfo

//这里只是为了打印信息,没有对代码优化
private void findVolumePath() {
    if (null == mStorageManager) {
        mStorageManager = (StorageManager) getSystemService(Context.STORAGE_SERVICE);
    }
    List<VolumeInfo> listVolumeInfo = mStorageManager.getVolumes();
    if (null != listVolumeInfo) {
        for (VolumeInfo volumeInfo : listVolumeInfo) {
            Log.d(TAG, "findVolumePath volumeInfo : " + volumeInfo);
            if (null != volumeInfo) {
                DiskInfo diskInfo = volumeInfo.getDisk();
                Log.d(TAG, "findVolumePath type : " + volumeInfo.getType() + " ,  diskInfo: " + diskInfo);
                if (null != diskInfo) {
                    Log.d(TAG, "findVolumePath isUsb() : " + diskInfo.isUsb());
                    if (diskInfo.isUsb()) {
                        Log.d(TAG, "findVolumePath sysPath : " + diskInfo.sysPath);
                    }
                }
            }
        }
    }
}

上面打印的sysPath就是磁盘真实的挂载路径。

完整日志

//磁盘卸载
mMountedReceiver 222 action : android.intent.action.MEDIA_EJECT
findVolumePath volumeInfo : VolumeInfo{private}:
findVolumePath type : 1 ,  diskInfo: null
findVolumePath volumeInfo : VolumeInfo{emulated}:
findVolumePath type : 2 ,  diskInfo: null
findVolumePath volumeInfo : VolumeInfo{public:8,4}:
findVolumePath type : 0 ,  diskInfo: DiskInfo{disk:8,0}:
findVolumePath isUsb() : true
findVolumePath sysPath : /sys//devices/platform/soc/13050000.usb/usb4/4-1/4-1:1.0/host0/target0:0:0/0:0:0:0/block/sda
mDeviceReceiver 111 action : android.hardware.usb.action.USB_DEVICE_DETACHED
//磁盘挂载
mDeviceReceiver 111 action : android.hardware.usb.action.USB_DEVICE_ATTACHED
mMountedReceiver 222 action : android.intent.action.MEDIA_MOUNTED
findVolumePath volumeInfo : VolumeInfo{private}:
findVolumePath type : 1 ,  diskInfo: null
findVolumePath volumeInfo : VolumeInfo{emulated}:
findVolumePath type : 2 ,  diskInfo: null
findVolumePath volumeInfo : VolumeInfo{public:8,4}:
findVolumePath type : 0 ,  diskInfo: DiskInfo{disk:8,0}:
findVolumePath isUsb() : true
findVolumePath sysPath : /sys//devices/platform/soc/13050000.usb/usb4/4-1/4-1:1.0/host0/target0:0:0/0:0:0:0/block/sda

参考文章

 历史上的今天

  1. 2023: RadioButton和CheckBox介绍(0条评论)
  2. 2020: AndroidManifest.xml的configChanges配置简介(0条评论)
  3. 2019: 陆文夫:脚步声(0条评论)
版权声明 1、 本站名称: 笔友城堡
2、 本站网址: https://www.biumall.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权,请留言

暂无评论

暂无评论...

随机推荐

Android内存泄露检测之LeakCanary的简单使用

前言使用MAT来分析内存问题,有一些门槛,会有一些难度,并且效率也不是很高,对于一个内存泄漏问题,可能要进行多次排查和对比才能找到问题原因。为了能够简单迅速的发现内存泄漏,Square公司基于MAT开源了LeakCanary。PS:有不同版本的leakcanary出现不同的问题,因此2021...

胡适:赠与今年的大学毕业生

这一两个星期里,各地的大学都有毕业的班次,都有很多的毕业生离开学校去开始他们的成人事业。学生的生活是一种享有特殊优待的生活,不妨幼稚一点,不妨吵吵闹闹,社会都能纵容他们,不肯严格的要他们负行为的责任。现在他们要撑起自己的肩膀来挑他们自己的担子了。在这个国难最紧急的年头,他们的担子真不轻! 我们祝他们...

关于插入部分无线鼠标Android应用重启问题

前言在Android 9.0的项目中,测试工程师验证问题时插入某些USB的无线鼠标,会导致当前的APK会销毁然后重启一次,重新走一次生命周期。Activity为啥会重启?为什么会重启?我们大概率的知道,一般App重启大致有如下原因:APP异常了(微信存在这样的问题,闪退重启)机器状...

Android Studio使用makejar导出jar包

前言记录一下如何使用makejar导出jar包。正文这里lib库PhotoView来说。PhotoView/build.gradle 新增如下内容:task clearJar(type: Delete) { delete rootProject.file("PhotoView/j...

张爱玲:花落的声音

家中养了玫瑰,没过多少天,就在夜深人静的时候,听到了花落的声音。起先是试探性的一声“啪”,像一滴雨打在桌面。紧接着,纷至沓来的“啪啪”声中,无数中弹的蝴蝶纷纷从高空跌落下来。那一刻的夜真静啊,静得听自己的呼吸犹如倾听涨落的潮汐。整个人都被花落的声音吊在半空,尖着耳朵,听得心里一惊一惊的,像听一个正...

王小波:人为什么活着

银河,你好!我在家里给你写信。你问我人为什么活着,我哪能知道啊?我又不是牧师。释迦牟尼为了解决这个问题出了家,结果得到的结论是人活着为了涅,就是死。这简直近乎开玩笑了。不过活着总得死,这一点是不错的,我有时对这一点也很不满意呢。还有人活着有时候有点闷,这也是很不愉快的。过去我想,人活着都得为别人...