前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >android 识别U盘以及读写文件的方法

android 识别U盘以及读写文件的方法

作者头像
砸漏
发布2020-11-05 10:13:55
2.7K0
发布2020-11-05 10:13:55
举报
文章被收录于专栏:恩蓝脚本

android中读写文件的需求地方很多,其中就包括了识别U盘,弹出U盘,读写U盘的文件等。

那么,如何实现这些需求呢?笔者简单的说下:

1.识别U盘:

识别U盘的方法只要是用到了2个android官方类。

它们分别为:ContentResolver和AsyncQueryHandler。表现为前者提供内容给后者读取。

作法如下:

1)获取状态并遍历

代码语言:javascript
复制
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);
   }
  };
代码语言:javascript
复制
runnable = new Runnable() {
   @Override
   public void run() {
    mAsyncQueryHandler.startQuery(token, null, uri, projection, selection, selectionArgs,
      orderBy);
   }
  };

2)回调数据给UI

代码语言:javascript
复制
  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是一个自定义类,用于封装我们所需要的数据,以便区分。下面也贴一下这个类

代码语言:javascript
复制
 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)

代码语言:javascript
复制
ContentResolver cr = mContext.getContentResolver();

2)

代码语言:javascript
复制
  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盘的方法,其中在遍历的时候可以自定义一个回调。

代码语言:javascript
复制
QueryNotify(Uri uri, Cursor cursor)

当然参数的个数或者回调的名字可以自定义,笔者在这里有2个参数,第一个主要用于区分类型,第二个作用在于获取数据。

在这里已经有cursor,因此也不是什么难事了,在这里也不bb如何读数据了。

简单的说下如何写数据。

写数据的方法跟弹出U盘大似相同,都是通过

代码语言:javascript
复制
ContentResolver <pre name="code" class="html" ContentValues 

这2个类来实现。

代码语言:javascript
复制
mContext.getContentResolver().update(
          MediaStore.getContentUri(MediaStore.MediaBase.TABLE_NAME, info.id), values,
          "_id=", new String[] { info.id + "" });

如此,就达到了实现更改文件属性的需求了。

如此,大致上就可以完成大致上关于U盘读写识别相关的需求,当然此文也是浅尝辄止,许许多多的细节都要自己去尝试并完善。

以上这篇android 识别U盘以及读写文件的方法就是小编分享给大家的全部内容了,希望能给大家一个参考。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档