【问题标题】:Android : android.permission.CAMERA, but was not found in your AndroidManifest.xml fileAndroid : android.permission.CAMERA,但在您的 AndroidManifest.xml 文件中找不到
【发布时间】:2018-09-23 02:53:03
【问题描述】:

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

{第三方工具}需要 android.permission.CAMERA,但不是 在您的 AndroidManifest.xml 文件中找到。

PermissionsHandler.CheckPermissions(Android.Content.Context 上下文, System.String 权限,System.Boolean throwOnError)

PermissionsHandler.CheckCameraPermissions (Android.Content.Context 上下文,System.Boolean throwOnError)CameraController.SetupCamera () CameraAnalyzer.SetupCamera()

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

我的问题是

  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

【问题讨论】:

  • 你的应用的 minSDK 是什么?
  • 在你的java代码中添加运行时权限怎么样?
  • 应用程序崩溃的 API 级别是什么?您没有为 Marsh+ 请求适当的运行时权限吗?
  • @SushiHangover App 主要在 API 24 上崩溃。我在 Android.manifest 上选择了所有权限,并在使用相机之前使用请求权限访问。但是应用程序在启动应用程序期间甚至在进入我们请求权限访问的页面之前就崩溃了
  • @RafaelaLourenço 最低 API 19 - 最高 API-24。

标签: android xamarin xamarin.android android-camera android-manifest


【解决方案1】:

正如hereCAMERA 权限是一个危险的,所以它需要运行时权限。我建议您在启动应用程序后出现的第一个活动中编写该代码以请求该权限。

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();

请记住,我发布的方法非常简单,以后可以升级。

【讨论】:

  • 这是哪个版本的支持库?
【解决方案2】:

我在这里找到了解决方案: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);

【讨论】:

    【解决方案3】:

    首先,无论您支持什么 sdk 级别,您都需要将其添加到您的 AndroidManifest 中

    &lt;uses-permission android:name="android.permission.CAMERA" /&gt;

    除此之外,对于 API 级别 23 及更高级别,您需要明确请求用户权限。

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

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多