2012-07-27 39 views
1

我有導出的ContentProvider,我用它來訪問用戶想要通過其他應用程序共享的圖像。簡單地說,用戶點擊我應用程序中的分享按鈕,向她展示可分享圖像的應用程序列表,並選擇其中一個應用程序(其調用我的ContentProvider以獲取基於Uri的圖像)。Lint Warning ExportedContentProvider

但是,有一個皮棉警告ExportedContentProvider說我應該使用權限。如果我設置了權限,其他應用程序將如何知道訪問圖像的權限?

回答

0

Lint正在談論的權限,與「訪問圖像」無關。它更多的是關於「使用你的ContentProvider」。

當用戶選擇一個應用程序來共享一個圖像時,你會給這個應用程序一個URI,它不會是你的ContentProvider。喜歡的東西:

intent.putExtra(Intent.EXTRA_STREAM, uri); 

讓河畔你給到共享應用程序的URI表示的路徑,圖像文件。 不是你用來查詢你的提供者的Uri。

爲了避免皮棉警告,你可以在你的清單的provider tag添加

android:exported="false" 

您的供應商將只能在您的應用程序中使用。

+0

我知道Lint正在討論使用我的ContentProvider。如果我將導出爲false,那麼即使它們具有uri,其他應用程序也無法從contentProvider訪問圖像。 – 2012-07-27 13:42:46

+0

這是因爲你讓Uri訪問提供者的圖像。您應該改爲使用圖像文件的Uri。您要給共享應用程序的Uri必須代表SDCard上文件的路徑或類似的文件。 Uri不應該代表與您的ContentProvider相關的內容。 – 2012-07-27 14:00:11

+1

我不同意這種方法。推薦的共享圖像的方式是提供一個URI,然後應用ContentProvider實際提供數據。爲SD卡上的文件提供路徑並不理想(文件權限,位置可能會更改,也許您不希望文件直接訪問,而只能通過應用程序訪問等)。流行的應用程序使用內容提供商分享他們的數據。 – 2012-07-30 08:05:30