2014-02-17 40 views
5

我正試圖使用​​A2DP配置文件控制到設備的藍牙連接。 在原生Java開發的Android中,開發人員利用BluetoothA2dp類來建立連接。如何在Xamarin中使用BluetoothA2dp類

在Xamarin中有一個叫做相同的類 - 藍牙A2dp。但我似乎無法理解如何初始化它的一個實例,因爲它沒有構造函數。

如何在該類端口的幫助下創建連接?

回答

1

您不需要直接使用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) 
{ 

} 
+0

嗨,謝謝。那麼,我們已經註冊了「OnServiceConnected」,當我們通過系統藍牙連接活動手動連接A2DP配置文件(到遠程設備)時,事件不會被觸發。至少在理論上,OnServiceConnected方法何時應該執行? –

+0

當AD2P代理對象連接到服務時,不會在設備連接時調用OnServiceConnected。所以在調用GetProfileProxy後不久就會調用它。我用上面發佈的代碼測試了一個快速的活動,並按預期調用了該方法。我需要看到一些代碼才能真正提供建議。 –

+0

儘管開發者試圖在他的機器上調用OnServiceConnected並不是調用beig,但我認爲這回答瞭如何使用這個類的問題,所以我將它標記爲正確的。謝謝。 –

-1

類 「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文檔。

+0

嗨。謝謝。好的,我已經在演示中添加了擴展方法。如果我有一個BluetoothA2DP,我可以從它調用ExtendedTest()。但由於我沒有該類的實例,因此我無法使用BluetoothA2dp作爲靜態類訪問ExtendedTest()方法。我怎樣才能正確地調用ExtendedTest()? –

+0

您需要創建「MyClassExtender」類的實例並通過它調用「ExtendedTest()」 – Mazzu

+1

此建議不正確。你不能'重載''GetConnectionState',因爲它不是一個抽象的或者虛擬的方法,而且該類是封閉的,所以不能被繼承。另外,上面的'MyClassExtender'是一個靜態類,所以不能像你所建議的那樣實例化。上面的語法是爲'BluetoothA2DP'類創建一個擴展方法,其中您需要一個實例。查看我的答案,瞭解如何訪問A2DP代理對象。 –

相關問題