摄像头权限不适用于棉花糖及以上设备和崩溃
由于我已经制作了手电筒应用程序,它可以在具有SDK 22
及以下版本的设备上正常工作。但是当我来检查棉花糖和上面的设备时,它不会在开始时运行和崩溃,只是我使用下面的代码请求许可,但它似乎根本没有工作。这是我在运行时请求摄像头权限的代码。这里是我的代码:摄像头权限不适用于棉花糖及以上设备和崩溃
if(ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{android.Manifest.permission.CAMERA},
5);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 5) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Now user should be able to use camera
}
else {
// Your app will not have this permission. Turn off all functions
// if permission not granted it will force close the app
}
}
我已经尝试过的棉花糖,牛轧糖的设备,但它不要求相机许可,我不得不通过手动setting-app-flashlight-permission-allow
。任何人都可以帮助我。目前,我正在测试我的应用程序在Lineage os 7.1.1
只要你改变只有当条件你的代码是完美的这个样子,
if(ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{android.Manifest.permission.CAMERA},
5);
}
}
到
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if(ContextCompat.checkSelfPermission(this,
android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{android.Manifest.permission.CAMERA},
5);
}
}
做到这一点的方法:
if (ContextCompat.checkSelfPermission(UserProfileActivity.this, Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(UserProfileActivity.this, new String[]{Manifest.permission.CAMERA},
5);
} else {
//start flashlight
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
switch (requestCode) {
case 5: {
for (int i = 0; i < permissions.length; i++) {
if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
//start flashlight
Log.d("Permissions CAMERA", "Permission Granted: " + permissions[i]);
} else if (grantResults[i] == PackageManager.PERMISSION_DENIED) {
Log.d("Permissions CAMERA", "Permission Denied: " + permissions[i]);
}
}
break;
}
default: {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
} break;
}
}
上面的代码显示了几个问题:无法解析符号UserProfileActivity,无法解析符号do&不能解析符号工作。然而@override没有任何问题。 –
UserProfileActivity是您的活动名称。并且摄像机工作意味着将相机捕获逻辑放在那里。那时你有摄像头权限,这样你就可以在没有任何问题的情况下进行摄像头工作了 –
好吧,但是我该如何删除表示无法解析符号的红色标记UserProfileActivity,Do&Work? UserProfileActivity的 –
使用下面的代码并在Activity的onCreate中调用“requestPermission”方法:
private static final int REQUEST_CODE_PERMISSION = 2;
List<String> mPermission=new ArrayList<String>();
public void requestPermission()
{
try {
if(ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
!= MockPackageManager.PERMISSION_GRANTED)
mPermission.add(Manifest.permission.CAMERA);
if(ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= MockPackageManager.PERMISSION_GRANTED
)
mPermission.add(Manifest.permission.WRITE_EXTERNAL_STORAGE
);
if(ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
!= MockPackageManager.PERMISSION_GRANTED)
mPermission.add(Manifest.permission.READ_EXTERNAL_STORAGE);
if(mPermission.size()>0)
{
String[] array = mPermission.toArray(new String[mPermission.size()]);
ActivityCompat.requestPermissions(this, array, REQUEST_CODE_PERMISSION);
// If any permission aboe not allowed by user, this condition will execute every tim, else your else part will work
}
} catch (Exception e) {
e.printStackTrace();
}
}
覆盖方法 “onRequestPermissionsResult”:
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
Log.e("Req Code", "" + requestCode);
if (requestCode == REQUEST_CODE_PERMISSION) {
if (grantResults.length == mPermission.size()) {
for(int i=0;i<grantResults.length;i++)
{
if(grantResults[i] == MockPackageManager.PERMISSION_GRANTED)
{
//don't do anything....
}
else{
mPermission=new ArrayList<String>();
requestPermission();
break;
}
}
}
else{
Toast.makeText(this,"permition not granted",Toast.LENGTH_LONG).show();
mPermission=new ArrayList<String>();
requestPermission();
}
}
}
先生您的代码是要求多个权限的相机和存储,在我的情况下,我只需要相机的权限。 –
您只能使用相机权限删除额外的代码。我补充说,因为如果你使用相机,那么你将需要保存捕获的图像,因此您还需要其他权限。 –
if(currentAPIVersion>= 23)
{
if (ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) context,
Manifest.permission.CAMERA)) {
AlertDialog.Builder alertBuilder = new AlertDialog.Builder(context);
alertBuilder.setCancelable(true);
alertBuilder.setTitle("Camera Permission Necessary");
alertBuilder.setMessage("Camera permission is necessary");
alertBuilder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
ActivityCompat.requestPermissions((Activity) context,
new String[]{Manifest.permission.CAMERA},
MY_PERMISSIONS_REQUEST_CAMERA);
}
});
AlertDialog alert = alertBuilder.create();
alert.show();
} else {
ActivityCompat.requestPermissions((Activity) context,
new String[]{Manifest.permission.CAMERA},
MY_PERMISSIONS_REQUEST_CAMERA);
}
return false;
} else {
return true;
}
} else {
return true;
}
我也有同样的问题,但设法固定它。这是我的情况(我不知道它是否与你的相同,但值得一试)
所以我有这两项活动,即:MainActivity
和FlashlightActivity
。
在我点击开关按钮之前,我曾经在FlaslightActivity
中明确要求相机权限,但我忘记了我是在检查用户手机是否在onCreate()
方法中有相机。而我在询问手电筒开关按钮的许可onClick
,其中之后我检查了用户的手机是否有相机。所以我所做的就是在我开始FlashlightActivity
之前在我的MainActivity
中请求许可。
flashBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(hasPermission()){
Intent flashIntent = new Intent("FlashlightActivity");
startActivity(flashIntent);
}else{
requestPermission();
}
}
});
所以基本上索要许可打电话之前任何相机相关的东西
尝试uninstall->安装,看看它的请求许可。可能发生的情况是,你点击了“再也不要问了”复选框 –
不要求它根本不要求许可,它只是崩溃。但如果我手动允许权限,则应用程序工作正常,正如我在setting-app-permission-allow中所述。 –