gpt4 book ai didi

android - 支持 Android Camera Api 和 Camera2 Api 的问题

转载 作者:太空宇宙 更新时间:2023-11-03 10:41:03 26 4
gpt4 key购买 nike

我正在帮助开发一个应用程序,该应用程序需要支持所有 Android 版本的相机使用,而不使用任何已弃用的内容。这显然意味着我需要使用适用于 Android 5.0+(Api 级别 21)的新 Camera2 API。

今天我转换了我们所有的原始相机代码以支持 Camera2 API,检查 Build.VERSION.SDK_INT 以决定何时使用原始代码以及何时使用新代码。当我回去测试 android 4.x 以确保没有任何问题时,我当前的问题出现了,我得到了 java.lang.VerifyError 并拒绝了操作码错误——这是我以前从未见过的。

我将我的问题归结为不理解为什么以下代码在 Android 4.4 上运行时会崩溃:

public class CameraActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_camera);
}

void thisIsNeverRun()
{
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{
// set to null so we can compile and run easily.
// Doesn't Matter as the code is never actually executed
CameraDevice d = null;

// calling getId as an example, anything will break it
d.getId();
}
}
}

请注意,thisIsNeverRun() 从未被调用。在 android 4.4 设备上运行时发生崩溃并且 logcat 产生此输出:

11-12 20:46:21.336 5875-5875/com.example.android.camera2basic I/dalvikvm: Could not find method android.hardware.camera2.CameraDevice.getId, referenced from method com.example.android.camera2basic.CameraActivity.thisIsNeverRun

11-12 20:46:21.336 5875-5875/com.example.android.camera2basic W/dalvikvm: VFY: unable to resolve virtual method 689: Landroid/hardware/camera2/CameraDevice;.getId ()Ljava/lang/String; 11-12 20:46:21.336 5875-5875/com.example.android.camera2basic W/dalvikvm: VFY: rejecting opcode 0x6e at 0x0007

11-12 20:46:21.336 5875-5875/com.example.android.camera2basic W/dalvikvm: VFY: rejected Lcom/example/android/camera2basic/CameraActivity;.thisIsNeverRun ()V

11-12 20:46:21.336 5875-5875/com.example.android.camera2basic W/dalvikvm: Verifier rejected class Lcom/example/android/camera2basic/CameraActivity;

11-12 20:46:21.336 5875-5875/com.example.android.camera2basic W/dalvikvm: Class init failed in newInstance call (Lcom/example/android/camera2basic/CameraActivity;)

11-12 20:46:21.336 5875-5875/com.example.android.camera2basic D/AndroidRuntime: Shutting down VM

11-12 20:46:21.336 5875-5875/com.example.android.camera2basic W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x41c7bdb8)

11-12 20:46:21.336 5875-5875/com.example.android.camera2basic E/AndroidRuntime: FATAL EXCEPTION: main

11-12 20:46:21.336 5875-5875/com.example.android.camera2basic E/AndroidRuntime: Process: com.example.android.camera2basic, PID: 5875

11-12 20:46:21.336 5875-5875/com.example.android.camera2basic E/AndroidRuntime: java.lang.VerifyError: com/example/android/camera2basic/CameraActivity

这让我很困惑,因为我以前从未见过这些类型的错误。我在 2 个不同的 android 4.4 设备上对此进行了测试。诚然,我对在同一个应用程序中支持已弃用的 API 和新 API 并不陌生,但这似乎相当简单。也许我在做一些明显错误的事情?

在这一点上,我感到非常沮丧,因为无论代码是否实际运行,任何包含 Camera2 代码的 Activity 或 fragment 都会在 Android 4.4(我假设其他版本)上崩溃。我想我可以通过将设备 < 21 和设备 > 21 的相机代码保存在单独的 fragment 中来使其工作,但我真的很想知道为什么它不能正常工作。

最佳答案

Camera2 API 仅适用于 Android 5.0 及更高版本的设备。对于 Android 4.4 的设备,您将不得不使用已弃用的 Camera API。您可以在此处找到更多信息:https://developer.android.com/guide/topics/media/camera.html#considerations

关于android - 支持 Android Camera Api 和 Camera2 Api 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33685758/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com