在Android5.0往后的平臺上,你想通過單純的調(diào)用File.delete()或著ContentResolver.delete()來刪除Sdcard上的文件會刪除失敗。前者提示沒有權(quán)限,后者僅僅刪除數(shù)據(jù)庫文件對應(yīng)的信息,但物理文件還存在,手機重啟后MediaScanner會重新將其信息掃描進(jìn)數(shù)據(jù)庫。
成都創(chuàng)新互聯(lián)公司主要從事網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)阿壩州,十年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18982081108那既然如此,有沒有什么辦法可以刪除Sdcard上的文件呢?
root?
將apk放在system下?
這些都太小題大做了,下面介紹一個在非root情況下使用平臺正規(guī)api刪除sdcard文件的方法。
在Android平臺中,提供了一個名為DocumenstProvider的內(nèi)容提供者,當(dāng)然要使用它就必需繼承它。它的作用就是幫助開發(fā)者構(gòu)件一棵Documents樹,樹的根節(jié)點及文件目錄的根結(jié)點。底下的文件或文件夾就是這棵樹的枝葉。說了這么多,我們來介紹一下今天的主角:ExternalStorageProvider,他是繼承自DocumenstProvider的一個平臺類,通過它我們就能間接的刪除Sdcard上的文件了。
final Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);startActivityForResult(intent, 42);
首先通過上面的代碼打開系統(tǒng)的DocumentsUI界面,并選擇Sdcard的更目錄,并點擊確認(rèn),如下圖:
接著在onActivityResult中獲取sdcard在ExternalStorageProvider中對應(yīng)的uri
Uri data = intent.getData();//data:content://com.android.externalstorage.documents/tree/0C3D-8650%3A
其中0C3D-8650%3A為sdcard的唯一標(biāo)示符,也可看作ID,我們這里記作SDCARD_UUID,并且把上面的Uri data記作SDCARD_URI
接下來獲取讀寫權(quán)限:
getContentResolver().takePersistableUriPermission(data,Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
到這里我們已經(jīng)拿到刪除Sdcard文件的權(quán)限了,接下來就是怎么去刪了。
//SDCARD_URI上面獲得的//SDCARD_UUID也是上面獲得的//filePath為文件在Sdcard下的相對路徑Uri uri = DocumentsContract.buildDocumentUriUsingTree(SDCARD_URI, SDCARD_UUID + ":" + filePath); DocumentsContract.deleteDocument(mContentResolver, uri);
OK,Sdcard的文件工程刪除。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。