2017-01-07 4 views
-1

J'ai développé une application de lumière flash simple, cela fonctionne, mais il n'y a qu'un seul problème, quand je clique sur le bouton bascule, il allume la lumière, mais quand je clique sur l'application se bloque ...Toggle Button se bloque l'application Android

package com.example.flashapp; 

import android.hardware.Camera; 
import android.os.Bundle; 
import android.app.*; 
import android.widget.CompoundButton; 
import android.widget.Toast; 
import android.widget.ToggleButton; 

public class MainActivity extends Activity { 

ToggleButton toggleButton; 
Camera camera; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    toggleButton = (ToggleButton)findViewById(R.id.onOffFlashlight); 

    toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton compoundButton,boolean checked) { 
       //ToDo something 
       camera = Camera.open(); 
       Camera.Parameters parameters = camera.getParameters(); 
       parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 
       camera.setParameters(parameters); 
       camera.startPreview(); 
       Toast.makeText(getApplicationContext(), "Flash Light is ON", Toast.LENGTH_LONG).show(); 
     } 
    }); 

} 

}

+0

peut-être, vous devez arrêter la prévisualisation avant de commencer à nouveau –

Répondre

0

Vous devez toujours afficher le journal de plantage lors de la déclaration d'un accident ici. Mais dans ce cas, je peux réellement vous dire pourquoi - puisque vous ne libérez jamais la caméra, la deuxième fois que vous appelez Camera.open(), elle renvoie null, et vous plantez avec un NPE. Vous devez toujours relâcher l'appareil photo une fois terminé, et vous devez coder le cas où vous ne pouvez pas obtenir l'appareil photo pour une raison quelconque (une autre application peut l'utiliser).

En outre, votre case à cocher saisit toujours l'appareil photo - il n'y a aucun moyen de le désactiver, vous avez seulement codé le cas sur.

+0

Merci ... La prochaine fois que je vais le faire .... merci mec très bien – Elias

0

Changé aimer ce

toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton compoundButton,boolean checked) { 

      if (isChecked) { 
       camera = Camera.open(); 
       Camera.Parameters parameters = camera.getParameters(); 
       parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 
       camera.setParameters(parameters); 
       camera.startPreview(); 
       Toast.makeText(getApplicationContext(), "Flash Light is ON", Toast.LENGTH_LONG).show(); 
      } 
      else { 
        // Code to switch off Flashlight 
      } 

    } 
});