gpt4 book ai didi

android - 致命异常 : java. lang.IllegalArgumentException : Receiver not registered: android. hardware.camera2.CameraManager

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:58:48 24 4
gpt4 key购买 nike

我正在开发一个可以打开/关闭系统巡视的手电筒应用。

我在 Android M (v6.0) 上出现崩溃

Crashlytics

这是问题的详细信息和堆栈跟踪:

Fatal Exception: java.lang.IllegalArgumentException: Receiver not registered: android.hardware.camera2.CameraManager$1@49e5f1b
at android.app.LoadedApk.forgetReceiverDispatcher(LoadedApk.java:789)
at android.app.ContextImpl.unregisterReceiver(ContextImpl.java:1222)
at android.hardware.camera2.CameraManager$3.run(CameraManager.java:1266)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5728)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)

我有以下Manifest权限和硬件特性:

<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.flash" />

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

****编辑:****

这是我用来访问相机的代码:

// Here, I am checking if SDK >= M
if (VersionUtils.isMarshmallowOrGreater()) {

cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);

if (cameraManager != null) {

try {
cameraId = cameraManager.getCameraIdList()[0];
} catch (CameraAccessException | ArrayIndexOutOfBoundsException e) {
e.printStackTrace();
}
}

} else {

if (camera == null || camera.getParameters() == null) {

try {
camera = Camera.open();
params = camera.getParameters();
} catch (RuntimeException e) {
e.printStackTrace();
}
}

}

这是打开闪光灯/旅游的代码:

if (VersionUtils.isMarshmallowOrGreater()) {

try {
cameraManager.setTorchMode(cameraId, true);
} catch (Exception e) {
e.printStackTrace();
}

} else {

if (camera == null || params == null || camera.getParameters() == null) {
getCamera();
return;
}

params = camera.getParameters();
params.setFlashMode(Parameters.FLASH_MODE_TORCH);
camera.setParameters(params);

startCameraPreview();

}

此外,这里是关闭相机闪光灯的代码:

if (VersionUtils.isMarshmallowOrGreater()) {

try {
cameraManager.setTorchMode(cameraId, false);
} catch (Exception e) {
e.printStackTrace();
}

} else {

if (camera == null || params == null || camera.getParameters() == null) {
return;
}

try {

params = camera.getParameters();
params.setFlashMode(Parameters.FLASH_MODE_OFF);
camera.setParameters(params);
stopCameraPreview();
camera.release();
camera = null;

} catch (Exception e) {
e.printStackTrace();
}
}

startCameraPreview()方法代码:

private void startCameraPreview() {
try {
camera.startPreview();
} catch (Exception e) {
e.printStackTrace();
}
}

除了小部件提供程序类之外,我的应用程序中没有任何接收器,但我没有任何代码行来执行(注册/注销)接收器!!

我搜索并阅读了许多关于这个问题的链接资源,但我找不到任何线索来确切知道导致它的行。

任何人都遇到过这个问题,感谢您的帮助。

最佳答案

我有同样的问题(或类似的)。我的堆栈跟踪与您的完全一样。我已经解决了我的问题,方法是确保(在我的应用程序代码中)如果我的应用程序之前没有打开手电筒,我不会尝试关闭手电筒。

当我连续两次调用 cameraManager.setTorchMode(cameraId, false) 时发生崩溃。

所以我只是在我的应用程序中维护 bool 标志,它显示了此刻准确的手电筒状态。在 cameraManager.setTorchMode(cameraId, true) 调用后立即将其设置为 true,如果标志不是 true,则不要执行 cameraManager.setTorchMode(cameraId, false)。成功后将标志设置为 false cameraManager.setTorchMode(cameraId, false)

希望这有助于...

关于android - 致命异常 : java. lang.IllegalArgumentException : Receiver not registered: android. hardware.camera2.CameraManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52518329/

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