web-dev-qa-db-fra.com

android Java lang runtimeexception ne parvient pas à se connecter au service de caméra

Je travaille actuellement sur Flashlight On/OFF. Je reçois cette erreur Java.lang.RuntimeException: Fail to connect to camera service Je ne sais pas pourquoi cette erreur se produit. J'ai évoqué de nombreuses solutions mais mon problème n'était toujours pas résolu. Lorsque la lampe de poche est allumée, l'erreur ne se produit pas, mais lorsque la lampe de poche est éteinte, l'erreur se produit.

Mon code code principal .

La permission de mon manifeste:

<uses-permission Android:name="Android.permission.CAMERA" />
<uses-feature Android:name="Android.hardware.camera" />
<uses-feature Android:name="Android.hardware.camera.autofocus"/>
51
Jigar Shekh

essaye ça...

 static Camera camera = null;

le déclarer sur le dessus.

 try{ 
   if(clickOn == true) {
       clickOn = false;
       camera = Camera.open();
       Parameters parameters = camera.getParameters();
       parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
       camera.setParameters(parameters);
       camera.startPreview();

       remoteViews.setViewVisibility(R.id.button1, View.GONE);
       remoteViews.setViewVisibility(R.id.button2, View.VISIBLE);
       localAppWidgetManager.updateAppWidget(componentName, remoteViews);
   } else {
       clickOn = true;
       camera.stopPreview();
       camera.release();
       camera = null;

       remoteViews.setViewVisibility(R.id.button1, View.VISIBLE);
       remoteViews.setViewVisibility(R.id.button2, View.GONE);
       localAppWidgetManager.updateAppWidget(componentName, remoteViews);
   }    
} catch(Exception e) {
   Log.e("Error", ""+e);
}
15
Jay Vyas

J'ai eu le même problème qu'aucune des réponses ici résolus, donc après l'avoir résolu, j'ajoute ma façon de le résoudre. Ceci s'applique aux nouvelles versions Android qui prennent en charge la définition d'autorisations par application (depuis Marshmallow, 6.0). L'autorisation d'appareil photo pourrait être désactivée et devrait être activée à partir des paramètres de cette application. Paramètres -> Applications -> [Votre application] -> Autorisations

Plus d'informations à ce sujet ici: http://developer.Android.com/training/permissions/requesting.html

91
sam

J'ai aussi vu cette erreur:

Java.lang.RuntimeException: échec de la connexion au service de caméra

tout en expérimentant avec une application lampe de poche. Il s'avère que j'étais un peu bâclé avec mes autorisations et les ai copiées dans le corps du bloc d'application dans le fichier manifest.xml. Donc, vous devez VRAIMENT obéir à la syntaxe décrite dans:

http://developer.Android.com/guide/topics/manifest/manifest-element.html

Sinon, l'application échouera avec l'échec de la connexion au service sur l'appel Camera.open (). Cela devrait ressembler à ceci en fonction de vos autorisations dans la question:

<uses-permission Android:name="Android.permission.CAMERA" />
<uses-feature Android:name="Android.hardware.camera" />
<uses-feature Android:name="Android.hardware.camera.autofocus"/>

<application

Assurez-vous que votre autorisation et votre liste de fonctionnalités ne figurent que dans la section du manifeste, et non dans la section de l'application!

25
Jim Andreas

Ce problème peut survenir dans Android 6.0 si vous n’avez pas activé l’autorisation caméra de votre application. À partir de Android 6.0, vous pouvez gérer donner ou non une autorisation spécifique pour une application.

Donc, vous devez activer la permission de settings->apps->your_app->enable camera permission si ce n'est pas déjà activé.

13
0xAliHn

Si votre version OS est la version 6.0 ou ultérieure, essayez ceci, espérons que cela vous aidera.

public class RequestUserPermission {

private Activity activity;
// Storage Permissions
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
        Manifest.permission.READ_EXTERNAL_STORAGE,
        Manifest.permission.WRITE_EXTERNAL_STORAGE,
        Manifest.permission.CAMERA
};

