2016-02-29 29 views
4

我使用com.google.android.gms.location.SettingsApi在我的Android應用程序中啓用藍牙和位置。它會彈出一個對話框提示用戶在禁用時啓用它,以便我的應用可以掃描附近的藍牙設備。我遵循了參考指南(https://developers.google.com/android/reference/com/google/android/gms/location/SettingsApi)中的說明。這是非常簡單的:首先你連接到GoogleApiClient,然後你做一個LcoationSettingsRequest.builder:setNeedBle from SettingsApi不工作API23

LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder() 
    .addLocationRequest(mLocationRequestHighAccuracy) 
    .setNeedBle(true) 

在我的情況下,我加入setNeedBle(真),因爲我需要打開藍牙以及。然後您從SettingsApi調用checkLocationSettings並向結果添加回調。這會彈出一個對話框,提示用戶打開藍牙和位置信息,然後您將回答用戶是否選擇執行此操作。

在API22和Google Play服務版本8.4.89的設備上工作正常,但不在API23和GPS版本8.4.89的相同設備上。只有setNeedBle(true)部分不適用於API23:當Bluetooth關閉時,我沒有收到對話框(但啓用位置的對話框正常工作)。由於他們都安裝了相同版本的GPS,它與API22與API23有關。有誰知道這是一個錯誤還是我可以如何解決這個問題?

我發現了一個類似的問題(How to pop up Enable Bluetooth prompt from Google Play Services?)關於這個,但它建議固定在GPS版本8.1,但我正在運行GPS v8.4。此外,這是一個稍微不同的問題,因爲我沒有收到SETTINGS_CHANGE_UNAVAILABLE狀態。

+0

不知道您是否考慮過這一點,但API 23中有關於BLE掃描的新實施。請參閱[改進的低功耗藍牙掃描](http://developer.android.com/about/versions/marshmallow/android-6.0.html#ble-scanning)。您需要爲新API使用['setCallbackType()'](http://developer.android.com/reference/android/bluetooth/le/ScanSettings.Builder.html#setCallbackType(int))。 – gerardnimo

+0

謝謝,但這與掃描時優化性能有關,而不是啓用藍牙。 – Nimyz

+0

你有沒有找到解決方案? – Eylen

回答

0

如果客戶端使用BLE掃描來獲取位置,則可以通過調用setNeedBle(boolean)來請求啓用BLE。

請參考解決方案: https://github.com/googlemaps/android-samples/tree/master/ApiDemos (如果你想在運行時授予對API 23(安卓M)的許可。)

也請參閱本官方回購:
https://developer.android.com/training/location/change-location-settings.html
https://developer.android.com/about/versions/marshmallow/android-6.0.html#bluetooth-stylus

希望這會有所幫助。

0

API 23中的位置服務有一個掃描設置面板。

location

有對WiFi和藍牙掃描切換,以提高定位精度。

scanning

通過翻轉它,位置服務可以使用BLE掃描即使藍牙未啓用。在這種情況下,setNeedBle(true)將不會提示用戶打開藍牙,因爲位置服務已經可以使用BLE。

但我不知道如何在我們自己的應用程序中提供位置服務中的BLE掃描,也許這是不可能的。

我建議檢查是否在請求定位服務後啓用了藍牙,並在未啓用時顯示藍牙啓用提示。

相關問題