Search code examples
javaandroidaudioandroid-studiosilent

How to always check a condition in Android?


I want to develop an app to toggle the device's audio status. If the audio status is silent then my button's text should be "silent", if it's normal the text should be "normal"

Here is my only class:

public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final Button btn1= (Button) findViewById(R.id.btn1);
    final AudioManager audio = (AudioManager)getSystemService(Context.AUDIO_SERVICE);

    if (audio.getRingerMode()==AudioManager.RINGER_MODE_NORMAL)
    {
        btn1.setText("Normal");
    }
    else if (audio.getRingerMode()==AudioManager.RINGER_MODE_SILENT)
    {
        btn1.setText("Silent");
    }

    btn1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            btn1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (audio.getRingerMode()==AudioManager.RINGER_MODE_NORMAL)
                    {
                        audio.setRingerMode(AudioManager.RINGER_MODE_SILENT);
                        btn1.setText("Silent");
                    }
                    else if (audio.getRingerMode()==AudioManager.RINGER_MODE_SILENT)
                    {
                        audio.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
                        btn1.setText("Normal");
                    }
                                      }
            });
        }
    });

How can I always check this condition in Android ?


Solution

  • If you need to get the mode of current ringer even if it was changed outside from you application context then you should register a BroadcastReceiver for AudioManager.RINGER_MODE_CHANGED_ACTION.

    This receiver will be called everytime someone changes the ringer mode.

    Do this inside onCreate.

    BroadcastReceiver receiver=new BroadcastReceiver(){
        @Override
        public void onReceive(Context context, Intent intent) {
              if (audio.getRingerMode()==AudioManager.RINGER_MODE_NORMAL)
              {
                  btn1.setText("Silent");
              }
              else if (audio.getRingerMode()==AudioManager.RINGER_MODE_SILENT)
              {
                  btn1.setText("Normal");
              }
        }
    };
    
    IntentFilter filter=new IntentFilter(AudioManager.RINGER_MODE_CHANGED_ACTION);
    registerReceiver(receiver,filter);