Я новичок в Xamarin
, в качестве задачи для начинающих я попросил показать список ближайших активных устройств Bluetooth (в только для Android ). без использования пакета NuGet
( кроме Prism )
Я следовал этому руководству и также искал здесь для моих ссылок
в моей функции OnReceive
я получаю BluetoothAdapter.ActionDiscoveryStarted
и BluetoothAdapter.ActionDiscoveryFinished
, но не BluetoothDevice.ActionFound
Я запустил новое приложение-шаблон призмы с dryioc container
Я запускаю приложение на своем телефоне OnePlus A6003 (Android 9.0 - API 28), и у меня есть 2 готовых для подключения устройства Bluetooth, одно на моем старом телефоне и на моем ноутбуке (windows 10), и я проверил их оба если они могут подключиться к моему устройству и все работает нормально
в моем AndroidManifest.xml я добавил
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
мой класс BroadcastReceiver
public class BluetoothDeviceReceiver : BroadcastReceiver
{
public static BluetoothAdapter Adapter => BluetoothAdapter.DefaultAdapter;
public override void OnReceive(Context context, Intent intent)
{
var action = intent.Action;
// Found a device
switch (action)
{
case BluetoothDevice.ActionFound:
// Get the device
var device = (BluetoothDevice)intent.GetParcelableExtra(BluetoothDevice.ExtraDevice);
// Only update the adapter with items which are not bonded
if (device.BondState != Bond.Bonded)
{
}
break;
case BluetoothAdapter.ActionDiscoveryStarted:
break;
case BluetoothAdapter.ActionDiscoveryFinished:
break;
default:
break;
}
}
}
и моя основная активность
protected override void OnCreate(Bundle bundle)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(bundle);
var coarseLocationPermissionGranted =
ContextCompat.CheckSelfPermission(this, Manifest.Permission.AccessCoarseLocation);
var fineLocationPermissionGranted =
ContextCompat.CheckSelfPermission(this, Manifest.Permission.AccessFineLocation);
if (coarseLocationPermissionGranted != Permission.Denied ||
fineLocationPermissionGranted == Permission.Denied)
ActivityCompat.RequestPermissions(this, LocationPermissions, LocationPermissionsRequestCode);
// Register for broadcasts when a device is discovered
_receiver = new BluetoothDeviceReceiver();
global::Xamarin.Forms.Forms.Init(this, bundle);
LoadApplication(new App(new AndroidInitializer()));
}
private void RegisterBluetoothReceiver()
{
if (_isReceiveredRegistered) return;
RegisterReceiver(_receiver, new IntentFilter(BluetoothDevice.ActionFound));
RegisterReceiver(_receiver, new IntentFilter(BluetoothAdapter.ActionDiscoveryStarted));
RegisterReceiver(_receiver, new IntentFilter(BluetoothAdapter.ActionDiscoveryFinished));
_isReceiveredRegistered = true;
}
private static void StartScanning()
{
if (!BluetoothDeviceReceiver.Adapter.IsDiscovering)
BluetoothDeviceReceiver.Adapter.StartDiscovery();
}
protected override void OnResume()
{
base.OnResume();
StartScanning();
// Register broadcast listeners
RegisterBluetoothReceiver();
}
что мне не хватает?
перезапуск телефона или других устройств не работает