2017-04-21 2 views
2

カメラの許可を確認するこのようなコードがあります。Androidでカメラの許可を確認してください。ターゲットのSDH 22以下

if (Build.VERSION.SDK_INT >= 23) { 
Log.e("Permission State",ContextCompat.checkSelfPermission(activity, Manifest.permission.CAMERA)+""); 

// Here, thisActivity is the current activity 
if (ContextCompat.checkSelfPermission(activity, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED){ 
showCameraActivityForResult(activity); 
}else { 
// No explanation needed, we can request the permission. 
ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.CAMERA}, Constant.MY_PERMISSIONS_REQUEST_CAMERA); 
} 
}else{ 
showCameraActivityForResult(activity); 
} 

問題は、私は常に5.1以下で許可されているということです。他のユーザーもここで言った。ユーザーが私のアプリを開いて、カメラをタップしたときに、サムスンのようないくつかの装置では

How can I know if my app's camera permission is granted?

は、ユーザーがデバイスの設定から、結果としてカメラの権限を無効にすることができ、それは常に空白に表示されます。ユーザーがカメラを使用できるかどうかを検出するにはどうすればよいですか? (それは動作していないので、私のコードとは異なる必要があります)

+0

を使用していないあなたは、以下のいずれかの権限をチェックする必要はありません確認することができSDK上で提供されていますLolipop(22)OSはLolipopで導入された実行時のパーミッション変更です。 – Avi

+0

初めて許可されました(デフォルト動作は22以下)が、ユーザーは後でSamsungデバイスのデバイス設定から無効にします。どうすればいいですか? –

答えて

1

オンマニフェストで指定されている場合、API 22以下の権限が与えられます。

API 23+ ContextCompat#checkSelfPermissionの場合は、これは、以前のAPIで正常に "低下"し、マニフェストに表示されている場合に許可が与えられることを伝えます。 API 23以降では、それが許可されているかどうかを実際に確認します。

許可が与えられた場合はPackageManager.PERMISSION_GRANTEDを返します。

と入力してください。Manifest.permission.CAMERAと入力しないでください。あなたがAppCompatActivityを使用している場合

ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)); 
+0

私は以下のapi 22をチェックする必要があります。どうすれば確認できますか? 22未満では、私はcheckSelfPermissionを使用できません。私はカメラがユーザーの制限などによって使用できないことを知る方法が必要です。 –

+0

ユーザーは22歳以下のアクセス権を制限できません。あなたのアプリに許可を与えたくない場合、唯一の選択はアプリをインストールしないことです。 – Andy

+0

私はsamsungデバイスを持っていて、デバイス設定では、ユーザーは自分のアプリケーションのカメラ権限を手動で無効にすることができます。:( –

2

、あなたは許可が付与されているかどうかを確認するためにcheckSelfPermissionを使用することができます。

if (ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { 
    if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) context, Manifest.permission.CAMERA)) { 

     //Show permission dialog 
    } else { 

     // No explanation needed, we can request the permission. 
     ActivityCompat.requestPermissions((Activity)context, new String[]{Manifest.permission.CAMERA}, code); 
    } 
} 
+0

私は以下のapi 22をチェックする必要があります。どうすれば確認できますか? 22未満では、私はcheckSelfPermissionを使用できません。私はカメラがユーザーの制限などによって使用できないことを知る方法が必要です。 –

+0

はい、checkSelfPermissionは22より下のAPIでは使用できません。チェックする必要はないためです。マニフェストでパーミッションを宣言するだけで、インストール中にパーミッションが付与されます。いくつかのデバイスにデバイス設定に関するアクセス許可を無効/有効にする機能があることがわかっている場合、そのデバイスはAndroid> 23で動作している可能性があります。https://developer.android.com/training/permissions/requesting.html –

+0

許可最初に許可されます(デフォルト動作は22以下)が、ユーザは後でSamsungデバイスのデバイス設定から無効にします。その場合、どうすれば処理できますか? 5月bはある種の検査例外ですか? –

0
Try this, 

private Context mContext=YourActivity.this; 

private static final int REQUEST = 112; 

if (Build.VERSION.SDK_INT >= 23) { 
    String[] PERMISSIONS = {android.Manifest.permission.CAMERA}; 
    if (!hasPermissions(mContext, PERMISSIONS)) { 
     ActivityCompat.requestPermissions((Activity) mContext, PERMISSIONS, REQUEST); 
    } else { 
     showCameraActivityForResult(activity); 
    } 
} else { 
    showCameraActivityForResult(activity); 
} 

GET権限は

private static boolean hasPermissions(Context context, String... permissions) { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) { 
     for (String permission : permissions) { 
      if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) { 
       return false; 
      } 
     } 
    } 
    return true; 
} 

マニフェストマシュマロのため

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    switch (requestCode) { 
     case REQUEST: { 
      if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       showCameraActivityForResult(activity); 
      } else { 
       Toast.makeText(mContext, "The app was not allowed to write in your storage", Toast.LENGTH_LONG).show(); 
      } 
     } 
    } 
} 

チェック権限を結果

<uses-permission android:name="android.permission.CAMERA" /> 

OR:

if (Build.VERSION.SDK_INT >= 23) 
{ 
    Log.e("Permission State",ContextCompat.checkSelfPermission(activity, Manifest.permission.CAMERA)+""); 

    // Here, thisActivity is the current activity 
    if (ActivityCompat.checkSelfPermission(activity, android.Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) 
    { 
     showCameraActivityForResult(activity); 
    } 
    else { 
     // No explanation needed, we can request the permission. 
     ActivityCompat.requestPermissions(activity, new String[]{android.Manifest.permission.CAMERA}, Constant.MY_PERMISSIONS_REQUEST_CAMERA); 
    } 
}else{ 
    showCameraActivityForResult(activity); 
} 
+0

以下のapi 22を確認する必要があります。どうすれば確認できますか? 22未満では、私はcheckSelfPermissionを使用できません。私はカメラがユーザーの制限などによって使用できないことを知る方法が必要です。 –

+0

以下の22の許可を確認する必要はなく、マニフェストファイル – user2025187

+0

にアクセス権を追加するだけです(デフォルト動作は22以下)が、ユーザは後でSamsungデバイスのデバイス設定から無効にします。その場合、どうすれば処理できますか? 5月bはある種の検査例外ですか? –

0

checkSelfPermissionは23

我々は許可が利用可能であるか、パッケージマネージャ

public static Boolean checkpermissions(Activity activity) { 
    PackageManager mPackageManager = activity.getPackageManager(); 
    int hasPermStorage = mPackageManager.checkPermission(android.Manifest.permission.CAMERA, activity.getPackageName()); 

    if (hasPermStorage != PackageManager.PERMISSION_GRANTED) { 
    // do stuff 
    // Toast.makeText(getApplicationContext(), "No permission", Toast.LENGTH_LONG).show(); 
    return false; 
    } else if (hasPermStorage == PackageManager.PERMISSION_GRANTED) { 
    // do stuff 
    // Toast.makeText(getApplicationContext(), "Has permission", Toast.LENGTH_LONG).show(); 
    return true; 
    } else { 
    return false; 
    } 
関連する問題