相机应用程序在 camera.open 崩溃



我正在开发一个Android应用程序,该应用程序具有设置为自动模式的闪光灯选项,但它在camera.open时崩溃

        Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            int result = context.checkCallingOrSelfPermission(Manifest.permission.CAMERA);
            int result2 = context.checkCallingOrSelfPermission(Manifest.permission.FLASHLIGHT);
            if((result==PackageManager.PERMISSION_GRANTED) && (result2==PackageManager.PERMISSION_GRANTED)) {
                cam = Camera.open();
                Camera.Parameters p = cam.getParameters();
                p.setFlashMode(Camera.Parameters.FLASH_MODE_ON);
                cam.setParameters(p);
                cam.startPreview();
            }
            cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
            startActivityForResult(cameraIntent,CAMERA_CAPTURE_IMAGE_REQUEST_CODE);
        }});

这是日志猫

             04-10 15:44:58.928 13248-13248/com.t4u.aapam E/AndroidRuntime: FATAL EXCEPTION: main
                                                           Process: com.t4u.aapam, PID: 13248
                                                           java.lang.RuntimeException: Fail to connect to camera service
                                                               at android.hardware.Camera.<init>(Camera.java:529)
                                                               at android.hardware.Camera.open(Camera.java:379)
                                                               at com.t4u.aapam.ListViewDisplay$1.onItemClick(ListViewDisplay.java:402)
                                                               at android.widget.AdapterView.performItemClick(AdapterView.java:305)
                                                               at android.widget.AbsListView.performItemClick(AbsListView.java:1148)
                                                               at android.widget.AbsListView$PerformClick.run(AbsListView.java:3059)
                                                               at android.widget.AbsListView$3.run(AbsListView.java:3866)
                                                               at android.os.Handler.handleCallback(Handler.java:739)
                                                               at android.os.Handler.dispatchMessage(Handler.java:95)
                                                               at android.os.Looper.loop(Looper.java:135)
                                                               at android.app.ActivityThread.main(ActivityThread.java:5292)
                                                               at java.lang.reflect.Method.invoke(Native Method)
                                                               at java.lang.reflect.Method.invoke(Method.java:372)
                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)

这是我的清单文件。我添加了相机权限和手电筒权限。我还添加了相机硬件许可

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.t4u.aapam">
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"       />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="com.telematics4u.permission.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
 <uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-feature android:name="android.hardware.camera"    android:required="false" />
<uses-feature android:name="android.hardware.camera.flash"
    android:required="false" />
<application
    android:name="com.t4u.aapam.App"
    android:allowBackup="true"
    android:icon="@drawable/launcher_logo"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

我可能是错的(因为我看不到您的清单.xml文件(,但我可以看到两种解决方案

1( 无法连接相机,因为它已被其他应用程序使用

你无法解决这个问题。如果相机被占用,则无法打开它。

2( 您尚未请求相机权限。

这是可以解决的。在清单中:

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

如果您的目标是android 6,则必须在运行时请求权限。为此,请参阅此链接。

编辑:

确保添加所有这些。这将使你的应用能够访问软件和硬件中的相机和手电筒。

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<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" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.flash" 
 android:required="false" />

也许这可以提供帮助,但我不确定

<permission android:name="android.permission.FLASHLIGHT"
         android:permissionGroup="android.permission-
group.HARDWARE_CONTROLS"
         android:protectionLevel="normal"/>