Xamarin Android Reflection Сопряжение Bluetooth-мишень Исключение - PullRequest
0 голосов
/ 08 октября 2019

У меня небольшая проблема с подтверждением сопряжения Bluetooth. Вот код строки Java, который отлично работает:

// java.lang.SecurityException: Need BLUETOOTH PRIVILEGED permission: Neither user 10094 nor current process has android.permission.BLUETOOTH_PRIVILEGED.
// above perm is only granted to system apps, not third party apps ...
device.getClass().getMethod("setPairingConfirmation", boolean.class).invoke(device, true);

Но в Xamarin при запуске этой строки отображается исключение TagretException

device.Class.GetMethod("setPairingConfirmation", new Java.Lang.Class[] { Java.Lang.Boolean.Type }).Invoke(device, Java.Lang.Boolean.True);

Кто-нибудь знает, почему это происходит? Я использовал системное отражение вроде

device.GetType().GetMethod("SetPairingConfirmation").Invoke(device, new object[] { true });

И оно тоже не работает. Действительно смущен.

1 Ответ

0 голосов
/ 09 октября 2019

Вы делаете все намного сложнее, чем на самом деле!

Вы можете использовать только функцию SetPairingConfirmation()! Вам просто нужно убедиться, что вы поставили проверку для запуска кода, если уровень API превышает 19, поскольку BluetoothDevice был введен только тогда. Возможно, вы также захотите использовать другую функцию исключения, например, Java.IO.IOException.

public bool IsPairingConfirmed(Android.Bluetooth.BluetoothDevice device)
{
    bool confirmation = false;
    try
    {
        if ((int)Android.OS.Build.VERSION.SdkInt >= 19)
            confirmation = device.SetPairingConfirmation(true);
    }
    catch(Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
    return confirmation;
}

. Я надеюсь, что это имеет смысл, и убедитесь, что вы делаете все остальное правильно.

...