【问题标题】:camera app crashing at camera.open [duplicate]相机应用程序在camera.open崩溃[重复]
【发布时间】:2017-09-05 08:21:12
【问题描述】:

我正在开发一个 android 应用程序,它有一个设置为自动模式的 flash 选项,但它在 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);
        }});

这里是 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)

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

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

【问题讨论】:

标签: android


【解决方案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"/>

如果设备(很可能)没有摄像头,则在不需要它们的情况下使用它们会使应用无法运行

【讨论】:

  • 我已使用权限
  • 我已在运行时请求权限
  • 如果我们只是猜测问题,我和其他任何人都无法帮助您。将您的清单添加到问题中
  • 对不起,我会添加
【解决方案2】:

您应该使用所有这些权限

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

【讨论】:

  • 我已经使用了所有这些权限
猜你喜欢
  • 1970-01-01
  • 2011-03-03
  • 2018-08-03
  • 1970-01-01
  • 2018-10-12
  • 2018-05-07
  • 2012-10-15
  • 1970-01-01
  • 2023-03-21
相关资源
最近更新 更多