2014-04-10 162 views
5

我搜索並閱讀了android開發者文件,但是我沒有找到任何令人滿意的內容提供者授予uri權限的答案。任何人都可以解釋得更詳細,更簡單。我的問題是: uri使用什麼授權? 授權uri權限真假之間的區別是什麼 什麼時候應該使用true?當錯誤? 和任何更多的細節表示讚賞。內容提供者授予uri權限

回答

5

uri使用的是什麼?

「授予Uri權限」功能,可以讓你有一個ContentProvider即通常由第三方無法訪問,但選擇性地允許訪問單個Uri值個別第三方應用程序的時間很短的時間(例如,足夠長的時間查看供應商提供的PDF)。

什麼是授予URI許可之間的區別真假

android:grantUriPermissions="true"表明您的Java代碼可以使用FLAG_GRANT_READ_URI_PERMISSIONFLAG_GRANT_WRITE_URI_PERMISSION由該ContentProvider擔任任何Uri

android:grantUriPermissions="false"表示僅由子指定的Uri<grant-uri-permission>元素可以與FLAG_GRANT_READ_URI_PERMISSIONFLAG_GRANT_WRITE_URI_PERMISSION使用。

+0

我仍然在同一點,不明白爲什麼授權uri使用,當我們應該使用。你能否更詳細地解釋一下,並像初級開發者那樣告訴我。 – Android

1

假設您需要郵寄應用程序緩存目錄中的某個文件。

除非您指定其他應用程序可以訪問您的應用程序的內容,否則其他應用程序無法訪問該文件。爲此,您創建內容提供者,並說,所有的URI都以表單內容://com.your.app/file將您重定向到您的應用程序緩存目錄。

某些代碼:

File f = ...; // Some local file. 
Uri uri = Uri.parse("content://com.your.app/" + f.getName()); 
Intent intent = new Intent(Intent.ACTION_SEND); 
intent.setType("text/plain"); 
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject"); 
intent.putExtra(Intent.EXTRA_TEXT, "Body"); 
intent.putExtra(Intent.EXTRA_STREAM, uri); 

// You only can add flag FLAG_GRANT_READ_URI_PERMISSION if your app has 
// android:grantUriPermissions="true" in manifest or see quote below. 
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
startActivity(Intent.createChooser(intent, "Send Email")); 

正如CommonsWare說:

機器人:grantUriPermissions = 「假」 表示只由子<許可-URI的許可>元素可以指定 的URI值與 FLAG_GRANT_READ_URI_PERMISSION和FLAG_GRANT_WRITE_URI_PERMISSION一起使用。