Android获取磁盘监听和路径

Android2024年9月4日 pm6:02发布6天前更新 91es.com站长
61 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、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com[备用域名]
3、 本站内容: 部分来源于网络,仅供站长学习和参考,若侵权请留言
4、 本站打赏: 打赏站长一杯冰可乐 打赏站长一杯冰可乐

暂无评论

暂无评论...

随机推荐

[摘]Android输入法基于GooglePinyin开源代码进行修改

前言 最近有看过别人定制输入法,也想看看怎么实现,因此看到《【Android输入法源码】基于GooglePinyin开源代码进行修改可运行!!!》就下载该作者上传代码...

郁达夫:北平的四季

对于一个已经化为异物的故人,追怀起来,总要先想到他或她的好处;随后再慢慢的想想,则觉得当时所感到的一切坏处,也会变作很可寻味的一些纪念,在回忆里开...

Android中实现延时执行操作的几种方法

总结一下:前三种方式都是运行在子线程中,最后一种是在主线程中的。 实现延时执行操作的几种方法: 1.使用线程的休眠实现延时操作 new Thread() { ...

[NDK开发]Android JNI 中新增JNI层日志打印

前言 在上一篇的基础上《[NDK开发]Android JNI 开发之第一个 JNI 实例》,进行新增log打印 正文 Android.mk 添加 LOCAL_LDLIBS := -llog 完整代码如下...