Search code examples
c#androidxamarin.androidheadsetheadphones

Detect plugged & unplugged event on headphone jack in Xamarin.Android


I'm trying to find a way to detect the plugged/unplugged event on headphone Jack in Xamarin.Android. Is there a way to do it in this? and if it is, how can I implement that functionality?


Solution

  • you can try to convert java code into c#, for example:

    [BroadcastReceiver(Enabled = true)]
    [IntentFilter(new[] { Android.Content.Intent.ActionHeadsetPlug })]
    public class MyBroadcastReceiver : BroadcastReceiver
    {
    
        bool Microphone_Plugged_in = false;
        public override void OnReceive(Context context, Intent intent)
        {
            String action = intent.Action;
            int iii;
            if (Intent.ActionHeadsetPlug.Equals(action))
            {
                iii = intent.GetIntExtra("state", -1);
                if (iii == 0)
                {
                    Microphone_Plugged_in = false;
                    Toast.MakeText(context, "microphone not plugged in", ToastLength.Long).Show();
                }
                if (iii == 1)
                {
                    Microphone_Plugged_in = true;
                    Toast.MakeText(context, "microphone plugged in", ToastLength.Long).Show();
                }
            }
        }
    }
    

    And usage:

    BroadcastReceiver broadcastReceiver;
    IntentFilter receiverFilter;
    

    and initialize value in method OnCreate of your activity:

    broadcastReceiver = new MyBroadcastReceiver();
    receiverFilter = new IntentFilter(Intent.ActionHeadsetPlug);
    

    And RegisterReceiver and UnregisterReceiver by override method OnResume and OnPause

        protected override void OnResume()
        {
            base.OnResume();
            RegisterReceiver(broadcastReceiver, receiverFilter);
        }
    
        protected override void OnResume()
        {
            base.OnResume();
    
            IntentFilter receiverFilter = new IntentFilter(Intent.ActionHeadsetPlug);
            RegisterReceiver(broadcastReceiver, receiverFilter);
        }
    

    For more, you can check thread: Detecting whether a headset is plugged into an Android device or not.

    https://learn.microsoft.com/en-us/xamarin/android/app-fundamentals/broadcast-receivers