溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

android 識別U盤以及讀寫文件的方法

發布時間:2020-09-12 22:21:05 來源:腳本之家 閱讀:330 作者:北冰洋的舊船 欄目:移動開發

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盤以及讀寫文件的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女