2017-04-10 109 views
-3

我開發了具有被設置爲自動模式下的閃光燈選項的Android應用程序,但它崩潰的camera.open.I已經使用意圖打開相機相機應用程序崩潰的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) 

這裏是我的清單file.i增加了相機的權限和手電筒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> 

+0

你正在某種模擬器或真實設備上測試應用程序? –

+0

有很多類似的問題,搜索'java.lang.RuntimeException:無法連接到谷歌攝像頭服務',你會得到很多解決方案。像這些http://stackoverflow.com/questions/23904459/android-java-lang-runtimeexception-fail-to-connect-to-camera-service,http://stackoverflow.com/questions/26305107/how-to修復失敗連接到相機服務異常在Android模擬器 –

+0

我已經在真實設備上測試 – shivadeep

回答

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

使用這些,而不需要他們做,如果設備(排除萬難)不會有一個攝像頭

+0

我已經使用權限 – shivadeep

+0

我已經在運行時請求權限 – shivadeep

+0

我沒有其他人可以如果我們只是猜測這個問題,那就幫助你。將您的清單添加到問題 – Zoe

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

我已經使用了所有這些權限 – shivadeep