2016-04-13 7 views
0

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

Antwort

3

Sie benötigen BroadcastReceiver Attribut zu Ihrem Empfänger hinzuzufügen. In Android 6 müssen Sie außerdem die Berechtigungen ACCESS_FINE_LOCATION und ACCESS_COARSE_LOCATION zur Laufzeit anfordern: Request permission

+0

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

+0

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

+0

@Creends: Haben Sie die erforderlichen Berechtigungen? http://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-hardware-id – Giorgi

Verwandte Themen