Ich möchte alle verfügbaren Bluetooth-Geräte (nicht nur verbundene Geräte) finden. Also schrieb ich diesen Code:Bluetooth-Geräte können nicht gefunden werden Xamarin Android
using System;
using Android.App;
using Android.Widget;
using Snackbar = Android.Support.Design.Widget.Snackbar;
using v7 = Android.Support.V7.App;
using Android.OS;
using Android.Views;
using Android.Bluetooth;
using Android.Content;
namespace Morpion
{
[Activity(Label = "HomeActivity")]
public class HomeActivity : Activity
{
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.DefaultAdapter;
static TextView connectionStateText;
bool connected = false;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Home);
Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);
var toolbar = FindViewById<Toolbar>(Resource.Id.toolbar);
SetActionBar(toolbar);
}
public override bool OnCreateOptionsMenu(IMenu menu)
{
MenuInflater.Inflate(Resource.Menu.OptionMenu, menu);
return true;
}
public override bool OnOptionsItemSelected(IMenuItem item)
{
RelativeLayout layout = FindViewById<RelativeLayout>(Resource.Id.homeLayout);
connectionStateText = FindViewById<TextView>(Resource.Id.connectionStateText);
ProgressBar connectionBar = FindViewById<ProgressBar>(Resource.Id.connectionBar);
if (item.ItemId == Resource.Id.about)
{
var about = new v7.AlertDialog.Builder(this);
about.SetTitle("About");
about.SetMessage(Resource.String.about);
about.SetNeutralButton("Close", delegate { });
about.Show();
}
else if (item.ItemId == Resource.Id.connect)
{
if (!connected && !bluetoothAdapter.IsEnabled)
{
Snackbar.Make(layout, "Please activate bluetooth", Snackbar.LengthLong)
.SetAction("Activate", delegate
{
bluetoothAdapter.Enable();
})
.Show();
}
else if (!connected)
{
connectionStateText.Text = "Connection";
connectionBar.Indeterminate = true;
connectionBar.Visibility = ViewStates.Visible;
System.Collections.Generic.ICollection<BluetoothDevice> devices = bluetoothAdapter.BondedDevices;
var filter = new IntentFilter(BluetoothDevice.ActionFound);
var receiver = new Receiver();
if (bluetoothAdapter.IsDiscovering)
{
bluetoothAdapter.CancelDiscovery();
}
RegisterReceiver(receiver, filter);
bluetoothAdapter.StartDiscovery();
}
else
{
connectionStateText.Text = "Not connected";
item.SetTitle("Connect");
connected = false;
}
}
return base.OnOptionsItemSelected(item);
}
public class Receiver : BroadcastReceiver
{
public override void OnReceive(Context context, Intent intent)
{
string action = intent.Action;
if (action == BluetoothDevice.ActionFound)
{
Console.WriteLine("found");
}
}
}
}
}
Mein Problem ist, dass die OnReceive Methode Feuer nie und ich weiß wirklich nicht, warum es nicht funktioniert.
Ich bin mit Android API 23 und teste ich meinen Code auf einem Huawei Nexus 6P auf Android 6.0.1 laufen
Je nachdem, welche API Sie verwenden, müssen Sie möglicherweise die entsprechende Berechtigung aktivieren. Es sollte bei der ersten Verwendung fragen, aber ein Mal, dass nicht passiert und ich verbrachte einige Zeit versuchen, es herauszufinden ... – nurchi
Ich habe [BroadcastReceiver (Enabled = True, Label = "Empfänger")] vor meinem Empfänger , aber es ändert nichts. Für die Berechtigungen habe ich Bluetooth und Bluetooth_admin – Creends
@Creends: Haben Sie die erforderlichen Berechtigungen? http://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-hardware-id – Giorgi