【问题标题】:Android turning flash on returns NullPointerException with some DevicesAndroid 打开 Flash 会返回 NullPointerException 与某些设备
【发布时间】:2018-01-25 11:07:51
【问题描述】:

所以我制作了一个阅读文本的应用(使用 Google 移动视觉 OCR)

我正在使用 CameraSource 类..

我用这个方法可以打开/关闭闪光灯

public void changeFlashStatus(View v) {




    Field[] declaredFields = CameraSource.class.getDeclaredFields();
    if (declaredFields != null) {
        for (Field field : declaredFields) {
            if (field.getType() == Camera.class) {
                field.setAccessible(true);
                try {
                    camera = (Camera) field.get(camSource);
                    if (camera != null) {
                        params = camera.getParameters();

                        if (!isFlash) {
                            params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
                            flash_btn.setImageResource(R.drawable.ic_action_flash_on);

                            isFlash = true;
                        } else {
                            params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
                            flash_btn.setImageResource(R.drawable.ic_action_flash_off);
                            isFlash = false;

                        }
                        camera.setParameters(params);

                    }

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

                break;
            }
        }
    }
}

它适用于大多数设备

但最近我收到了很多崩溃报告!

报告如下:

    Samsung Galaxy Note8 (greatlte), 6144MB RAM, Android 7.1
Report 1 of 2
java.lang.IllegalStateException: 

  at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick (AppCompatViewInflater.java:293)

  at android.view.View.performClick (View.java:6308)

  at android.view.View$PerformClick.run (View.java:23969)

  at android.os.Handler.handleCallback (Handler.java:751)

  at android.os.Handler.dispatchMessage (Handler.java:95)

  at android.os.Looper.loop (Looper.java:154)

  at android.app.ActivityThread.main (ActivityThread.java:6823)

  at java.lang.reflect.Method.invoke (Native Method)

  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1563)

  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1451)
Caused by: java.lang.reflect.InvocationTargetException: 

  at java.lang.reflect.Method.invoke (Native Method)

  at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick (AppCompatViewInflater.java:288)
Caused by: java.lang.NullPointerException: 

  at java.lang.reflect.Field.get (Native Method)

  at myApp.MyAppName.ReadingActivity.changeFlashStatus (ReadingActivity.java:412)

为什么它不适用于这些设备以及我如何解决这个问题?

有什么解决办法吗?

【问题讨论】:

  • 你为此添加了什么权限
  • 只有 CAMERA 权限
  • 好的,能把你设置onClickListener的代码贴出来
  • 我在xml布局中设置了onClick,我直接用这个方法

标签: android camera flashlight


【解决方案1】:

你需要两个权限Manifest.permission:

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

能够使用相机和手电筒。

注意:Android 6.0 版本包含用于访问camera’s flashlight 的新 API。

【讨论】:

  • 哦,太好了,我希望这都是关于权限而不是其他的,我应该请求手电筒权限还是只是把它放在清单中?
  • 没关系,我只是说我不需要为此请求许可。
  • 我只是不知道将 Camera2 api 与 Camera Source 一起用于手电筒。无论如何感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 2013-05-28
  • 1970-01-01
  • 2013-01-12
  • 2018-10-21
  • 2014-01-08
  • 2013-02-21
  • 2018-11-07
  • 1970-01-01
相关资源
最近更新 更多