Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android編程入門 >> Android 5.0+刪除Sdcard文件

Android 5.0+刪除Sdcard文件

編輯:Android編程入門

在Android5.0往後的平台上,你想通過單純的調用File.delete()或著ContentResolver.delete()來刪除Sdcard上的文件會刪除失敗。前者提示沒有權限,後者僅僅刪除數據庫文件對應的信息,但物理文件還存在,手機重啟後MediaScanner會重新將其信息掃描進數據庫。

那既然如此,有沒有什麼辦法可以刪除Sdcard上的文件呢?

root?

將apk放在system下?

這些都太小題大做了,下面介紹一個在非root情況下使用平台正規api刪除sdcard文件的方法。

Documents

在Android平台中,提供了一個名為DocumenstProvider的內容提供者,當然要使用它就必需繼承它。它的作用就是幫助開發者構件一棵Documents樹,樹的根節點及文件目錄的根結點。底下的文件或文件夾就是這棵樹的枝葉。說了這麼多,我們來介紹一下今天的主角:ExternalStorageProvider,他是繼承自DocumenstProvider的一個平台類,通過它我們就能間接的刪除Sdcard上的文件了。

獲取讀寫權限

final Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, 42);

首先通過上面的代碼打開系統的DocumentsUI界面,並選擇Sdcard的更目錄,並點擊確認,如下圖:

接著在onActivityResult中獲取sdcard在ExternalStorageProvider中對應的uri

 Uri data = intent.getData();
//data:content://com.android.externalstorage.documents/tree/0C3D-8650%3A

其中0C3D-8650%3A為sdcard的唯一標示符,也可看作ID,我們這裡記作SDCARD_UUID,並且把上面的Uri data記作SDCARD_URI

接下來獲取讀寫權限:

getContentResolver().takePersistableUriPermission(data,Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

到這裡我們已經拿到刪除Sdcard文件的權限了,接下來就是怎麼去刪了。

刪除文件

//SDCARD_URI上面獲得的
//SDCARD_UUID也是上面獲得的
//filePath為文件在Sdcard下的相對路徑
Uri uri = DocumentsContract.buildDocumentUriUsingTree(SDCARD_URI, SDCARD_UUID + ":" + filePath);
DocumentsContract.deleteDocument(mContentResolver, uri);

OK,Sdcard的文件工程刪除。

這裡我只是提供一個大概的流程,真正需要用到實際項目中的話這些代碼還有待潤色。需要做平台判斷,Sdcard是否存在判斷,提示用戶做出正確的選擇等。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved