如何通过注册广播获知TF插拔事件:
注册广播:
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_MEDIA_EJECT);
filter.addAction(Intent.ACTION_MEDIA_MOUNTED);
filter.addDataScheme("file");
this.registerReceiver(usbReceiver, filter);
filter.addDataScheme("file");
this.registerReceiver(usbReceiver, filter);
如何判断TF、USB是否插入以及获取路径:
通过反射获取类 StorageManager 中的 getVolumePaths 方法获取路径。
private StorageManager mStorageManager;
private static String mInterSD; // 内置sd卡
private static String mExternalSD; // 外置sd卡 1
private static String mUSB; // U盘,外置sd卡2
private String[] mPath;
public void getStorageList() {
if (mActivity != null) {
mStorageManager = (StorageManager)
mActivity.getSystemService(Activity.STORAGE_SERVICE);
try {
mMethodGetPaths = mStorageManager.getClass().getMethod("getVolumePaths");
mPath = (String[]) mMethodGetPaths.invoke(mStorageManager);
if (mPath.length > 0) {
mInterSD= mPath[0];
}
if (mPath.length > 1) {
mExternalSD= mPath[1];
}
if (mPath.length > 2) {
mUSB= mPath[2];
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
public boolean getExternalStorageState() {
if(TextUtils.isEmpty(EXTERNAL_STORAGE_DIRECTORY)) {
return false;
}
try {
return "mounted".equals(Environment.getStorageState(new File(mExternalSD)));
} catch (Exception rex) {
return false;
}
}