2010-03-09 81 views
3

我有一項理論上可以在沒有與其關聯的活動(因爲「服務」在Android平臺上)的情況下工作的服務。Android內部的藍牙服務

此服務使用藍牙,特別是註冊具有偵聽通信的給定名稱的藍牙服務。當然要工作它必須讓藍牙處於活動狀態。

正如Bluetooth api文檔中所示,我使用BluetoothAdapter.ACTION_REQUEST_ENABLE來提示用戶啓用藍牙,以防它已經不在。其實,這不過是一個活動,因此需要從另一個活動調用,即:

Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
InstanceOfAnActivity.startActivity(enableIntent); 

我想實現的是有服務(其中,例如,在開機啓動時)與任何活動完全分離,因此不會讓InstanceOfAnActivity啓動彈出窗口,指示用戶打開藍牙。

現在,我知道有BluetoothAdapter.enable()這個(臭名昭着的)調用,但是由於doc說它不應該直接調用。

那麼,任何提示/解決這個困境? (也許是容易的,我只是失去了一些東西......)

+0

這是幾個月後的現在,我想知道,如果你能解決這個問題? – 2010-05-12 12:19:02

+0

「漂亮的小工具」如何在沒有用戶許可的情況下打開藍牙? – Pachanka 2010-08-28 08:02:57

回答

2

這裏的醫生說什麼

藍牙不應該沒有直接的用戶同意的情況下啓用。如果要打開藍牙以創建無線連接,則應使用ACTION_REQUEST_ENABLE意圖,這會引發請求用戶許可以打開藍牙的對話框。 enable()方法僅適用於包含用於更改系統設置的用戶界面的應用程序,例如「電源管理器」應用程序。

注意,它並沒有說直接調用BluetoothAdapter.enable(),只說要打電話,如果你已經得到了確定從用戶。這意味着你需要一個配置屏幕,詢問用戶你的服務是否可以打開藍牙,這樣他們就可以控制它。

4

startActivity()並非嚴格意義上的Activity方法 - 它是Context方法,由Activity 服務繼承。 但有一點需要注意,正如Service.startActivity()文檔中指出的那樣,「如果此方法是從活動上下文外部調用的,則意圖必須包含FLAG_ACTIVITY_NEW_TASK啓動標誌」。

因此,與綁定到服務實例「語境」,下面應該工作:

Intent btIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
btIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
context.startActivity(btIntent); 
+0

我該如何處理活動的結果? – dnkilic 2017-11-24 02:44:33