android.permission.camera,Problem with the android.permission.CAMERA failure

I'm trying to implement the CameraX preview from the [Android developer site][1] I don't know why I'm getting this error even when I added the permissions in my manifests. When I open the QR scanner activity the preview is just black screen. I have updated to the latest version of cameraX and yet this issue was not solved. It seems that the permission for using camera was not granted. Please help me with it.

package="com.example.two_locally">

android:allowBackup="true"

android:icon="@mipmap/ic_launcher"

android:label="@string/app_name"

android:roundIcon="@mipmap/ic_launcher_round"

android:supportsRtl="true"

android:theme="@style/AppTheme"

android:usesCleartextTraffic="true">

QR scanner.java

package com.example.two_locally;

import android.content.Intent;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.view.WindowManager;

import android.widget.ImageView;

import androidx.annotation.NonNull;

import androidx.appcompat.app.AppCompatActivity;

import androidx.camera.core.Camera;

import androidx.camera.core.CameraSelector;

import androidx.camera.core.Preview;

import androidx.camera.lifecycle.ProcessCameraProvider;

import androidx.camera.view.PreviewView;

import androidx.core.content.ContextCompat;

import androidx.lifecycle.LifecycleOwner;

import com.google.common.util.concurrent.ListenableFuture;

import java.util.concurrent.ExecutionException;

public class QRScanner extends AppCompatActivity {

ImageView back_image;

private ListenableFuture cameraProviderFuture;

PreviewView previewView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_q_r_scanner);

back_image = findViewById(R.id.back_img);

previewView= findViewById(R.id.viewFinder);

cameraProviderFuture = ProcessCameraProvider.getInstance(this);

Log.i("Camerax", "preview view set up");

back_image.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Intent r = new Intent(QRScanner.this, Dashbord.class);

startActivity(r);

finish();

}

});

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

cameraProviderFuture.addListener(() -> {

try {

ProcessCameraProvider cameraProvider = cameraProviderFuture.get();

Log.i("Camerax", "The CameraProvider is working now in try");

bindPreview(cameraProvider);

} catch (ExecutionException | InterruptedException e) {

// No errors need to be handled for this Future.

// This should never be reached.

Log.i("Camerax", "The Camerax catch portion");

e.printStackTrace();

}

}, ContextCompat.getMainExecutor(this));

}

void bindPreview(@NonNull ProcessCameraProvider cameraProvider) {

Preview preview = new Preview.Builder()

.build();

CameraSelector cameraSelector = new CameraSelector.Builder()

.requireLensFacing(CameraSelector.LENS_FACING_BACK)

.build();

preview.setSurfaceProvider(previewView.getSurfaceProvider());

Log.i("Camerax", "bindPreview is working");

Camera camera = cameraProvider.bindToLifecycle((LifecycleOwner)this, cameraSelector, preview);

}

}

Error messages

