android 識別U盤以及讀寫文件的方法
android中讀寫文件的需求地方很多,其中就包括了識別U盤,彈出U盤,讀寫U盤的文件等。
那么,如何實(shí)現(xiàn)這些需求呢?筆者簡單的說下:
1.識別U盤:
識別U盤的方法只要是用到了2個(gè)android官方類。
它們分別為:ContentResolver和AsyncQueryHandler。表現(xiàn)為前者提供內(nèi)容給后者讀取。
作法如下:
1)獲取狀態(tài)并遍歷
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)回調(diào)數(shù)據(jù)給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盤掛載或者拔出時(shí)都會(huì)調(diào)用一次,在這期間會(huì)調(diào)用這個(gè)方法,因?yàn)槲覀兛梢栽谶@回調(diào)用執(zhí)行線程達(dá)到遍歷數(shù)據(jù)的目的,從而數(shù)據(jù)到U盤和文件的個(gè)數(shù),其次是QueryArg是一個(gè)自定義類,用于封裝我們所需要的數(shù)據(jù),以便區(qū)分。下面也貼一下這個(gè)類
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盤的方法很簡單,跟刪除數(shù)據(jù)庫數(shù)據(jù)基本類似。
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盤狀態(tài),對系統(tǒng)無影響。主要原因在于update時(shí)提供的Uri僅影響當(dāng)前包名的內(nèi)容提供者。
要對自身軟件在彈出狀態(tài)下不重新插拔的前提下,實(shí)現(xiàn)重加載筆者暫時(shí)沒看到有相關(guān)方法,若有請告知,謝。
3.讀寫U盤文件
在前面1中有識別U盤的方法,其中在遍歷的時(shí)候可以自定義一個(gè)回調(diào)。
QueryNotify(Uri uri, Cursor cursor)
當(dāng)然參數(shù)的個(gè)數(shù)或者回調(diào)的名字可以自定義,筆者在這里有2個(gè)參數(shù),第一個(gè)主要用于區(qū)分類型,第二個(gè)作用在于獲取數(shù)據(jù)。
在這里已經(jīng)有cursor,因此也不是什么難事了,在這里也不bb如何讀數(shù)據(jù)了。
簡單的說下如何寫數(shù)據(jù)。
寫數(shù)據(jù)的方法跟彈出U盤大似相同,都是通過
ContentResolver <pre name="code" class="html">ContentValues
這2個(gè)類來實(shí)現(xiàn)。
mContext.getContentResolver().update(
MediaStore.getContentUri(MediaStore.MediaBase.TABLE_NAME, info.id), values,
"_id=", new String[] { info.id + "" });
如此,就達(dá)到了實(shí)現(xiàn)更改文件屬性的需求了。
如此,大致上就可以完成大致上關(guān)于U盤讀寫識別相關(guān)的需求,當(dāng)然此文也是淺嘗輒止,許許多多的細(xì)節(jié)都要自己去嘗試并完善。
以上這篇android 識別U盤以及讀寫文件的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Android中invalidate()和postInvalidate() 的區(qū)別及使用方法
Android中實(shí)現(xiàn)view的更新有兩組方法,一組是invalidate,另一組是postInvalidate,其中前者是在UI線程自身中使用,而后者在非UI線程中使用。本文給大家介紹Android中invalidate()和postInvalidate() 的區(qū)別及使用方法,感興趣的朋友一起學(xué)習(xí)吧2016-05-05
Android4.4新增函數(shù)訪問外部存儲(chǔ)
這篇文章主要介紹了Android4.4新增函數(shù)訪問外部存儲(chǔ)的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下2016-10-10
Android如何使用ViewPager2實(shí)現(xiàn)頁面滑動(dòng)切換效果
這篇文章主要給大家介紹了關(guān)于Android如何使用ViewPager2實(shí)現(xiàn)頁面滑動(dòng)切換效果的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-02-02
利用Kotlin實(shí)現(xiàn)破解Android版的微信小游戲--跳一跳
這篇文章主要給大家介紹了關(guān)于利用Kotlin實(shí)現(xiàn)破解Android版微信小游戲--跳一跳的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12
Android Studio通過Artifactory搭建本地倉庫優(yōu)化編譯速度的方法
這篇文章主要介紹了Android Studio通過Artifactory搭建本地倉庫優(yōu)化編譯速度的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
Android自定義控件LinearLayout實(shí)例講解
這篇文章主要為大家詳細(xì)介紹了Android自定義控件LinearLayout實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-05-05
Android利用Service開發(fā)簡單的音樂播放功能
這篇文章主要介紹了Android利用Service開發(fā)簡單的音樂播放功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-04-04
Android中監(jiān)聽Home鍵的4種方法總結(jié)
這篇文章主要介紹了Android中監(jiān)聽Home鍵的4種方法總結(jié),本文講解了onSaveInstanceState方法、onUserLeaveHint方法、ACTION_CLOSE_SYSTEM_DIALOGS、framework PhoneWindowManager.java等4種方法,需要的朋友可以參考下2015-04-04
Android應(yīng)用程序的編譯流程及使用Ant編譯項(xiàng)目的攻略
這篇文章主要介紹了Android應(yīng)用程序的編譯流程及使用Ant編譯項(xiàng)目的攻略,Ant是集編譯測試部署于一體的Java自動(dòng)化工具,要的朋友可以參考下2016-04-04

