Frage von TKW00, 47

Taschenlampen App blockiert Kamera?

Hi ich wollte eine eigene Taschenlampe programmieren hab dies auch halbwegs Erfolgreich getan. Doch habe ich folgendes Problem:

Wenn ich die App öffne und die Lampe an und aus mache, sie dann schließe und die Handy Kamera, Snapchat oder änliches öffne kommt die Nachricht: Warnung Kamerafehler!

Ich schätze das die App die Kamera blockiert. Wie kann ich das beheben??

ActivityMain.java


import android.content.pm.PackageManager; import android.hardware.Camera; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.CompoundButton; import android.widget.Switch; import android.widget.Toast; import android.widget.ToggleButton;

public class MainActivity extends AppCompatActivity{

ToggleButton togglebtn;
Camera camera;
Camera.Parameters pam;
boolean lighton;


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


    togglebtn = (ToggleButton) findViewById(R.id.toggleButton);
    togglebtn.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

            if (isChecked == true){
                if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)){
                    if (camera == null){
                        camera = Camera.open();
                    }

                    pam = camera.getParameters();
                     pam.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
                    camera.setParameters(pam);
                    camera.startPreview();

                    lighton = true;

                }else{
                    Toast.makeText(getApplicationContext(), "keine LED-Lampe vorhanden", Toast.LENGTH_SHORT).show();
                }
            }
            if (isChecked == false){
                lightoff();
            }
        }
    });

}

public void lightoff(){
    if (lighton == false) {
        camera = Camera.open();

    }
    pam = camera.getParameters();
    pam.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
    camera.setParameters(pam);
    camera.stopPreview();

    lighton = false;
}
@Override
protected void onPause(){
    if (lighton == true) {
        lightoff();
        camera.release();
    }
    super.onPause();
}

@Override
protected void onResume() {
    togglebtn.setChecked(false);
    super.onResume();
}

}



Danke im vorraus:)

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von MalNachgedacht, 27

Du rufst 

camera.release();

beim Verlassen der Activity nur auf, wenn der Blitz eingeschaltet ist 

Ist der Blitz gerade aus dann ist:

 if (lighton == true) {

nicht erfüllt und die Camera wird nicht freigegeben und ist dadurch für andere Apps blockiert.

Ich würde vorschlagen die Camera IMMER in onResume zu öffnen

und IMMER in onPause mit 

camera.release();

wieder freizugeben - egal ob der Blitz gerade an oder aus ist.

Denn solange deine Taschenlampe App im Vordergrund ist willst Du ja die Kontrolle über die Kamera haben...

Bei OnResume macht es dann ggf. Sinn den Blitz vor Aufruf von camera.release() abzuschalten falls eingeschaltet ist

Kommentar von TKW00 ,

Vielen Dank es hat funktioniert :)

Kommentar von phigeek ,

Gute Antwort.

Nur schreibt bitte nicht (wie in Lehrbüchern aus den 70er Jahren, wo es in einigen Sprachen leider nicht anders möglich war)

if(isChecked == true) // Das ist der Tod jedes großen Progarmmes

schreibt stattdessen

if(isChecked)

oder

if(! isLighton)

Warum wohl? Bei den heute oftmals durch Cola und Chips verklebten Tastaturen geschieht ab und zu folgendes:

if(isChecked = true) // und voila: verloren!

ein

if(true == isChecked) kann könnte man ja gerade noch verstehen.

Ebenso in der Sprache C oder C++:

niemals

if(x == 4)

aber immer:

if(4 == x)

(warum wohl?)

Antwort
von Oskar2002xd, 35

Kannst du mir mal bitte die Apk per Google Drive schicken,vielleicht liegts auch nur an dein Handy. Sonst kann ich dir nicht helfen da in nichts von Programmieren verstehe

Keine passende Antwort gefunden?

Fragen Sie die Community