Android获取内置卡、内置U盘和挂载U盘路径和内存大小-CSDN博客 上述为获取内存大小的操作。 package com.unre.ucl360.util; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.hardware.usb.UsbDevice; import android.hardware.usb.UsbManager; import android.os.storage.StorageManager; import android.text.TextUtils; import android.util.Log; import java.io.File; import java.lang.reflect.Method; public class UsbReceiver extends BroadcastReceiver { public static final String TAG = "UsbTestUsbTest"; @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); Log.d(TAG, "到了onReceive()这里"); if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {// U盎插入事件UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA DEVICE);String usbPath= getUsbMountPath(device);if(!Textutils.isEmpty(usbPath)){ String usbPath = getUsbMountPath(context); UsbDevice device1 = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); Log.d("USB", "U盘已插入,挂载路径1111:" + device1.getDeviceId()); } else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {// U盘拔出事件 UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); String usbPath = getUsbMountPath(context); if (!TextUtils.isEmpty(usbPath)) { } } } public String getUsbMountPath(Context context) { Log.e(TAG, "到了获取USB路径这里"); String usbPath = ""; StorageManager storageManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE); try { Class<?>[] paramClasses = {}; Method getVolumeList = StorageManager.class.getMethod("getVolumeList", paramClasses); getVolumeList.setAccessible(true); Object[] params = {}; Object[] invokes = (Object[]) getVolumeList.invoke(storageManager, params); if (invokes != null) { for (int i = 0; i < invokes.length; i++) { Object obj = invokes[i]; Method getPath = obj.getClass().getMethod("getPathFile", new Class[0]); File file = (File) getPath.invoke(obj, new Object[0]); if ((file.exists()) && (file.isDirectory())) { Method isRemovable = obj.getClass().getMethod("isRemovable", new Class[0]); Boolean is_removable = (Boolean) isRemovable.invoke(obj, new Object[0]); Method getState = obj.getClass().getMethod("getState", new Class[0]); String storageState = (String) getState.invoke(obj, new Object[0]); Log.e(TAG, "path:" + file.getAbsolutePath() + ",State:" + storageState + ",isRemovable:" + is_removable); if (storageState.equals("mounted") || storageState.equals("removed")) { if (is_removable) { Log.e(TAG, "外部SD卡存储路径 " + file.getAbsolutePath()); } else { Log.e(TAG, "手机内部存储路径 " + file.getAbsolutePath()); } usbPath = file.getAbsolutePath(); } } } } } /*catch (NoSuchMethodException e1) { e1.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } */ catch (Exception e) { e.printStackTrace(); Log.e(TAG, e.getMessage()); } return usbPath; } }
使用:
///注册 UsbReceiver usbReceiver = new UsbReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED); filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED); registerReceiver(usbReceiver,filter); ///取消注册 unregisterReceiver(usbReceiver); ///发送广播 Intent intent = new Intent(); intent.setAction(UsbManager.ACTION_USB_DEVICE_ATTACHED); intent.setAction(UsbManager.ACTION_USB_DEVICE_DETACHED); sendBroadcast(intent);