android读取usb中的文件

自android3.1以后Android增加了操作USB设备的API。 官网地址:http://developer.android.com/guide/topics/connectivity/usb/host.html

网上也有很多这方面的文章,不过大多是都很复杂,和我们所熟悉的文件的读写操作不同,
最近公司要写一个多媒体播放软件,可以播放usb里面的视频,查了很多资料都没有发现怎么做,最后自己想了一个折中的方法,和大家分享一下,希望能帮到大家,当然要是知道正确的做法的还请告知。

为了有更好的体验我们需要监听usb的连接和断开,这里我们可以监听usb连接状态的广播,代码如下:

//注册广播的方法
private void registerUsbBroadcast() {
        IntentFilter iFilter = new IntentFilter(); 
        iFilter.addAction(Intent.ACTION_MEDIA_EJECT);
        iFilter.addAction(Intent.ACTION_MEDIA_MOUNTED);  
        iFilter.addAction(Intent.ACTION_MEDIA_REMOVED);
        iFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
        iFilter.addDataScheme("file"); 
        registerReceiver(mBroadcastReceiver, iFilter);
}

private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
       @Override
       public void onReceive(Context context, Intent intent) {
              String action = intent.getAction();
              if (action.equals(Intent.ACTION_MEDIA_EJECT)) {
                    //USB设备移除,更新UI 
              } else if (action.equals(Intent.ACTION_MEDIA_MOUNTED)) {
                  //USB设备挂载,更新UI
                  // String usbPath = intent.getDataString();(usb在手机上的路径)

             }
      }
};

相信大家也看到了,其实在广播接受者中我们可以通过intent.getDataString()来获取usb在手机中的路径,但是要是用户在打开软件前已经插入了u盘,那么我们就接收不到这个广播,也就无法获取到u盘在手机上的路径了,可能大家已经想到了用静态注册广播,但是我试了在软件杀死的情况下我们是接收不到这个广播的(6.0系统)。

以下是我自己通过观察发现的一个折中的获取u盘在手机上的路径的方法:

通过多次的实验我发现了u盘的路径在/storage/u盘路径”,于是我看了一下/storage下的文件,发现u盘没有插入的时候就三个文件夹,其中一个就是我们的sd卡路径,剩下的两个都无法读取,于是我的思路就是:遍历/storage目录下的文件夹,判断文件夹是否可读,在可读的文件夹中我们排除sd卡目录,那么剩下我都认为是u盘的路径,具体代码如下:

File storage = new File("/storage");
File[] files = storage.listFiles();
for (final File file : files) {if (file.canRead()) {
     if (!file.getName().equals(Environment.getExternalStorageDirectory().getName())) {
          //满足该条件的文件夹就是u盘在手机上的目录 
      }
}

你可能感兴趣的:(android读取usb中的文件)