2014-01-30 61 views
0

我的存儲訪問架構DocumentsProvider用在我的應用現有的內容提供商來訪問存儲在從我的服務器上的文件,我已經在設備上的本地存儲信息的數據庫表。當我從openDocument訪問內容提供者時,這工作正常。然而,當我從createDocument訪問它時,我得到一個SecurityException:Permission Denial:writing ... uri ...要求導出提供者,或者grantUriPermission()。使用QuickOffice在我的文檔提供程序中創建新文件時會發生這種情況。我的數據庫內容提供程序不會導出,因爲它僅供應用程序內部使用。鑑於兩個提供商都在我的應用程序中,爲什麼我需要數據庫內容提供商的訪問權限?有沒有任何解決方法,導出我的數據庫內容提供者。Android的存儲訪問架構:從DocumentsProvider訪問一個未導出的內容提供商

回答

0

就在你的內部ContentProvider的基礎上,來電者的身份活頁夾執行安全。來電者有一個Uri權限授予,以進入您的DocumentsProvider,但當您轉身訪問您的第二個內部提供商時,它將根據其身份拒絕訪問,因爲它應該如此。

如果你肯定知道來電者應該有機會,你可以暫時釋放自己的身份,並恢復到您的應用程序的正常身份,允許您訪問您的內部供應商。

下面是一個例子:

// Delegate to real provider 
    final long token = Binder.clearCallingIdentity(); 
    try { 
     return getContext().getContentResolver().openFileDescriptor(target, mode); 
    } finally { 
     Binder.restoreCallingIdentity(token); 
    }