2017-01-30 1 views
0

投稿api 23権限を動的にチェックする必要があります。 私の理解によると、このようなフローになるはずですこのコードはどのように権限をチェックするために機能しますか?

1.は許可されていますか?

もしそうなら - >私たちは要求ダイアログボックスを表示することもできません。許可が必要だった

を今すぐGoogleドキュメントによると、コードは次のとおりです。。

// Here, thisActivity is the current activity 
if (ContextCompat.checkSelfPermission(thisActivity, 
       Manifest.permission.READ_CONTACTS) 
     != PackageManager.PERMISSION_GRANTED) { 

    // Should we show an explanation? 
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, 
      Manifest.permission.READ_CONTACTS)) { 

     // Show an explanation to the user *asynchronously* -- don't block 
     // this thread waiting for the user's response! After the user 
     // sees the explanation, try again to request the permission. 

    } else { 

     // No explanation needed, we can request the permission. 

     ActivityCompat.requestPermissions(thisActivity, 
       new String[]{Manifest.permission.READ_CONTACTS}, 
       MY_PERMISSIONS_REQUEST_READ_CONTACTS); 

     // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an 
     // app-defined int constant. The callback method gets the 
     // result of the request. 
    } 
} 

shouldShowRequestPermissionRationale()アプリは、以前にこの権限を要求していると、ユーザが要求を拒否した場合、このメソッドはtrueを返します。 注:ユーザーtur過去に許可要求を出して、許可要求システムダイアログで再度尋ねないオプションを選択した場合、このメソッドはfalseを返します。また、デバイスポリシーによってアプリがそのアクセス許可を持つことが禁止されている場合、このメソッドはfalseを返します。

今、私によれば、 "!" 2番目のifステートメントの演算子。 どこが間違っているのか教えてください。

+0

あなたのご質問はありますか? –

+0

@Adan_SL質問があります - "!" 2番目のif文の演算子? – rajat44

答えて

0

私は使用しているとは思わない! 2番目のifステートメントの演算子。あなたが許可を持っていれば条件がtrueを返します。そのアクセス権で実行したい機能は、そのif文の中に記述する必要があります。 elseが、falseが返された場合、elseが実行されます。これは、ユーザが許可を拒否した場合、またはユーザが過去に「Do not ask again」オプションを選択した場合に発生します。ユーザーが以前に再びを聞かないでくださいをチェックすると

-1

shouldShowRequestPermissionRationale方法は見ることがあります。それは単にユーザーがをヒットしていない、ことを意味していること、trueを返した場合はまだ再びチェックボックスに聞かないでください、代わりに彼/彼女はちょうどを打つを拒否し、あなたが最後の時間を求め許可を与えるスキップします。あなたは再び同じ権限をチェックするなら

さて、あなたは、ユーザーが最後にもう一度を聞かないでくださいをチェックするかもしれないが、これを考慮する必要があります。たとえば、usedがマークしたので、shouldShowRequestPermissionRationaleを呼び出すとfalseが返されます。つまり、その許可をもう一度求めるべきではありません。

そうではありません。オペレーター。

+0

あなたが与えた説明はまったく問題ありません。 しかし、前回 "DAA"チェックボックスをチェックしたので、 'shouldShowRequestPermissionRationale'はfalseを返します。 "IF"ではなく "ELSE"文が実行されます。 – rajat44

+0

onPermissionRequestResultでその許可のステータスのみを解決でき、shouldShowRequestPermissionRationaleを使用して適切なアクション(根拠を表示するか、単に静かにスキップする)を実行できるので、アプリケーションに必要な許可を常に求める必要があります。 – arcone1

関連する問題