0

権限を要求する方法を学習しています。今私は、カメラのハードウェアを使用したい、私はこの許可を要求しようとしています。私はAndroidデベロッパーの公式ウェブサイトを参照していましたが、ウェブサイトに掲載されている例を使用しましたが、 Androidカメラのハードウェアをリクエストする必要があるため少し変更しました。権限が要求されていません

マニフェストファイルにアクセス許可が含まれていないため、以下のコードを実行すると、マニフェストファイルにアクセス許可がないため、「トースト」が表示されます。しかし、何が起こったのですか?私がアプリケーションを実行するときには、許可を追加するために を要求しないし、「Toast」も表示されません。

ことがhappeneingとどのようにそれを設定することです理由コード

私に説明してくださいます。Get

ActivityCompat.requestPermissions(MainActivity.this, 
        new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 
        1); 

:以下のコードを使用して

int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA); 
if (permissionCheck != PackageManager.PERMISSION_GRANTED) { 

    if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) { 
     Toast.makeText(this, "permission is not in the manifest file", Toast.LENGTH_SHORT).show(); 
    } 

} else { 
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, MY_PERMISSIONS_REQUEST_CAMERA); 
} 

答えて

0

開くダイアログ以下のような活動結果:

@Override 
public void onRequestPermissionsResult(int requestCode, 
             String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case 1: { 

      // If request is cancelled, the result arrays are empty. 
      if (grantResults.length > 0 
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

       // permission was granted, yay! Do the 
       // contacts-related task you need to do.   
      } else { 

       // permission denied, boo! Disable the 
       // functionality that depends on this permission. 
       Toast.makeText(MainActivity.this, "Permission denied to read your External storage", Toast.LENGTH_SHORT).show(); 
      } 
      return; 
     } 

     // other 'case' lines to check for other 
     // permissions this app might request 
    } 
} 

さらに詳しい情報:https://developer.android.com/training/permissions/requesting.html

0

あなたが他の部分の権限を要求しようとしている...つまり、許可が既に付与されたとき。

他の外

は....許可が付与されていることを意味するので、正しいコードは次のようになります

int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA); 
if (permissionCheck != PackageManager.PERMISSION_GRANTED) { 

    if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) { 
     Toast.makeText(this, "permission is not in the manifest file", Toast.LENGTH_SHORT).show(); 
    } else{ 
      ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, MY_PERMISSIONS_REQUEST_CAMERA); 
    } 

} else { 
    Toast.makeText(this, "permission is granted already", Toast.LENGTH_SHORT).show(); 
} 
+0

は、複数の権限でshouldShowRequestPermissionRationaleのif文が実行されることはありません、なぜ..but – Kushan

0
if (permissionCheck != PackageManager.PERMISSION_GRANTED) { 
// here you need to request permission, or show explanation if needed 
} else { 
//we already have permission, no need to request 
} 

代わりに、次の操作を行います

int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA); 
if (permissionCheck != PackageManager.PERMISSION_GRANTED) { 

    if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) { 
     Toast.makeText(this, "permission is not in the manifest file", Toast.LENGTH_SHORT).show(); 
    } else { 
     ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, MY_PERMISSIONS_REQUEST_CAMERA); 
    } 
} 
+0

感謝を扱う場合の結果をチェックするための@Amit Desaleによって答えに従ってください?つまり、実行されるときに実行されます。 – user2121

+0

権限が拒否され、ユーザーがこのボタンを再度表示しない場合、または誰かが設定に行き、権限を削除した場合、実行されません。権限が拒否され、上記のいずれかが真でない場合にのみ実行します – Kushan

0

はあなたが実行しましたAndroid搭載デバイスのアプリケーションですか?

権限のみ詳細はアンドロイドマシュマロデバイスに求められているはuが必要マシュマロはアンドロイドmanefestでアクセス許可を宣言することを他の下位バージョンで実行されている他のAndroidデバイスのためにhere

を参照してください...

アンドロム-mより低いバージョンを実行するアンドロイドデバイスには許可ダイアログが表示されません。

+0

はい。私はアンドロイドMを使用しています – user2121

0

あなたがAndroidのM.のランタイム許可モデルを実装しようとした場合でも、AndroidManifest.xmlをに記載されていることにそれらの権限を持っている必要があります

if(ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)==PackageManager.PERMISSION_GRANTED){ 
     //do something 
    } 
    else 
     requestPermissions(permissionsList, 
       MY_PERMISSIONS_REQUEST_CODE); 

は、ユーザアクションの後:

@Override 
public void onRequestPermissionsResult(int requestCode, 
             String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case MY_PERMISSIONS_REQUEST_CODE: 
      if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       //do something 
      } else{ 
       //do some other thing 
      } 
      break; 

    } 
} 
関連する問題