Android:android.permission.CAMERA,但未在您的 AndroidManifest.xml 文件中找到

Android : android.permission.CAMERA, but was not found in your AndroidManifest.xml file

我的 android 应用程序有时会在应用程序启动时随机崩溃,当我检查我的分析报告时,我得到的异常是:

{third party tool} requires android.permission.CAMERA, but was not found in your AndroidManifest.xml file.

PermissionsHandler.CheckPermissions (Android.Content.Context context, System.String permission, System.Boolean throwOnError)

PermissionsHandler.CheckCameraPermissions (Android.Content.Context context, System.Boolean throwOnError)CameraController.SetupCamera () CameraAnalyzer.SetupCamera ()

在用户导航到特定页面之前,我用于条形码的工具甚至不使用相机服务。我只是觉得可能在 运行 时间它正在寻找相机权限,有时应用程序清单未准备好或未加载所以应用程序假定相机权限不包含在应用程序清单中,即使它们是。

我的问题是

  1. AndoridManifest 是否在应用程序启动时正确,或者我是否必须对应用程序进行一些更改以确保它等待直到显示它准备好所有权限设置?
  2. 是否有人遇到过类似的错误或可以提出任何解决方案?

更新: ZXing是第三方工具,需要摄像头服务。但是一旦应用程序启动,这个三十方 API 就会在某些页面上被调用,并且在这些页面上它请求相机许可,但应用程序在启动时崩溃,但出现以下异常: 异常:

PermissionsHandler.CheckPermissions (Android.Content.Context context, System.String permission, System.Boolean throwOnError)
System.UnauthorizedAccessException: ZXing.Net.Mobile requires: android.permission.CAMERA, but was not found in your AndroidManifest.xml file.

PermissionsHandler.CheckPermissions (Android.Content.Context context, System.String permission, System.Boolean throwOnError)

PermissionsHandler.CheckCameraPermissions (Android.Content.Context context, System.Boolean throwOnError)

CameraController.SetupCamera ()

CameraAnalyzer.SetupCamera ()

ZXingSurfaceView+<SurfaceCreated>d__3.MoveNext ()

ExceptionDispatchInfo.Throw ()

AsyncMethodBuilderCore+<>c.<ThrowAsync>b__6_0 (System.Object state)

SyncContext+<>c__DisplayClass2_0.<Post>b__0 ()

Thread+RunnableImplementor.Run ()

IRunnableInvoker.n_Run (System.IntPtr jnienv, System.IntPtr native__this

首先,无论您支持什么 sdk 级别,您都需要在您的 AndroidManifest 中添加这个

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

除此之外,对于 API 23 级及以上,您需要明确请求用户许可。

然后回答您的第一个问题:AndroidManifest 是自动加载的,因此您无需执行任何特殊操作。

希望对您有所帮助!!

如前所述 CAMERA 权限是一项危险的权限,因此需要运行时权限。我建议您在启动应用程序后出现的第一个 activity 上编写该代码以请求该权限。

private void VerifyPermission(){
   int permissionWriteExternalStorage = ActivityCompat.checkSelfPermission(context, Manifest.permission.CAMERA);

    if(permissionWriteExternalStorage != PackageManager.PERMISSION_GRANTED){
        ActivityCompat.requestPermissions(YourActivityName.this, STORAGE_PERMISSIONS, 1);
    }
}

在onCreate中调用这个方法即可:

VeriryPermission();

记住我贴的方法很简单,以后可以升级。

我在这里找到了解决方案:Application crashes when asking for permissions

您的 OnRequestPermissionsResult 中的此代码:

  Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
  for (int i = 0; i < permissions.Length; i++)
  {
    if (permissions[i].Equals("android.permission.CAMERA") && grantResults[i] == Permission.Granted)
      global::ZXing.Net.Mobile.Android.PermissionsHandler.OnRequestPermissionsResult(requestCode, permissions, grantResults);
  }
  base.OnRequestPermissionsResult(requestCode, permissions, grantResults);