public RequestUserPermission(Activity activity) {
    this.activity = activity;
}

public  void verifyStoragePermissions() {
    // Check if we have write permission
    int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);

    if (permission != PackageManager.PERMISSION_GRANTED) {
        // We don't have permission so Prompt the user
        ActivityCompat.requestPermissions(
                activity,
                PERMISSIONS_STORAGE,
                REQUEST_EXTERNAL_STORAGE
        );
    }
}
}


**//CALL FROM YOUR ACTIVITY**
 RequestUserPermission requestUserPermission = new RequestUserPermission(this);
    requestUserPermission.verifyStoragePermissions();
7
Mohammad nabil

si vous essayez d'ouvrir la caméra à l'aide d'un ID de caméra inexistant, vous recevrez le même message d'erreur (Java.lang.RuntimeException: échec de la connexion au service de caméra).

regardez votre code à ce bloc

camera.setParameters(parameters);
camera.stopPreview();
camera.release();
camera = null;

Appelez release() pour que l'appareil photo soit utilisé par d'autres applications. Les applications doivent libérer l'appareil photo immédiatement dans onPause() (et le rouvrir () le dans onResume().

Dans le code ci-dessus, immédiatement après la publication, vous mettez null à la caméra

4
Karim Baidar

Bonjour, j'espère que vous avez affaire à une application de type flambeau ou à quelque chose lié au flash et que de nombreuses discussions ont eu lieu sur ce sujet auparavant. Voici quelques liens utiles et des tutoriels pour répondre à vos besoins. Veuillez les parcourir en espérant qu'ils pourront vous aider.

Comment allumer la lumière du flash de l'appareil photo par programme dans Android?

http://www.androidhive.info/2013/04/Android-developing-flashlight-application/

http://www.compiletimeerror.com/2013/08/how-to-turn-onoff-camera-led-flashlight.html#.U4WH5Xbc3o4

http://Android.programmerguru.com/Android-flashlight-example/

2

La réponse simple que je puisse trouver à ce problème est que je ne demandais pas l'autorisation d'appareil photo à l'utilisateur, et c'est pourquoi, par défaut, l'autorisation d'appareil photo n'était pas disponible pour mon application sur les appareils Marshmallow. J'ai simplement ajouté la vérification des autorisations pour l'appareil photo avant de démarrer l'appareil photo et tout fonctionne correctement.

1
Keval Patel

Vous devez stopPreview() et release() une fois que vous êtes rentré de l'appareil photo pour que d'autres applications puissent y accéder. Rendez la classe "Camera" statique et appelez-la null dans onPause(). Cela résout mon problème.

Essaye le:

 public class CameraPhotoCapture extends Activity{
    static Camera mcamera = null;
    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        if (mcamera != null) {
            mcamera.stopPreview();
            mcamera.release();
            mcamera = null;
            Log.d(DEBUG_TAG, "releaseCamera -- done");
        }
        super.onPause();
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        if (mcamera != null) {

            Camera.open();
            Log.d(DEBUG_TAG, "openCamera -- done");
        }
        super.onResume();
    }
}
1
anand krish

Essayez d'utiliser cette ligne lorsque vous quittez l'application:

System.exit(0);

Je viens de recevoir le code d'une application Flashlight quelque part. Il utilisait System.exit(0) pour fermer l'application. Je l'ai enlevé, sachant que ce n'est pas une bonne pratique. Puis j'ai commencé à recevoir ces erreurs. J'ai essayé la solution de la réponse acceptée, mais j'ai ensuite commencé à recevoir d'autres erreurs. Donc, au lieu de les résoudre, je viens de remettre cette ligne System.exit(0). Et ça a commencé à bien fonctionner. Je sais que ce n'est pas un bon moyen, mais pour une petite application pour lampe de poche, vous pouvez essayer cette solution rapide.

0
Ashish Tanna