android应用开发中和U盘打交道的场景其实比较少,这次项目因为是做的汽车的中控系统里的一个视频播放应用,需求是可以播放插入的U盘里的视频。因为之前没有接触过这方面的东西,算是记录一下吧。主要分两步,第一:监听U盘的插拔;第二:获取U盘路径以及扫描该路径下所有文件。
1.监听U盘的插拔:
这里是通过系统广播来实现监听的,网上也有很多这方面的资料,但是很多说的方法是无效的,以下方式在5.0以上系统都验证过了是可以的。手里没有5.0以下的机子所以没验证5.0以下的系统,有需要的同学可以自己验证下。
public class ExternalStorageMonitor {
public static final String TAG = "ExternalStorageMonitor";
public static final String EXTERNAL_STORAGE_DEFAULT_PATH = "/mnt/media_rw";
private static ExternalStorageMonitor mInstance;
private List<ExternalStorageDeviceListener> deviceListeners;
private Context mContext;
public static ExternalStorageMonitor getInstance(Context context){
if (mInstance == null){
synchronized (ExternalStorageMonitor.class){
if (mInstance == null){
mInstance = new ExternalStorageMonitor(context);
}
}
}
return mInstance;
}
private ExternalStorageMonitor(Context context) {
mContext = context.getApplicationContext();
deviceListeners = new ArrayList<>();
}
public boolean init(ExternalStorageDeviceListener listener) {
addDeviceListener(listener);
startMonitor();
// 在系统启动前是否已经有设备插入
detectDevice();
return true;
}
public void addDeviceListener(ExternalStorageDeviceListener listener) {
for (ExternalStorageDeviceListener deviceListener : deviceListeners) {
if (listener == deviceListener) {
return;
}
}
deviceListeners.add(listener);
}
public void removeDeviceListener(ExternalStorageDeviceListener listener) {
deviceListeners.remove(listener);
}
/**
* 开始监听USB设备的插拔
*
*/
pr