.NET MAUI Как получить действие кнопки на наушникеAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 .NET MAUI Как получить действие кнопки на наушнике

Сообщение Anonymous »

Я пробовал использовать BroadcastReceiver и ActionMediaButton, но ничего не получил. Априори код хорош, так как работает с android.intent.action.PHONE_STATE который позволяет мне отключать воспроизведение музыки при включенном телефоне.
Посмотрел в интернете, ничего не нашел. Мне трудно поверить, что для этого нужно использовать Bluetooth.
Очевидно, мой вопрос выходит за рамки. Я пытаюсь задать этот вопрос без особой надежды.
Я пробовал с BroadcastReceiver и ActionMediaButton, но ничего не получаю. Априори код хорош, поскольку он работает с android.intent.action.PHONE_STATE, который позволяет мне отключать воспроизведение музыки во время игры на телефоне.
Это код:

Код: Выделить всё

public class MainActivity : MauiAppCompatActivity
{
private PhoneCallReceiver _phoneCallReceiver;

protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
IntentFilter filterPhone = new IntentFilter();
filterPhone.AddAction("android.intent.action.MEDIA_BUTTON");
filterPhone.AddAction("android.intent.action.PHONE_STATE");
_phoneCallReceiver = new Platforms.Android.PhoneCallReceiver();
if (Build.VERSION.SdkInt >= BuildVersionCodes.Tiramisu) // Android 33
{
RegisterReceiver(_phoneCallReceiver, filterPhone,    ReceiverFlags.Exported);
}
else
{
RegisterReceiver(_phoneCallReceiver, filterPhone);
}
}....
Another file
[BroadcastReceiver(Enabled = false, Exported = true)]
public class PhoneCallReceiver : BroadcastReceiver
{
public delegate void PlayMusic();
static public PlayMusic DelegatePlayMusic;
static bool tantQuePasRacroche = false ;
public override void OnReceive(Context context, Intent intent)
{
System.Diagnostics.Debug.WriteLine("MaMusique", intent.Action);
if (intent.Action == "android.intent.action.PHONE_STATE")
{
System.Diagnostics.Debug.WriteLine("MaMusique",    "android.intent.action.PHONE_STATE");
string state = intent.GetStringExtra(TelephonyManager.ExtraState);
if (state == TelephonyManager.ExtraStateRinging)
{
// Traitement à effectuer lors d'un appel entrant
//Toast.MakeText(context, "Appel entrant détecté",         ToastLength.Long).Show();
if (!tantQuePasRacroche)
{
tantQuePasRacroche = true;
DelegatePlayMusic();
}
}
else if (state == TelephonyManager.ExtraStateIdle)
{
// Traitement à effectuer lors de la fin de l'appel
//Toast.MakeText(context, "Appel terminé", ToastLength.Long).Show();
DelegatePlayMusic();
tantQuePasRacroche = false;
}
}
else if (intent.Action == "android.intent.action.MEDIA_BUTTON")
{
// Traitement à effectuer lors de l'appui sur un bouton de         commande de la musique
//Toast.MakeText(context, "Bouton de commande de la musique appuyé", ToastLength.Long).Show();
System.Diagnostics.Debug.WriteLine("MaMusique", "android.intent.action.MEDIA_BUTTON");
KeyEvent keyEvent;
if (Build.VERSION.SdkInt >= BuildVersionCodes.Tiramisu) // Android 13 (API 33)
{
keyEvent = intent.GetParcelableExtra(Intent.ExtraKeyEvent, Java.Lang.Class.FromType(typeof(KeyEvent))) as KeyEvent;
}
else
{
keyEvent = (KeyEvent)intent.GetParcelableExtra(Intent.ExtraKeyEvent);
}
System.Diagnostics.Debug.WriteLine($"Sending KeyEvent multimédia appuyé keycode = {keyEvent.KeyCode}");
if (keyEvent != null &&  keyEvent.Action == KeyEventActions.Down)
{
if (keyEvent.KeyCode == Keycode.MediaPlayPause)
{
//Gérer l'événement du bouton multimédia ici
System.Diagnostics.Debug.WriteLine("MaMusique", "Sending KeyEvent Pause appuyé");

}
else if (keyEvent.KeyCode == Keycode.MediaNext)
{
//Gérer l'événement du bouton multimédia ici
System.Diagnostics.Debug.WriteLine("MaMusique", "Sending KeyEvent Next  appuyé");
}
else if (keyEvent.KeyCode == Keycode.MediaPrevious)
{
//Gérer l'événement du bouton multimédia ici
System.Diagnostics.Debug.WriteLine("MaMusique", "Sending KeyEvent Previous appuyé");
}
else if (keyEvent.KeyCode == Keycode.MediaPlay)
{
System.Diagnostics.Debug.WriteLine("MaMusique", "Sending KeyEvent Play appuyé");
}
}
}
}
А это манифест:
Изображение

Но я должен сказать, что я использую MediaElement Nuget в своем приложении для прослушивания музыки, и в итоге я подумал, что именно nuget получает MediaButton, и именно поэтому Я ничего не получал в BroadcastReveiver. У меня нет другого приложения. Я работал с GitHub Copilot, который предлагал мне 36 000 вариантов кода, но ни один из них не работал. Он даже делает совершенно безумные предложения. Он не может сказать, что я не знаю.

Подробнее здесь: https://stackoverflow.com/questions/790 ... n-earphone
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»