Android: Changing the actions of the Back button

Matthew Perrott picture Matthew Perrott · Mar 27, 2012 · Viewed 22.8k times · Source

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);
}

Answer

HjK picture HjK · Mar 27, 2012

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.