Android 清单权限问题

Android Manifest Permissions issues

我按照在线教程学习如何创建一个简单的应用程序来打开和关闭 phone 的摄像头灯。

<manifest....>

<uses-permission android:name = "android.permission.CAMERA"/>
    <uses-feature android:name = "android.hardware.camera"/>
</manifest>

这在 android 清单中。 问题:当我按下 ON 按钮时它崩溃了(由我制作,在应用程序中)

堆栈跟踪:

07-17 22:27:13.990: E/AndroidRuntime(1775): FATAL EXCEPTION: main 
07-17 22:27:13.990: E/AndroidRuntime(1775): java.lang.NullPointerException 
07-17 22:27:13.990: E/AndroidRuntime(1775): at com.example.salpa.MainActivity.onClick(MainActivity.java:33) 
07-17 22:27:13.990: E/AndroidRuntime(1775): at android.view.View.performClick(View.java:4204) 
07-17 22:27:13.990: E/AndroidRuntime(1775): at android.view.View$PerformClick.run(View.java:17355) 
07-17 22:27:13.990: E/AndroidRuntime(1775): at android.os.Handler.handleCallback(Handler.java:725)

另一件奇怪的事情:当我安装应用程序时,没有关于需要什么权限的详细信息。

"The application can acces the following on your phone:" 什么也没有。 (尽管教程中的权限显示应用程序需要 Camera 权限。)

谁能帮帮我,谢谢。

setContentView(R.layout.activity_main);

Button aprinde =(Button)findViewById(R.id.aprinde);
//Button sting = (Button)findViewById(R.id.sting);

cameraObj = Camera.open();

aprinde.setOnClickListener(new View.OnClickListener()
{

    public void onClick(View view){

        Camera.Parameters cameraParams = cameraObj.getParameters();

        cameraParams.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);

        cameraObj.setParameters(cameraParams);
        cameraObj.startPreview();


    }

} );

您的应用程序崩溃是因为您运行它在没有后置摄像头的模拟器上运行。

Camera#open() 的文档:

Creates a new Camera object to access the first back-facing camera on the device. If the device does not have a back-facing camera, this returns null.

您可以通过检查 null 来修复崩溃。

public void onClick(View v) {
    if (cameraObj == null) {
        return;
    }
    Camera.Parameters cameraParams = cameraObj.getParameters();
    cameraParams.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
    cameraObj.setParameters(cameraParams);
    cameraObj.startPreview();
}

您还应该注意 setParameters,因为如果设备没有闪光灯,这也可能会崩溃。

public void onClick(View v) {
    if (cameraObj == null) {
        return;
    }
    Camera.Parameters cameraParams = cameraObj.getParameters();
    if (cameraParams.getFlashMode() == null) {
        return;
    }
    cameraParams.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
    cameraObj.setParameters(cameraParams);
    cameraObj.startPreview();
}