2016-08-04 20 views
0

シンプルなXamarin.Forms Bluetooth低エネルギースキャンアプリケーションを作成しました。私は唯一のAndroidのBluetoothを使用するように、私は、AndroidプロジェクトのMainActivity.csでスキャンを実装:Xamarin BLEスキャンのみが時々

namespace BlankAppXamlXamarinForms.Droid 
{ 
    [Activity(Label = "BlankAppXamlXamarinForms", Icon = "@drawable/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)] 
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity 
    { 
     private BluetoothManager _manager; 
     App app; 

     protected override void OnCreate(Bundle bundle) 
     { 
      TabLayoutResource = Resource.Layout.Tabbar; 
      ToolbarResource = Resource.Layout.Toolbar; 

      base.OnCreate(bundle); 

      global::Xamarin.Forms.Forms.Init(this, bundle); 
      app = new App(); 

      var appContext = Application.Context; 
      _manager = (BluetoothManager)appContext.GetSystemService(BluetoothService); 
      _manager.Adapter.BluetoothLeScanner.StartScan(new MyScanCallback(app)); 

      LoadApplication(new App()); 
     } 
    } 

    public class MyScanCallback : ScanCallback 
    { 
     App _app; 
     public MyScanCallback(App app) { 
      _app = app; 
     } 

     public override void OnScanResult(ScanCallbackType callbackType, ScanResult result) 
     { 
      _app.newDevice(result.Device.Name + " - " + result.Device.Address); 
     } 
    } 
} 

問題は、アプリケーションが開始された後、私はの表示を切り替えるときOnScanResultは瞬間だけの広告パケットを受信することです私の電話をオフにして、もう一度オンにします。一方、アプリケーションはほとんど広告パケットを受信しません。私のアプリケーションがいつもアクティブな広告パケットを受け取る方法は?

+0

付箋サービスを見てください –

+0

バックグラウンドで実行しているサービスは必要ありません。私はちょうどアプリケーションがディスプレイ上に見えるすべての時間広告パケットを受信したいです。 –

答えて

0

Appという2つのインスタンスを作成しています。

public class MainActivity : FormsAppCompatActivity 
{ 
    BluetoothManager bleManager; 
    App app; 
    ScanCallback scanCallback; 

    protected override void OnCreate(Bundle bundle) 
    { 
     TabLayoutResource = Resource.Layout.Tabbar; 
     ToolbarResource = Resource.Layout.Toolbar; 

     base.OnCreate(bundle); 

     Forms.Init(this, bundle); 

     app = new App(); 
     bleManager = (BluetoothManager)Application.Context.GetSystemService(BluetoothService); 
     scanCallback = new MyScanCallback(app); 

     LoadApplication(new App()); 
    } 

    protected override void OnResume() 
    { 
     base.OnResume(); 
     bleManager.Adapter.BluetoothLeScanner.StartScan(scanCallback); 
    } 

    protected override void OnPause() 
    { 
     base.OnPause(); 
     bleManager.Adapter.BluetoothLeScanner.StopScan(scanCallback); 
    } 
} 
:代わりに LoadApplication(new App());のかわり OnCreateでスキャンを開始する。また、あなたが OnResumeでスキャンを開始し、例えば OnPauseでスキャンを停止する場合があります LoadApplication(app);すなわち、あなたのフィールドに

appを渡すべきです

関連する問題