android u盘加载_android 识别U盘以及读写文件的方法

本文介绍了在Android中识别U盘、安全弹出U盘以及读写U盘文件的方法。通过ContentResolver和AsyncQueryHandler类实现U盘状态监听,使用ContentResolver更新 Uri 实现文件操作。详细步骤包括U盘识别、安全弹出U盘的代码示例,并提到读写文件的基本过程。
摘要由CSDN通过智能技术生成

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

ContentValues

这2个类来实现。

mContext.getContentResolver().update(

MediaStore.getContentUri(MediaStore.MediaBase.TABLE_NAME, info.id), values,

"_id=", new String[] { info.id + "" });

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

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

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值