android 识别U盘以及读写文件

原创 2016年08月29日 10:29:05

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 OTG 读写U盘文件

最近项目需要做一个关于OTG的功能,其实也就使用到U盘的文件读取,一般这种需求是不需要的,因为大部分的系统都会自动挂载U盘,但是个别系统还是需要自己去实现,查了很多资料都没有找到一个完整的能用的例子,...
  • csdn635406113
  • csdn635406113
  • 2017年04月12日 18:29
  • 5895

Android开发——遍历读写U盘、SD卡等外部存储

1.首先需要得到挂载在手机上的有哪些盘符 这里需要用到一个被系统隐藏的方法,即StorageManager下的getVolumePaths()方法。具体通过反射得到。方法返回值为字符串数组,在我的真...
  • SEU_Calvin
  • SEU_Calvin
  • 2016年07月15日 10:26
  • 17081

Android 获取外接储存的设备路径(如挂载的U盘)

插入U盘时获取U盘路径 开机时获取挂载U盘的路径
  • Zou_pl
  • Zou_pl
  • 2017年06月26日 20:05
  • 3636

android 关于读取SD卡或者U盘的一些方法

最近做的项目牵涉到读取设备
  • lilidejing
  • lilidejing
  • 2014年04月24日 09:17
  • 5292

Android实现识别/挂载U盘

关于U盘的挂载可以先看一下这篇文章http://blog.csdn.net/yimiyangguang1314/article/details/6298276,作者是将U盘直接挂载在SD卡下。我的机器...
  • goleftgoright
  • goleftgoright
  • 2012年09月24日 11:41
  • 24163

android-USB-OTG 外部设备通讯 USB插拔检测

android程序在运行期间,可以检测到外部设备(例如STM32设备,HID设备,U盘等)的插入、拔出事件,然后和外部设备通讯存取数据。 现已经实现功能需求。在此做个简单总结。 以下为USB设...
  • hetangbian
  • hetangbian
  • 2016年03月04日 13:19
  • 6240

android 检测USB是U盘还是外设

1 UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);              HashM...
  • u012254541
  • u012254541
  • 2017年07月28日 17:59
  • 372

android设备应用读取外接U盘设备方法

废话不多说,上正文,由于现在android移植到各种平台上,很多android设备都可以支持U盘,但android API目前只有SD卡的获取,没有U盘的获取,支持U盘的设备也是各个厂商自己折腾,不经...
  • yxljl1219
  • yxljl1219
  • 2013年12月06日 10:08
  • 5641

Android设备与外接U盘实现数据读取操作

现在越来越多手机支持OTG功能,通过OTG可以实现与外接入的U盘等USB设备实现数据传输。关于OTG,可以参考: http://blog.csdn.net/srw11/article/details/...
  • true100
  • true100
  • 2017年09月01日 17:38
  • 3530

Android开发之USB数据通信

Android开发中USB串口通信开发主要涉及到以下几个类及相应的方法: 1 ,UsbManager:负责管理USB设备的类,你可以在相应代码中通过以下方法获得//获取UsbManager实例方法 ...
  • true100
  • true100
  • 2016年06月30日 17:16
  • 18351
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android 识别U盘以及读写文件
举报原因:
原因补充:

(最多只允许输入30个字)