900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Android中使用外置存储设备(U盘/移动硬盘等)

Android中使用外置存储设备(U盘/移动硬盘等)

时间:2019-08-11 19:23:23

相关推荐

Android中使用外置存储设备(U盘/移动硬盘等)

本来是计划每个月至少写2篇博客的,可是的第一个月就失言了。上个月实在是太忙了,从元旦收假上班开始,就开启了天天加班的新年征程,周六一样不放过。谁让我是IT人呢?不过偶尔加班也没什么不好,对工作负责,做出让客户满意的产品是我们职场人必须具备的东西。好了,费话不多说,今天记录的是安卓项目中如何使用外置的存储设备(U盘/移动硬盘等)。项目中需要把大量数据(如视频文件等)保存备份起来,仅仅依靠我们手机或安卓盒子这点存储容量,远远不能实现我们的要求。所以项目上要求通过USB接入个置的移动硬盘(1T)来存储我们的数据。目前做的盒子项目,但是手机项目盒子项目开发起来没有啥区别,那就直接开始上代码。

public class MainActivity extends Activity {//定义监听存储设备的插入及拔出广播private MonitorUsbReceiver usbReceiver;//定义外置存储设备的文件(对应根目录文件)private File mExternalFile = null;//查询到所有存储设备列表(盒子有自带存储卡,还有外接入的U盘或移动硬盘)private List<StorageInfo> storageInfos = new ArrayList<>();/*** 注册广播*/private void registerReceiver() {usbReceiver = new MonitorUsbReceiver();IntentFilter intentFilter = new IntentFilter(Intent.ACTION_MEDIA_MOUNTED);//添加广播对应ACTIONintentFilter.addAction(Intent.ACTION_MEDIA_EJECT);intentFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);intentFilter.addAction(Intent.ACTION_SCREEN_OFF);intentFilter.addDataScheme("file");registerReceiver(usbReceiver, intentFilter);}@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);registerReceiver();}/*** 获取U盘中指定的文件** @param fileName* @return*/private File getBackupsDbFile(String fileName) {List<File> files = new ArrayList<>();if (null != mExternalFile && mExternalFile.listFiles() != null) {for (File usbFile : mExternalFile.listFiles()) {if (usbFile.getName().equals(fileName)) {files.add(usbFile);}}}if (files.size() > 0) {return files.get(0);} else {return null;}}@Overrideprotected void onDestroy() {super.onDestroy();//不要忘记在这里解注册广播unregisterReceiver(usbReceiver);}public class MonitorUsbReceiver extends BroadcastReceiver {private final String ROOT_PATH = "/storage";private final String SD_PATH = "/storage/external_storage/sdcard1";private final String SD_PATH_EQUAL = "/storage/sdcard1";@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();Uri uri = intent.getData();String path = uri.getPath();if (action == null || path == null)return;if (action.equals(Intent.ACTION_MEDIA_MOUNTED)) {Toast.makeText(context, "外置存储设备已插入", Toast.LENGTH_SHORT).show();//监听到存储设备插入后,开始进行文件相关操作getBackupsDbFile("test.apk");//比如获取其中的文件,对文件进行操作(我在项目中有一个功能就是获取指定的apk文件,然后安装apk)} else if (action.equals(Intent.ACTION_MEDIA_EJECT)) {Toast.makeText(context, "外置存储设备已拔出", Toast.LENGTH_SHORT).show();}}}}

代码基本上就是这样,主要是介绍获取外置存储设备方法,具体的文件操作没有啥好说的,java原生api就可以了。不过要注意的是:

要操作外置存储设备,除了要求支持诸如OTG功能外,还要添加存储卡读写权限,其中读取外接入硬盘要求系统 权限,我们项目中是通过修改硬件来实现这个功能的。网上有个 比较好用的框架:/magnusja/libaums,用来操作外置U盘等,之前项目中也在用,但是这个项目目前 似乎只支持FAT32格式 的,不支持NTFS格式的,但FAT32最大支持32G的存储,所以我们要使用NTFS格式的存储设备,这个框架暂时用不上,或许我还没有发现对应的使用的方法。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。