日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

android 5.0 sd卡读写,如何使用为Android 5.0(Lollipop)提供的新SD卡存取API?

發(fā)布時(shí)間:2024/9/27 Android 210 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 5.0 sd卡读写,如何使用为Android 5.0(Lollipop)提供的新SD卡存取API? 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

很多好的問(wèn)題,讓我們深入。:)

你如何使用它?

這是一個(gè)偉大的教程與KitKat中的存儲(chǔ)訪問(wèn)框架交互:

在Lollipop中與新的API交互非常相似。要提示用戶選擇目錄樹(shù),您可以啟動(dòng)這樣的意圖:

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);

startActivityForResult(intent, 42);

然后在您的onActivityResult()中,您可以將用戶選擇的Uri傳遞給新的DocumentFile輔助類。這里有一個(gè)快速示例,列出了挑選的目錄中的文件,然后創(chuàng)建一個(gè)新文件:

public void onActivityResult(int requestCode, int resultCode, Intent resultData) {

if (resultCode == RESULT_OK) {

Uri treeUri = resultData.getData();

DocumentFile pickedDir = DocumentFile.fromTreeUri(this, treeUri);

// List all existing files inside picked directory

for (DocumentFile file : pickedDir.listFiles()) {

Log.d(TAG, "Found file " + file.getName() + " with size " + file.length());

}

// Create a new file and write into it

DocumentFile newFile = pickedDir.createFile("text/plain", "My Novel");

OutputStream out = getContentResolver().openOutputStream(newFile.getUri());

out.write("A long time ago...".getBytes());

out.close();

}

}

DocumentFile.getUri()返回的Uri足夠靈活,可以與不同的平臺(tái)API一起使用。例如,您可以使用Intent.setData()與Intent.FLAG_GRANT_READ_URI_PERMISSION共享它。

如果要從本機(jī)代碼訪問(wèn)Uri,可以調(diào)用ContentResolver.openFileDescriptor(),然后使用ParcelFileDescriptor.getFd()或detachFd()獲取傳統(tǒng)的POSIX文件描述符整數(shù)。

如何檢查是否可以訪問(wèn)文件/文件夾?

默認(rèn)情況下,通過(guò)存儲(chǔ)訪問(wèn)框架返回的Uris意圖不會(huì)在重新啟動(dòng)后持久化。平臺(tái)“提供”持久化權(quán)限的能力,但是您仍然需要“獲取”權(quán)限,如果你想要的。在上面的示例中,您可以調(diào)用:

getContentResolver().takePersistableUriPermission(treeUri,

Intent.FLAG_GRANT_READ_URI_PERMISSION |

Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

您可以隨時(shí)通過(guò)ContentResolver.getPersistedUriPermissions()API找出您的應(yīng)用可以訪問(wèn)的持久授權(quán)。如果您不再需要訪問(wèn)持久化Uri,則可以使用ContentResolver.releasePersistableUriPermission()釋放它。

這是在KitKat嗎?

不,我們不能追溯地向平臺(tái)的舊版本添加新功能。

我可以看到哪些應(yīng)用程序有權(quán)訪問(wèn)文件/文件夾?

目前沒(méi)有顯示此內(nèi)容的UI,但您可以在adb shell dumpsys活動(dòng)提供程序輸出的“Granted Uri Permissions”部分中找到詳細(xì)信息。

如果在同一設(shè)備上為多個(gè)用戶安裝了應(yīng)用,會(huì)發(fā)生什么情況?

Uri權(quán)限授予在每個(gè)用戶的基礎(chǔ)上隔離,就像所有其他多用戶平臺(tái)功能一樣。也就是說(shuō),在兩個(gè)不同用戶下運(yùn)行的同一個(gè)應(yīng)用程序沒(méi)有重疊或共享Uri權(quán)限授予。

權(quán)限可以撤銷嗎?

支持DocumentProvider可以隨時(shí)撤銷權(quán)限,例如刪除基于云的文檔時(shí)。發(fā)現(xiàn)這些撤消的權(quán)限的最常見(jiàn)方法是當(dāng)它們從上面提到的ContentResolver.getPersistedUriPermissions()中消失時(shí)。

當(dāng)針對(duì)授權(quán)中涉及的任一應(yīng)用程序清除應(yīng)用數(shù)據(jù)時(shí),也會(huì)撤銷權(quán)限。

將要求在所選文件夾上遞歸授權(quán)工作嗎?

是的,ACTION_OPEN_DOCUMENT_TREE意圖讓您遞歸訪問(wèn)現(xiàn)有和新創(chuàng)建的文件和目錄。

這是否允許多重選擇?

是的,自KitKat以來(lái)支持多重選擇,并且您可以在啟動(dòng)ACTION_OPEN_DOCUMENT意圖時(shí)通過(guò)設(shè)置EXTRA_ALLOW_MULTIPLE來(lái)允許它。您可以使用Intent.setType()或EXTRA_MIME_TYPES縮小可以選擇的文件類型:

有沒(méi)有辦法在模擬器上嘗試新的API?

是的,主共享存儲(chǔ)設(shè)備應(yīng)該出現(xiàn)在選擇器中,甚至在模擬器上。如果您的應(yīng)用程序只使用存儲(chǔ)訪問(wèn)框架訪問(wèn)共享存儲(chǔ),您不再需要READ / WRITE_EXTERNAL_STORAGE權(quán)限,可以刪除它們,或使用android:maxSdkVersion功能僅在較舊的平臺(tái)版本上請(qǐng)求它們。

當(dāng)用戶用另一個(gè)SD卡替換SD卡時(shí)會(huì)發(fā)生什么?

當(dāng)涉及物理介質(zhì)時(shí),底層媒體的UUID(例如FAT序列號(hào))總是被燒錄到返回的Uri中。系統(tǒng)使用它將您連接到用戶最初選擇的媒體,即使用戶在多個(gè)插槽之間交換媒體。

如果用戶在第二張卡中交換,您需要提示您訪問(wèn)新卡。由于系統(tǒng)會(huì)記住基于每個(gè)UUID的授予,如果用戶以后重新插入,您將繼續(xù)先前授予對(duì)原始卡的訪問(wèn)權(quán)限。

總結(jié)

以上是生活随笔為你收集整理的android 5.0 sd卡读写,如何使用为Android 5.0(Lollipop)提供的新SD卡存取API?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。