2011-07-31 37 views
9

Próbowałem utworzyć aplikację, niż włączać i wyłączać lampę błyskową aparatu. Kod mam atm wygląda następująco:Wyjątek java.lang.RuntimeException: nie można połączyć się z usługą kamery

Camera flash; 
Camera.Parameters params; 

flash = Camera.open(); 
params = flash.getParameters(); 

params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);   
flash.setParameters(params); 

A w oczywisty xml:

<permission android:name="android.permission.FLASHLIGHT" 

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

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

Everytime I uruchomić kod, awarii aplikacji na "błysk = Camera.open();" z tym błędem:

java.lang.RuntimeException: Fail to Connect to camera service

Co robię źle?

+5

Mimo problemów z formatowaniem z częścią manifestu, powiedziałbym, że musisz użyć znaczników zamiast tagów dla latarki i aparatu. Aby to wyjaśnić, proszę wysłać poprawnie sformatowaną część manifestu (i prawdopodobnie cały stacktrace, jeśli jest to problem z uprawnieniami, powinna być podpowiedź przed wyjątkiem w logcat). –

+0

Dziękuję, to mi bardzo pomogło! – gethan

Odpowiedz

34

Aby uzyskać dostęp do kamery urządzenia, należy zadeklarować jako gość aparatu w Androidzie Manifest tak,

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

To nie do końca prawda, nie potrzebujesz znacznika use-feature do uzyskania dostępu do kamery: "Zadeklarowane elementy mają jedynie charakter informacyjny, co oznacza, że ​​sam system Android nie sprawdza zgodności obsługi funkcji na urządzeniu przed instalowanie aplikacji. Jednak inne usługi (takie jak Google Play) lub aplikacje mogą sprawdzać deklaracje w aplikacji w ramach obsługi lub interakcji z aplikacją. " http://developer.android.com/guide/ topics/manifest/uses-feature-element.html – stoefln

1

Zwykle, że problemem jest to, ze względu na brakujące zezwolenia żądanie aparat, jak już zostało powiedziane przez innych użytkowników.

Ale, żeby zarejestrować tutaj inną przyczynę, jeśli spróbujesz otworzyć aparat za pomocą cameraID, który nie istnieje, otrzymasz ten sam błąd

java.lang.RuntimeException: Fail to Connect to camera service

7

może zapomniałeś zadzwonić uwalnianie w onDestroy

na przykład:

@Override 
protected void onDestroy() { 
    if (mCamera != null) { 
     mCamera.release(); 
    } 
    super.onDestroy(); 
} 
1

trzeba dodać nową Proszę o pozwolenie na Androidzie 6.x programowo wcześniej.

private static final int MY_PERMISSIONS_REQUEST_CAMERA = 555; 

if (ContextCompat.checkSelfPermission(getActivity(), android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { 
      ActivityCompat.requestPermissions(getActivity(), new String[]{android.Manifest.permission.CAMERA}, MY_PERMISSIONS_REQUEST_CAMERA); 
     } else { 
      IntentIntegrator.forSupportFragment(this).initiateScan(); 
     } 

@Override 
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case MY_PERMISSIONS_REQUEST_CAMERA: { 
      if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       IntentIntegrator.forSupportFragment(this).initiateScan(); 
      } else { 
       FragmentHelper.popFragment(getActivity(), null, null); 
      } 
     } 
    } 
} 
Powiązane problemy