```1 890-7480/? W/ServiceManager: Permission failure: android.permission.CAMERA from uid=10269 pid=2714

2020-12-08 14:29:28.262 890-7480/? E/CameraService: Permission Denial: can't use the camera pid=2714, uid=10269

2020-12-08 14:29:28.263 2714-3336/com.example.cameraApp E/SequentialExecutor: Exception while executing runnable androidx.camera.camera2.internal.-$$Lambda$Camera2CameraImpl$uJgH7DGqogXqd1JLV8-47UNTCjM@a1e8d7d

java.lang.SecurityException: validateClientPermissionsLocked:1251: Caller "com.example.cameraApp" (PID 10269, UID 2714) cannot open camera "0" without camera permission

at android.hardware.camera2.CameraManager.throwAsPublicException(CameraManager.java:827)

at android.hardware.camera2.CameraManager.openCameraDeviceUserAsync(CameraManager.java:440)

at android.hardware.camera2.CameraManager.openCameraForUid(CameraManager.java:622)

at android.hardware.camera2.CameraManager.openCamera(CameraManager.java:590)

at androidx.camera.camera2.internal.compat.CameraManagerCompatApi29Impl.openCamera(CameraManagerCompatApi29Impl.java:44)

at androidx.camera.camera2.internal.compat.CameraManagerCompat.openCamera(CameraManagerCompat.java:203)

at androidx.camera.camera2.internal.Camera2CameraImpl.openCameraDevice(Camera2CameraImpl.java:906)

at androidx.camera.camera2.internal.Camera2CameraImpl.openInternal(Camera2CameraImpl.java:242)

at androidx.camera.camera2.internal.Camera2CameraImpl.tryAttachUseCases(Camera2CameraImpl.java:709)

at androidx.camera.camera2.internal.Camera2CameraImpl.lambda$attachUseCases$11$Camera2CameraImpl(Camera2CameraImpl.java:653)

at androidx.camera.camera2.internal.-$$Lambda$Camera2CameraImpl$uJgH7DGqogXqd1JLV8-47UNTCjM.run(Unknown Source:4)

at androidx.camera.core.impl.utils.executor.SequentialExecutor$QueueWorker.workOnQueue(SequentialExecutor.java:229)

at androidx.camera.core.impl.utils.executor.SequentialExecutor$QueueWorker.run(SequentialExecutor.java:171)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)

at java.lang.Thread.run(Thread.java:919)

Caused by: android.os.ServiceSpecificException: validateClientPermissionsLocked:1251: Caller "com.example.two_locally" (PID 10269, UID 2714) cannot open camera "0" without camera permission (code 1)

at android.os.Parcel.createException(Parcel.java:2101)

at android.os.Parcel.readException(Parcel.java:2055)

at android.os.Parcel.readException(Parcel.java:2003)

at android.hardware.ICameraService$Stub$Proxy.connectDevice(ICameraService.java:583)

at android.hardware.camera2.CameraManager.openCameraDeviceUserAsync(CameraManager.java:403)

at android.hardware.camera2.CameraManager.openCameraForUid(CameraManager.java:622)

at android.hardware.camera2.CameraManager.openCamera(CameraManager.java:590)

at androidx.camera.camera2.internal.compat.CameraManagerCompatApi29Impl.openCamera(CameraManagerCompatApi29Impl.java:44)

at androidx.camera.camera2.internal.compat.CameraManagerCompat.openCamera(CameraManagerCompat.java:203)

at androidx.camera.camera2.internal.Camera2CameraImpl.openCameraDevice(Camera2CameraImpl.java:906)

at androidx.camera.camera2.internal.Camera2CameraImpl.openInternal(Camera2CameraImpl.java:242)

at androidx.camera.camera2.internal.Camera2CameraImpl.tryAttachUseCases(Camera2CameraImpl.java:709)

at androidx.camera.camera2.internal.Camera2CameraImpl.lambda$attachUseCases$11$Camera2CameraImpl(Camera2CameraImpl.java:653)

at androidx.camera.camera2.internal.-$$Lambda$Camera2CameraImpl$uJgH7DGqogXqd1JLV8-47UNTCjM.run(Unknown Source:4)

at androidx.camera.core.impl.utils.executor.SequentialExecutor$QueueWorker.workOnQueue(SequentialExecutor.java:229)

at androidx.camera.core.impl.utils.executor.SequentialExecutor$QueueWorker.run(SequentialExecutor.java:171)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)

at java.lang.Thread.run(Thread.java:919) ```

[1]: https://developer.android.com/training/camerax/preview

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android中的`android.permission.WRITE_EXTERNAL_STORAGE`权限用于访问外部存储设备(如SD卡)的写入权限。以下是Android 11及以上版本和Android 6.0到Android 10版本的适配方法: 1. Android 11及以上版本: 在AndroidManifest.xml文件中添加以下权限: ```xml <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> ``` 然后,在代码中使用`ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION`权限来请求用户授权操作手机中的文件管理: ```java Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION); intent.setData(Uri.parse("package:" + getPackageName())); startActivity(intent); ``` 2. Android 6.0到Android 10版本: 在AndroidManifest.xml文件中添加以下权限: ```xml <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> ``` 然后,在代码中使用运行时权限来请求用户授权: ```java if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE); } } ``` 请注意,从Android 11开始,即使在AndroidManifest.xml中声明了存储权限,也需要在代码中动态请求权限。此外,Android 11及以上版本的存储权限只允许访问媒体文件,无法直接操作手机的文件管理。只有通过`ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION`权限才能操作手机中的文件管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值