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

时间:2017-04-10 10:20:52

标签: android

我正在开发一个Android应用程序,它有一个闪存选项,设置为自动模式,但它崩溃在camera.open.I已使用意图打开相机

        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);
        }});

这里是LOGCAT

             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)

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

<?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>

2 个答案:

答案 0 :(得分:1)

我可能错了(因为我没有看到你的Manifest.xml文件),但我可以看到两种解决方案

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

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

2)您尚未请求相机许可。

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

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

如果你的目标是android 6,你必须在运行时请求权限。为此,see this link

编辑:

确保添加所有这些内容。这将使您的应用程序可以通过软件和硬件访问相机和手电筒。

<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"/>

使用这些不需要它们会使应用程序无法正常工作(如果设备(不是所有))没有相机

答案 1 :(得分:0)

您应该使用所有这些权限

<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"/>