7

我正在開發需要訪問外部存儲的自定義複合視圖。我如何在不涉及外部參與方的情況下執行權限處理,即活動或片段?如何處理Activity和Fragment之外的權限請求?

我知道我可以使用視圖的上下文請求權限,但是如何在視圖內處理onRequestPermissionsResult()?它甚至有可能嗎?

如果這是不可能的,那麼處理這種事情的最優雅的解決方案是什麼?

回答

5

我正在開發一個定製的複合視圖需要訪問外部存儲

恕我直言,這是一個架構的bug。 A View用於向用戶顯示內容,有時用於收集低級輸入事件並將它們轉換爲高級構造(例如點擊,滑動)。 A View不應該與文件,數據庫等有任何連接。請參閱MVC,MVP,MVVM和類似的GUI體系結構模式。

WebView不遵守這個規定會導致問題(例如,在主應用程序線程上執行磁盤I/O)。

如何在不涉及外部參與方的情況下執行權限處理,即活動或片段?

你不行。活動或片段有責任請求權限,可能在您的視圖需要此數據之前。

什麼是最優雅的解決方案來處理這樣的事情?

提取此View成別的東西,由活動或片段,其中與該數據相關聯的訪問的線程,權限和其它工作可以管理的被管理的數據訪問部。

-1

它只能在活動和片段中使用。

你可以做的是在你的View中複製public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults),並在Context或者Activity所在的Activity或Fragment對應的那個方法中調用該方法。