2016-09-23 3 views
0

私は食品配達のためのアプリを作っています。私のアプリでは、ユーザーがアンドロイドのスマートフォン版のマシュマロウを使用しているときに、私のアプリはSMSの読み取りの許可のために初めて尋ねません。しかし、ユーザーが次回にアプリケーションを開くとき、私のアプリは許可を求めます。私は何が問題なのか分からない。私は、ユーザーが最初にアクセス許可を求める必要がありますアプリケーションを開くときにそれをしたい。代わりに2回目。私のアプリmarshmallowのランタイムアクセス権について初めて質問しませんか?

は、これは私が私の活動の私onCreate()方法では、このメソッドを呼び出しています許可を尋ねるための私の方法です:

private void permissionForMarshMallow() { 

     int permissionCheck = ContextCompat.checkSelfPermission(LoginActivity.this, 
       Manifest.permission.READ_SMS); 

     if (ContextCompat.checkSelfPermission(LoginActivity.this, 
       Manifest.permission.READ_SMS) 
       != PackageManager.PERMISSION_GRANTED) { 


      if (ActivityCompat.shouldShowRequestPermissionRationale(LoginActivity.this, 
        Manifest.permission.READ_SMS)) { 

       Log.e("permission...granted", "permission granted............"); 


      } else { 



       ActivityCompat.requestPermissions(LoginActivity.this, 
         new String[]{Manifest.permission.READ_SMS}, 
         REQUEST_CODE_ASK_SINGLE_PERMISSION); 


      } 
     } 
    } 

を、これはオーバーライドメソッドonRequestPermissionsResult()です:

@Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 


     switch (requestCode) { 

      case REQUEST_CODE_ASK_SINGLE_PERMISSION: 
       if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

       } else { 


        // Toast.makeText(LoginActivity.this, "Permission Denied", Toast.LENGTH_SHORT).show(); 
       } 
       break; 
      default: 
       super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     } 


    } 

は誰もが言うことができます私はそれが二回目ではなく、最初に許可を求めるアプリを作る方法はありますか?

+0

「 '' targetSdkVersion'''は何ですか? –

+1

ターゲットバージョンが22 –

+0

かどうかを確認してください。私はこの読書をお勧めします:https://inthecheesefactory.com/blog/things-you-need-to-know-about-android-m-permission-developer-edition/en助けてください。 –

答えて

2

コードにロジックの欠陥があります。コードの実行方法は次のとおりです。

  1. 私たちの許可があるかどうかを確認してください。
  2. 許可がない場合:
    • 許可を得るべきですか?
      • そうならば、そうでない場合
      • "付与された権限を" ログ、そしてときあなたはいけないので、基本的に、あなたが許可を要求している許可

を要求します。許可を求めるべきである場合は、許可を求める代わりに、「許可された許可」を記録してください。 コードをちょっと変更するだけです:

private void permissionForMarshmallow() { 

     int permissionCheck = ContextCompat.checkSelfPermission(LoginActivity.this, Manifest.permission.READ_SMS); 

     if (ContextCompat.checkSelfPermission(LoginActivity.this, Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED) { 

      ActivityCompat.requestPermissions(LoginActivity.this, new String[]{Manifest.permission.READ_SMS}, REQUEST_CODE_ASK_SINGLE_PERMISSION); 

     } 
     else { 
      // user probably checked "never ask again" - we should not ask for permission. 
     } 
    } 
} 
+0

Thanx!できます ! – aarav

0

最初の起動時のように見えるshouldShowRequestPermissionRationaleがtrueで、ログエントリを作成するだけです。あなたはあなたのログに書きましたが、この場合、許可はまだ与えられていません。

関連する問題