支持 Android Camera Api 和 Camera2 Api 的问题
Posted
技术标签:
【中文标题】支持 Android Camera Api 和 Camera2 Api 的问题【英文标题】:Problems supporting Android Camera Api and Camera2 Api 【发布时间】:2016-02-14 14:56:14 【问题描述】:我正在帮助开发一个应用程序,该应用程序需要支持所有 android 版本的相机使用,而不使用任何已弃用的东西。这显然意味着我需要为 Android 5.0+(Api Level 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 或片段都会在 Android 4.4(我假设是其他版本)上崩溃。我想我可以通过将设备 21 的相机代码保存在单独的片段中来使其工作,但我真的很想知道为什么这不能正常工作。
【问题讨论】:
请参考本页***.com/questions/10929546/… 也遇到了类似的问题。有什么进展吗? 【参考方案1】:Camera2 API 仅适用于 Android 5.0 及更高版本的设备。对于搭载 Android 4.4 的设备,您必须使用已弃用的 Camera API。你可以在这里找到更多信息:https://developer.android.com/guide/topics/media/camera.html#considerations
【讨论】:
以上是关于支持 Android Camera Api 和 Camera2 Api 的问题的主要内容,如果未能解决你的问题,请参考以下文章