我正試圖使用A2DP配置文件控制到設備的藍牙連接。 在原生Java開發的Android中,開發人員利用BluetoothA2dp類來建立連接。如何在Xamarin中使用BluetoothA2dp類
在Xamarin中有一個叫做相同的類 - 藍牙A2dp。但我似乎無法理解如何初始化它的一個實例,因爲它沒有構造函數。
如何在該類端口的幫助下創建連接?
我正試圖使用A2DP配置文件控制到設備的藍牙連接。 在原生Java開發的Android中,開發人員利用BluetoothA2dp類來建立連接。如何在Xamarin中使用BluetoothA2dp類
在Xamarin中有一個叫做相同的類 - 藍牙A2dp。但我似乎無法理解如何初始化它的一個實例,因爲它沒有構造函數。
如何在該類端口的幫助下創建連接?
您不需要直接使用BluetoothA2dp類。根據Android文檔...
BluetoothA2dp是一個代理對象,用於通過IPC控制藍牙A2DP 服務。使用getProfileProxy(上下文, BluetoothProfile.ServiceListener,int)獲取BluetoothA2dp代理 對象。
您應該使用BluetoothAdapter.GetProfileProxy
來啓動到A2DP代理對象的連接。
BluetoothAdapter.DefaultAdapter.GetProfileProxy(this, serviceListener, ProfileType.A2dp);
在方法調用的參數serviceListener
以上必須是一個類,它實現IBluetoothProfileServiceListener
,可以在其中再通過OnServiceConnected方法訪問代理對象的實例。
public void OnServiceConnected(ProfileType profile, IBluetoothProfile proxy)
{
}
類 「BluetoothA2DP」 已在Xamarin版本5.0被提供到5.2,refer to link
由於 「BluetoothA2DP」 被密封類,它不能被繼承。你只能通過它的實例來使用它。
你需要重寫它的「GetConnectionState」或「GetDevicesMatchingConnectionStates」方法連接特定的設備。
可能最好的做法是嘗試使用自己的擴展方法擴展「BluetoothA2DP」的功能。
假設你「BluetoothA2DP」類如:
public sealed class BluetoothA2dp : Java.Lang.Object, IBluetoothProfile, IDisposable {
public ProfileState GetConnectionState (BluetoothDevice device) {
return some_device_configs;
}
}
然後你自己的類,它擴展爲「BluetoothA2DP」級功能:
public static class MyClassExtender
{
public static void ExtendedTest(this BluetoothA2DP instance)
{
instance.GetConnectionState();
}
}
然後使用ExtendedTest()方法利用「藍牙A2DP」類。
希望這應該工作:)
您可以refer here全API文檔。
嗨。謝謝。好的,我已經在演示中添加了擴展方法。如果我有一個BluetoothA2DP,我可以從它調用ExtendedTest()。但由於我沒有該類的實例,因此我無法使用BluetoothA2dp作爲靜態類訪問ExtendedTest()方法。我怎樣才能正確地調用ExtendedTest()? –
您需要創建「MyClassExtender」類的實例並通過它調用「ExtendedTest()」 – Mazzu
此建議不正確。你不能'重載''GetConnectionState',因爲它不是一個抽象的或者虛擬的方法,而且該類是封閉的,所以不能被繼承。另外,上面的'MyClassExtender'是一個靜態類,所以不能像你所建議的那樣實例化。上面的語法是爲'BluetoothA2DP'類創建一個擴展方法,其中您需要一個實例。查看我的答案,瞭解如何訪問A2DP代理對象。 –
嗨,謝謝。那麼,我們已經註冊了「OnServiceConnected」,當我們通過系統藍牙連接活動手動連接A2DP配置文件(到遠程設備)時,事件不會被觸發。至少在理論上,OnServiceConnected方法何時應該執行? –
當AD2P代理對象連接到服務時,不會在設備連接時調用OnServiceConnected。所以在調用GetProfileProxy後不久就會調用它。我用上面發佈的代碼測試了一個快速的活動,並按預期調用了該方法。我需要看到一些代碼才能真正提供建議。 –
儘管開發者試圖在他的機器上調用OnServiceConnected並不是調用beig,但我認爲這回答瞭如何使用這個類的問題,所以我將它標記爲正確的。謝謝。 –