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"/>
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);
}
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
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!
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é.
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();
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
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/
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.
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();
}
}
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.