Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android: Changing the actions of the Back button

I am making a game and I have an options page which turns the music on or off. I want to override the backbutton so that it goes back to the home page, you'll understand why when you see my code:

public class OptionsActivity extends Activity {

    private boolean isMyServiceRunning(String serviceCanonicalClassName) {
        ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
        for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
            if (serviceCanonicalClassName.equals(service.service.getClassName())) {
                return true;
            }
        }
        return false;
    }

    Intent i; // Handles MyMusicService.java


    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.options);


        final TextView tSound = (TextView) findViewById(R.id.textView2);

        final Button saveBtn = (Button) findViewById(R.id.optSaveBtn);
        final Button tblBtn = (Button) findViewById(R.id.tableBtn);

        i=new Intent(this, MyMusicService.class);

        final ToggleButton soundOption = (ToggleButton) findViewById(R.id.soundPref);


        boolean musicPlays = isMyServiceRunning(MyMusicService.class.getCanonicalName());


        soundOption.setChecked(musicPlays); 


        if(musicPlays==true){

            tSound.setText("On");
        }

        if(musicPlays==false) { 

            tSound.setText("Off");
        }


        soundOption.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {   

                // Perform action on clicks to control sound being on and off.   
                if(soundOption.isChecked()) {  

                    Toast.makeText(OptionsActivity.this, "Music on.", Toast.LENGTH_SHORT).show(); 
                    startService(i);
                    Intent i = new Intent(OptionsActivity.this, OptionsActivity.class);
                    startActivity(i);

                } 

                else {  

                    if(stopService(i)==true){

                        soundOption.setChecked(false);
                        stopService(i);
                        Toast.makeText(OptionsActivity.this, "Music off.", Toast.LENGTH_SHORT).show();
                        Intent i = new Intent(OptionsActivity.this, OptionsActivity.class);
                        startActivity(i);

                    }  
                }
            }

        });



        tblBtn.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {

                Intent tblView = new Intent(OptionsActivity.this, SQLView.class);
                startActivity(tblView);

            }
        });



        saveBtn.setOnClickListener(new View.OnClickListener(){

            public void onClick(View v) {



                switch (v.getId()){ 

                case R.id.optSaveBtn: //Determine what will happen when the user presses the "Submit button".
                    boolean optionsWork = true;
                    try{

                        String sound = tSound.getText().toString();

                        optionsDB entry = new optionsDB(OptionsActivity.this); //Creating a new instance of MasterMind game
                        entry.open();
                        entry.createOptionEntry(sound); //Passing both strings
                        entry.close();

                    }catch (Exception e){ //Creating an error message if for some reason the app cannot transfer data to the Database.

                        Toast.makeText(OptionsActivity.this, "Error", Toast.LENGTH_SHORT).show();
                    }

                    finally { //Creating an AlertDialog box when the user presses the Submit button.

                        if (optionsWork){

                            Toast.makeText(OptionsActivity.this, "Settings Saved", Toast.LENGTH_SHORT).show();

                        }

                    }

                    break;

                }
            }
        });
    }
}

Any help would be fantastic thank you.

Update: Added this, still doesn't work:

    @Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK ) {
        // do something on back.
        return true;
    }
    Intent i = new Intent(OptionsActivity.this, MainActivity.class);
    startActivity(i);
    return super.onKeyDown(keyCode, event);
}
like image 595
Matthew Perrott Avatar asked Mar 27 '12 11:03

Matthew Perrott


2 Answers

Use the onBackPressed() function to override the action of the back button. Here's some sample code:

@Override
public void onBackPressed()
{
    Intent intent = new Intent(this,ABC.class);
    startActivity(intent);
}

Write the action you want inside the onBackPressed() function.

like image 115
HjK Avatar answered Sep 28 '22 11:09

HjK


Override onKeyDown() of Activity, here you can handle various keys or can Override onBackPresses() too

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK ) {
        // do something on back.
        return true;
    }

    return super.onKeyDown(keyCode, event);
}
like image 39
Mohammed Azharuddin Shaikh Avatar answered Sep 28 '22 12:09

Mohammed Azharuddin Shaikh