2017-10-12 27 views
0

음 BLE 광고를 검색 할 수있는 프로그램을 만들려고합니다. 필자는 Windows- 보편적 샘플, 더 정확하게는 BluetoothAdvertisement라는 샘플을 조사해 왔습니다. BLE 광고를 검색하여 목록 상자에 표시 할 수있는 간단한 UWP 응용 프로그램을 만들고 싶습니다. 하지만 내 응용 프로그램은 전혀 아무것도 찾을 수 없으며 완전히 잃어 버렸습니다.BLE 광고 UWP 응용 프로그램

namespace BleDiscAdv2 
{ 

public sealed partial class MainPage : Page 
{ 
    // The Bluetooth LE advertisement watcher class is used to control and customize Bluetooth LE scanning. 
    private BluetoothLEAdvertisementWatcher watcher; 

    public MainPage() 
    { 
     this.InitializeComponent(); 

     // Create and initialize a new watcher instance. 
     watcher = new BluetoothLEAdvertisementWatcher(); 

     //Set the in-range threshold to -70dBm. This means advertisements with RSSI >= -70dBm 
     //will start to be considered "in-range" 
     watcher.SignalStrengthFilter.InRangeThresholdInDBm = -70; 

     // Set the out-of-range threshold to -75dBm (give some buffer). Used in conjunction with OutOfRangeTimeout 
     // to determine when an advertisement is no longer considered "in-range" 
     watcher.SignalStrengthFilter.OutOfRangeThresholdInDBm = -75; 

     // Set the out-of-range timeout to be 2 seconds. Used in conjunction with OutOfRangeThresholdInDBm 
     // to determine when an advertisement is no longer considered "in-range" 
     watcher.SignalStrengthFilter.OutOfRangeTimeout = TimeSpan.FromMilliseconds(2000); 

    } 

    protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     // Attach a handler to process the received advertisement. 
     // The watcher cannot be started without a Received handler attached 
     watcher.Received += OnAdvertisementReceived; 
    } 

     private void btStart_Click(object sender, RoutedEventArgs e) 
    { 
     watcher.Start(); 
    } 

    private async void OnAdvertisementReceived(BluetoothLEAdvertisementWatcher watcher, BluetoothLEAdvertisementReceivedEventArgs eventArgs) 
    { 
     DateTimeOffset timestamp = eventArgs.Timestamp; 
     string localName = eventArgs.Advertisement.LocalName; 

     await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,() => 
     { 
      lbModtaget.Items.Add("Name of device: " + localName + "\t" + "Time for advertisement: " + timestamp.ToString("hh\\:mm\\:ss\\.fff")); 
     }); 
    } 
} 
} 

누군가가 잘못되었다고 말할 수 있습니까? 저는 BLE에 익숙하지 않고 잠시 코딩을하지 않았습니다. 기독교

답변

0

하지만 내 응용 프로그램이 모든에서 아무것도 찾을 수 없습니다와 나는 완전히 잃었어요

감사합니다.

  • 앱이 Package.appxmanifest에 블루투스 기능이 활성화되어 있는지 확인하십시오. 자세한 내용은 Basic Setup을 참조하십시오.
  • 실행중인 장치의 Bluetooth 라디오가 켜져 있고 사용 가능한지 확인하십시오.
  • 광고를 게재하고 필터를 충족하는 기기가 있습니다. 다른 장치에서 Bluetooth advertisement official sample의 시나리오 2를 실행하여이를 확인하십시오.

제 편으로 테스트하면 코드 스 니펫이 BLE 광고를 제대로 검색 할 수 있습니다. 코드 스 니펫에서 앱에 대한 알림을위한 watcher의 Stopped 이벤트 핸들을 청취하지 않았습니다. 앱에 대한 Bluetooth LE 검색이 취소되었거나 앱에서 오류로 인해 중단되었거나 중단되었습니다. 감시자가 강제로 중지되면 광고를받지 못합니다.

Stopped 이벤트 핸들을 추가하여 BluetoothError이 있는지 확인할 수 있습니다. 예를 들어

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    // Attach a handler to process the received advertisement. 
    // The watcher cannot be started without a Received handler attached 
    watcher.Received += OnAdvertisementReceived; 
    watcher.Stopped += OnAdvertisementWatcherStopped; 
} 

private async void OnAdvertisementWatcherStopped(BluetoothLEAdvertisementWatcher sender, BluetoothLEAdvertisementWatcherStoppedEventArgs args) 
{ 
    await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,() => 
    { 
     txtresult.Text = string.Format("Watcher stopped or aborted: {0}", args.Error.ToString()); 
    }); 
} 

, RadioNotAvailable은 블루투스 활성화되지 주행 장치에 의해 발생 될 수 있고, OtherError 블루투스 기능에 의해 야기 될 수는 사용되지 않는다. 감시자가 멈추지 않고 광고가있는 경우 앱이 작동해야합니다.

+0

'DisabledByUser'오류는 무엇을 의미합니까? 전경 관찰자를 실행하려고 할 때 이것을 얻습니다. – TedMilker

+0

다른 사용자에게 내 질문에 답하기 : 설정 -> 개인 정보 -> 다른 기기에서 '페어링되지 않은 기기와 통신'을 사용 중지했습니다. – TedMilker