2016-12-16 41 views
1

如果用戶沒有授予他人權限,我想避免詢問他人的權限。如果一個人不被授予RxPermissions,請避免詢問他人的權限

例如:我要求讀/寫外部存儲和攝像頭,如果用戶拒絕第一個,庫要求相機許可,在這種情況下攝像頭權限是多餘的。

RxPermissions.getInstance(getActivity()).request(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.CAMERA) 
       .subscribe(granted -> { 
        if (granted) { 
         dispatchCamera(); 
        } else { 
         showError(); 
        } 
       }); 

我想我可以使用requestEach,但我不知道如何停止發射項目,如果一個不被許可,並且還我不能得到的最終結果,如果用戶授予的所有權限。

回答

3

我想你的問題已經解決了,但是我會爲其他人解答同樣麻煩的問題。

所有你需要的是takeUntiltakeWhile運營商請求每個(取決於你想要什麼流行爲)。 TakeUntil您取消流,併爲您帶來只有授予的權限許可人否認 inclusive.If你想只得到權限授予事件沒有任何人否認==,請使用takeWhile事件opertator。 只是也許你將不得不使用這段代碼一段時間,因爲我還沒有使用這個庫,也許有些東西的行爲並不完全如你所願。

所以代碼可能是這樣的:

RxPermissions 
     .getInstance(getActivity()) 
     .requestEach(Manifest.permission.WRITE_EXTERNAL_STORAGE, 
     Manifest.permission.READ_EXTERNAL_STORAGE, 
     Manifest.permission.CAMERA) 
     .takeWhile(permission -> permission.granted) 
     //or use take untill if you want to get permission.granted == false event 
     //.takeUntil(permission -> !permission.granted) 
     .subscribe(granted -> { 
     if (granted) { 
      dispatchCamera(); 
     } else { 
      showError(); 
     } 
     }); 
+0

謝謝!遲到總比不到好! – AndroidRuntimeException