当前位置: 首页 > 知识库问答 >
问题:

ADB无法在Android 11上启动图像捕获意图活动

彭阳荣
2023-03-14

以下ADB命令不适用于Android 11设备

adb -d shell "am start -a android.media.action.IMAGE_CAPTURE" -W

结果在

Starting: Intent { act=android.media.action.IMAGE_CAPTURE }
Error: Activity not started, unknown error code 102

这似乎与Android 11的变化有关,请参阅Android 11(R)返回空列表时查询ACTION_IMAGE_CAPTURE的意图,这里提到的解决方案是将此添加到清单

<queries>
    <intent>
        <action android:name="android.media.action.IMAGE_CAPTURE" />
    </intent>
</queries>

亚行有类似的吗?

共有1个答案

晏弘雅
2023-03-14

这似乎是Android系统中的一个错误。相机活动启动不会因为您链接到的问题而失败,而是因为AppOpsManager服务拒绝:

05-04 14:16:51.789   620  2669 W ActivityTaskManager: Appop Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE flg=0x10000000 cmp=com.android.camera2/com.android.camera.CaptureActivity } from null (pid=4079, uid=2000) requires android:camera

这可以通过

adb shell appops get com.android.shell

其中com.android.shell是命令行实用程序提供的包名,例如am,即Android Shell包

Uid mode: COARSE_LOCATION: foreground
LEGACY_STORAGE: ignore
CAMERA: allow; rejectTime=+4m37s345ms ago

这显示了Shell package在多长时间前拒绝了摄像头op。

但是这种拒绝政策是不正确的,因为com.Androidshell已经拥有摄像头权限,可以通过

adb shell dumpsys package com.android.shell|grep 'android.permission.CAMERA'
  android.permission.CAMERA
    android.permission.CAMERA: granted=true, flags=[ SYSTEM_FIXED|GRANTED_BY_DEFAULT]

一个替代方案(可能不适用于所有人)是从一个根外壳(在adb root/su之后)启动这个意图,它可以工作。

05-04 14:17:23.610   502  2518 I CameraService: CameraService::connect call (PID -1 "com.android.camera2", camera ID 0) for HAL version default and Camera API version 2
 类似资料:
  • 我是新的Android和建立一个小应用程序,从相机拍照,并保存到画廊。 下面是捕获图像的函数。 这是我们的主要活动。xml 当图像被捕获时,我想在另一个活动(页面)上显示图像,而不是在具有捕获图像按钮的同一活动上。如何做到这一点。 提前谢谢

  • 问题内容: 我为具有不同元数据的活动设置了一些别名。 在此元数据中,我设置了片段的名称,然后通过反射将其加载。 我不知道这是否是一个“干净”的解决方案,尽管通过使用Fragments并将功能放入内部,我只具有一个SuperActivity和2个Empty SubActivity来指定清单中的每个。 现在的问题是:我可以通过意图启动别名吗?无法工作,因为我找不到通过意图调用来设置元数据的方法。 我需

  • 我有一个活动,可以在收藏夹列表中添加书签。每个宠儿都有一个按钮。当我点击那个按钮时,我必须进入那个特定的活动。但它显示了一个错误。应用程序不会崩溃,但书签活动不会从单击开始。 以下是“收藏夹”活动的代码: 错误是onClick方法,具体如下: 它给我一个ClassNotFoundExc0019。 似乎有了这段代码,我就可以启动这个包中的活动了。但问题是,我想开始的活动在另一个包中。logcat说它

  • 我有一个定义为singleTop的活动,因此只有一个实例存在。 我用一些数据设置了一个通知意图,并将其包含在Pending帐篷中,然后将其发送给通知管理器。 如果activivty未运行,则意图会按预期通过onCreate()启动活动。 如果活动正在运行,但处于停止状态/不在前台(如单击home按钮时),并且通知被单击,则按预期调用我的活动的onNewIntent()。 但是,如果活动在前台时已被

  • 问题内容: 当我单击a时,它会打开相机,并在保存时将其保存到图库中。我想在新活动中将该图片显示为。 这是我对相机按钮单击的代码 问题答案: 您的主要活动 在您的Activity2上,在onCreate方法上编写此代码

  • 我有MainActivity上有一个片段,当用户点击片段时,用户会导航到另一个片段,在最后一个片段上有一个按钮来启动谷歌地图导航,这是代码: 问题是,在地图启动后,我希望用户在按下back时返回到我的应用程序,而不是Launcher。 有没有办法做到这一点。 这是我的完整代码: 主体活动 原木