2016-09-30 2 views
-1

私はこの質問を見ましたCan you request permissions synchronously in Android Marshmallow (API 23)'s runtime permissions model?答えはいいえだ。したがって許可リクエストの結果がAndroidで受信されるまでお待ちください

、私は以下のようにコード(簡易版)を追加しました:

public class MyActivity ... { 
    private boolean hasGotPermissionRequestResult = false; 

    @Override 
    public void onCreate(...) { 
     if (ContextCompat.checkSelfPermission(...) == PackageManager.PERMISSION_DENIED) { 
      ActivityCompat.requestPermission(...); 
      while (!hasGotPermissionRequestResult) {} 
     } 
    } 

    @Override 
    public void onRequestPermissionResult(...) { 
     // whether granted or not 
     hasGotPermissionRequestResult = true; 
    } 
} 

しかし、私は私のアプローチは、素敵な、安全かつ効率的であるかどうかを確認していません。

+1

'while(!hasGotPermissionRequestResult){}'は 'onCreate'にありますか? ...基本的には安全ではありませんし、効率的でも効率的でもありません。 – Selvin

+0

経験則:ビジーな待機ループは絶対に使用しないでください。特にUIスレッドではありません –

答えて

0

あなたは、単に不可能です達成しようとして何まあ、しかし、これを克服するには、いくつかの方法があります。

  1. permissionが許可された場合にのみ方法あなたたいコールをトリガします。
  2. ユーザーがアプリを使用するのは、その特定のpermissionが重要であるため、アプリにはfunctionが含まれていないため、教育スクリーンを使用して、このpermissionを使用する理由をユーザーに伝えます。イントロ画面のように。

私はちょうどlibraryがあなたのためにPermissionsを簡素化シナリオのこの種のライブラリーを作成して、それはまたあなたのpermissionにイントロがあり、スタンドアローンActivityとして使用することができます。あなたはGithubでそれをチェックすることができますPermissionHelper Github

関連する問題