簡體   English   中英

無法在 android 中按下藍牙按鈕

[英]Unable to get bluetooth button pressed in android

我不再能夠確定從我的任何藍牙設備按下了哪個按鈕。

GetParcelableExtra 在 MEDIA_BUTTON 意圖回調中為 KEY_EVENT 返回 null。

此方法工作了幾個月,但突然開始在 GetParcableExtra 上返回 null。

如何從 xamarin 中的后台服務獲取藍牙按鈕事件?

    namespace foo
    {
        [Service]
        class BackgroundService : Service
        {
            [return: GeneratedEnum]
            public override StartCommandResult OnStartCommand(Intent intent, [GeneratedEnum] StartCommandFlags flags, int startId)
            {
                registerMediaButtons();
                
                return StartCommandResult.Sticky;
            }

        private void registerMediaButtons()
        {
            var am = (AudioManager)this.GetSystemService(AudioService);
            var componentName = new ComponentName(PackageName, new MyMediaButtonBroadcastReceiver().ComponentName);
            #pragma warning disable CS0618 // Type or member is obsolete
            am.UnregisterMediaButtonEventReceiver(componentName);
            am.RegisterMediaButtonEventReceiver(componentName);
            #pragma warning restore CS0618 // Type or member is obsolete
        }

        [BroadcastReceiver]
        [IntentFilter(new[] { Intent.ActionMediaButton, Intent.ActionHeadsetPlug, AudioManager.ActionAudioBecomingNoisy })]
        public class MyMediaButtonBroadcastReceiver : BroadcastReceiver
        {
            public string ComponentName { get { return Class.Name; } }

            public override void OnReceive(Context context, Intent intent)
            {
                if (intent.Action == Intent.ActionMediaButton)
                {
                    var keyEvent = (KeyEvent)intent.GetParcelableExtra(Intent.ExtraKeyEvent);

                    if (keyEvent == null)// always null now
                        return;

                    if (keyEvent.KeyCode == Keycode.Headsethook)
                    {
                        if (keyEvent.Action == KeyEventActions.Down)
                        {
                            
                        }
                    }
                }
            }
        }
    }
}

public T getParcelableExtra (String name)方法在 API 級別 33 中已棄用。這就是您可能無法使用此方法的原因。

它提供了新方法public T getParcelableExtra (String name, Class<T> clazz) ,您可以使用它。 可以參考新的getParcelableExtra

另外,我找到了關於Xamarin C# 替代 GetParcelableExtra的問答。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM