2x auf Zurück-Taste zum Schließen

Lucaaa

Bekanntes Mitglied
Hallo!
Ich habe eine kleine Taschenlampe programmiert. Die Lampe an sich funktioniert auch so wie sie soll aber jetzt wollte ich noch eine Funktion einbauen, dass wenn man auf die Züruck-Taste drückt sich die App nicht gleich schließt, sondern erst eine Nachricht angezeigt wird dass man zum schließen nochmal auf zurück drücken muss.
Aber irgendwie funktioniert das nicht.
Hier der Code:

Java:
package com.example.androlamp;

import android.app.Activity;
import android.content.pm.PackageManager;

import android.hardware.Camera.Parameters;
import android.os.Bundle;
import android.os.Handler;
import android.view.KeyEvent;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.CompoundButton;
import android.widget.Switch;
import android.widget.Toast;

   
public class MainActivity extends Activity {

    Switch s1;
    android.hardware.Camera cam; 
    Parameters param; 
    boolean licht;
   
    boolean pressedBackKey;
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
   
    s1 = (Switch) findViewById(R.id.switch1);
    s1.setOnCheckedChangeListener(new OnCheckedChangeListener() {
       
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
           
            if(isChecked == true) {
                if(getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)) {
                    if(cam == null) {
                        cam = android.hardware.Camera.open();
                    }
                   
                    param = cam.getParameters();
                    param.setFlashMode(Parameters.FLASH_MODE_TORCH);
                    cam.setParameters(param);
                    cam.startPreview();
                   
                    licht = true;
                   
                } else {
                    Toast.makeText(getApplicationContext(), "your cellphone do not have a flash!", Toast.LENGTH_SHORT).show();
                }
            }
            if(isChecked == false) {
                lichtaus();
            }
           
        }
        });
    }


public void lichtaus() {
    if(licht == false) {
        cam = android.hardware.Camera.open();
    }
   
    param = cam.getParameters();
    param.setFlashMode(Parameters.FLASH_MODE_OFF);
    cam.setParameters(param);
    cam.stopPreview();
   
    licht = false;
   
   
   
}


@Override
protected void onPause() {
    if (licht == true) {
    lichtaus();
    cam.release();
}
    super.onPause();
}

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


    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK )    {
            if (pressedBackKey = false) {
                pressedBackKey = true; 
                Toast.makeText(getApplicationContext(), "Zurücktaste doppelt drücken um App zu schließen", Toast.LENGTH_SHORT).show();
               
                new Handler().postDelayed(new Runnable() {
                   
                    @Override
                    public void run() {
                        pressedBackKey = false;
                    }
                } , 3000); 
            } else if (pressedBackKey = true) {
                onBackPressed();
            }
           
           

 
 
   
   



   
}
        return true;
    }
}
 

Robat

Top Contributor
Ich würde es nicht mit der onKeyDown(int, KeyEvent); Methode machen sondern gleich die onBackPressed() Methode überschreiben.

Hier mal ein kleines Beispiel wie ich es machen würde:

Java:
boolean backPressedOnce= false;
@Override
public void onBackPressed()
{
    if(backPressedOnce)
    {
         super.onBackPressed();
         return;
    }
 
    this.backPressedOnce = true;
    Toast.makeText(this, "Press back again to exit.", Toast.LENGTH_LONG).show();

    new Handler().postDelayed(new Runnable()
    {
          @Override
          public void run()
          {
               backPressedOnce = false;
          }
    }, 3000);
}

Anmerkungen zu deinem Code:
(1)
Achte darauf, dass du zum vergleichen == nimmst. Du hast einige IFs drinne wo du in der Bedingung einer Variable mittels = einen Wert zuweißt. Daher geht dein Code auch nicht.

(2)
Die onBackPressed() Methode solltest du über super.onBackPressed() aufrufen.

Lg
 

Lucaaa

Bekanntes Mitglied
ok. Danke jetzt geht auch alles.
Macht es denn einen Unterschied ob ich es mit
Java:
super.onBackPressed()
mache?
 

Neue Themen


Oben