android中读写文件的需求地方很多,其中就包括了识别U盘,弹出U盘,读写U盘的文件等。
那么,如何实现这些需求呢?笔者简单的说下:
1.识别U盘:
识别U盘的方法只要是用到了2个android官方类。
它们分别为:ContentResolver和AsyncQueryHandler。表现为前者提供内容给后者读取。
作法如下:
1)获取状态并遍历
contentObserver = new ContentObserver(mHandler) { @Override public void onChange(boolean selfChange, Uri uri) { super.onChange(selfChange, uri); mHandler.removeCallbacks(arg.runnable); mHandler.postDelayed(arg.runnable, DELAY); } };
runnable = new Runnable() { @Override public void run() { mAsyncQueryHandler.startQuery(token, null, uri, projection, selection, selectionArgs, orderBy); } };
2)回调数据给UI
mAsyncQueryHandler = new AsyncQueryHandler(mCR) { @Override protected void onQueryComplete(int token, Object cookie, Cursor cursor) { super.onQueryComplete(token, cookie, cursor); if (!mArgs.isEmpty() && token < mArgs.size()) { QueryArg arg = mArgs.get(token); if (mCallback != null) { mCallback.QueryNotify(arg.uri, cursor); } if (!cursor.isClosed()) { cursor.close(); } } } };
简单的说下,onchanged是在U盘挂载或者拔出时都会调用一次,在这期间会调用这个方法,因为我们可以在这回调用执行线程达到遍历数据的目的,从而数据到U盘和文件的个数,其次是QueryArg是一个自定义类,用于封装我们所需要的数据,以便区分。下面也贴一下这个类
protected static final class QueryArg { public Uri uri; public String[] projection; public String selection; public String[] selectionArgs; public String orderBy; public ContentObserver contentObserver; public Runnable runnable; public Object cookie; }
2.安全弹出U盘
弹出U盘的方法很简单,跟删除数据库数据基本类似。
1)
ContentResolver cr = mContext.getContentResolver();
2)
ContentValues values = new ContentValues(); values.put(MediaStore.MediaDevice.FIELD_VALID, false); cr.update(MediaStore.MediaDevice.CONTENT_URI, values, where, selectionArgs);
如此就可弹出U盘。注意:在自己软件中弹出U盘仅改变此软件的U盘状态,对系统无影响。主要原因在于update时提供的Uri仅影响当前包名的内容提供者。
要对自身软件在弹出状态下不重新插拔的前提下,实现重加载笔者暂时没看到有相关方法,若有请告知,谢。
3.读写U盘文件
在前面1中有识别U盘的方法,其中在遍历的时候可以自定义一个回调。
QueryNotify(Uri uri, Cursor cursor)
当然参数的个数或者回调的名字可以自定义,笔者在这里有2个参数,第一个主要用于区分类型,第二个作用在于获取数据。
在这里已经有cursor,因此也不是什么难事了,在这里也不bb如何读数据了。
简单的说下如何写数据。
写数据的方法跟弹出U盘大似相同,都是通过
ContentResolver <pre name="code" class="html">ContentValues
这2个类来实现。
mContext.getContentResolver().update( MediaStore.getContentUri(MediaStore.MediaBase.TABLE_NAME, info.id), values, "_id=", new String[] { info.id + "" });
如此,就达到了实现更改文件属性的需求了。
如此,大致上就可以完成大致上关于U盘读写识别相关的需求,当然此文也是浅尝辄止,许许多多的细节都要自己去尝试并完善。
以上这篇android 识别U盘以及读写文件的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。
摘要 本文描述了如何在搭载了 RT-Thread 操作系统的平台上使用 USB Host 读写 U 盘,包括 USB Host 的应用、配置等。并给出了在正点原子 STM32F767 apollo 开发板上验证的演示。 简介 USB(Universal Serial Bus)是一种支持热插拔的通用串行总线。它使用差分信号来传输数据,在 USB 1.0和 USB 1.1 版本中,只支持 1.5Mb/
本文向大家介绍Android开发实现读取Assets下文件及文件写入存储卡的方法,包括了Android开发实现读取Assets下文件及文件写入存储卡的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android开发实现读取Assets下文件及文件写入存储卡的方法。分享给大家供大家参考,具体如下: 调用一个反编译的.so文件,查看起加密和解密情况,需要解析上万的数组,而so文件加密解密
本文向大家介绍Android编程中读写私有文件的方法,包括了Android编程中读写私有文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android编程中读写私有文件的方法。分享给大家供大家参考,具体如下: 所谓私有文件,则是指程序自己能读取,而其它程序没有权限访问的文件,此文件保存在Data.app.程序包.file目录下面。 其中写文件的方法比较简单: 这样可以完成对私有文
本文向大家介绍C#读写文本文件的方法,包括了C#读写文本文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#读写文本文件的方法。分享给大家供大家参考。具体分析如下: System.IO命名空间中的类为托管应用程序提供文件以及其他形式的输入输出。托管i/o的基本构件是流,而流是字节导向的数据的抽象表示。流通过System.IO.Stream类表示. System.IO.FileSt
本文向大家介绍Android 指纹识别详解及实现方法,包括了Android 指纹识别详解及实现方法的使用技巧和注意事项,需要的朋友参考一下 最近项目需要使用到指纹识别的功能,查阅了相关资料后,整理成此文。 指纹识别是在Android 6.0之后新增的功能,因此在使用的时候需要先判断用户手机的系统版本是否支持指纹识别。另外,实际开发场景中,使用指纹的主要场景有两种: 纯本地使用。即用户在本地完成指纹
本文向大家介绍Android如何读写CSV文件方法示例,包括了Android如何读写CSV文件方法示例的使用技巧和注意事项,需要的朋友参考一下 前言 本文主要给大家介绍的是关于Android读写CSV文件的相关内容,CSV也就是Comma-Separated Values逗号分隔的文本文件, 读写csv文件和读写普通文件类似;写的时候给数据之间添加上逗号。 设定存储路径和文件名: 写CSV文件 使