2014-02-17 3 views
5

A2DP 프로필을 사용하는 장치에 대한 Bluetooth 연결을 제어하려고합니다. Android 용 Java 개발 환경에서 devs는 BluetoothA2dp 클래스를 사용하여 연결합니다.Xamarin에서 BluetoothA2dp 클래스를 사용하는 방법

Xamarin - BluetoothA2dp에서 동일한 클래스가 있습니다. 하지만 생성자가 없으므로 인스턴스를 초기화하는 방법을 이해할 수없는 것 같습니다.

어떻게 그 클래스 포트의 도움으로 연결을 만들 수 있습니까?

답변

1

직접 BluetoothA2dp 클래스를 사용할 필요는 없습니다.

... 안드로이드 문서에 따라 BluetoothA2dp는 IPC를 통해 블루투스 A2DP 서비스를 제어하는 ​​프록시 개체입니다. getProfileProxy (Context, BluetoothProfile.ServiceListener, int)를 사용하여 BluetoothA2dp 프록시 개체를 가져옵니다.

012DP을 사용하여 A2DP 프록시 개체에 대한 연결을 시작해야합니다.

BluetoothAdapter.DefaultAdapter.GetProfileProxy(this, serviceListener, ProfileType.A2dp); 

메서드 호출의 serviceListener 인수는 위 그런 다음 OnServiceConnected 방법을 통해 프록시 개체에 액세스 할 수있는 IBluetoothProfileServiceListener를 구현하는 클래스의 인스턴스가 될 필요가있다.

public void OnServiceConnected(ProfileType profile, IBluetoothProfile proxy) 
{ 

} 
+0

안녕하세요, 감사합니다. 음, 우리는 "OnServiceConnected"에 가입했으며, 시스템 블루투스 연결 활동에서 A2DP 프로파일 (원격 장치로)을 수동으로 연결할 때 이벤트가 시작되지 않습니다. 적어도 이론적으로, 언제 메소드'OnServiceConnected'가 실행되어야합니까? –

+0

'OnServiceConnected'는 장치가 연결되었을 때 AD2P 프록시 개체가 서비스에 연결될 때 호출됩니다. 그래서'GetProfileProxy'를 호출 한 직후에 호출 될 것입니다. 위에 게시 한 코드로 빠른 작업을 테스트했으며 예상대로 메서드를 호출합니다. 정말 조언할만한 코드가 필요합니다. –

+0

비록 이것을 시도하는 개발자가 자신의 컴퓨터에서 OnServiceConnected가 호출되지 않는다고 말하고 있지만이 클래스를 사용하는 방법에 대한 질문에 대답하므로 올바른 것으로 표시하고 있습니다. 고맙습니다. –

-1

클래스 "BluetoothA2DP가"

refer to link "BluetoothA2DP"이후 5.2 자 마린 버전 5.0에 제공된 한 클래스를 밀봉하고,이를 상속 될 수 없다. 인스턴스를 통해서만 사용할 수 있습니다.

당신은 특정 장치를 연결하는 방법의 "GetConnectionState" 또는 "GetDevicesMatchingConnectionStates"를 오버라이드 (override) 할 필요가있다.

아마도 가장 좋은 방법은 "BluetoothA2DP"의 기능을 자신의 확장 방법으로 확장하는 것입니다. 그런 다음

public sealed class BluetoothA2dp : Java.Lang.Object, IBluetoothProfile, IDisposable { 
    public ProfileState GetConnectionState (BluetoothDevice device) { 
     return some_device_configs; 
    } 
} 

"BluetoothA2DP" 급 기능 확장 자신의 클래스 : 그런 다음 ExtendedTest를 사용

public static class MyClassExtender 
{ 
    public static void ExtendedTest(this BluetoothA2DP instance) 
    { 
     instance.GetConnectionState();   
    } 
} 

을() 메소드

클래스 등이 될 당신의 "BluetoothA2DP을"가정 "BluetoothA2DP" 클래스를 이용하십시오.

희망이 작동합니다 :)

할 수 있습니다 refer here을 전체 API 문서 도구에 대해.

+0

안녕하세요. 감사. 좋아, 당신이 시연 한대로 확장 방법을 추가했습니다.BluetoothA2DP의 isntance가 있다면 나는 ExtendedTest()를 호출 할 수 있습니다. 그러나 클래스의 인스턴스가 없으므로 BluetoothA2dp를 정적 클래스로 사용하여 ExtendedTest() 메서드에 액세스 할 수 없습니다. ExtendedTest()를 올바르게 호출하려면 어떻게해야합니까? –

+0

"MyClassExtender"클래스의 인스턴스를 만들고이를 통해 "ExtendedTest()"를 호출해야합니다. – Mazzu

+1

이 조언은 잘못되었습니다. 'GetConnectionState'는 추상 메소드 나 가상 메소드가 아니기 때문에 '오버라이드'할 수 없으며, 클래스는 어쨌든 인입되므로 상속 될 수 없습니다. 또한 위의 'MyClassExtender'는 정적 클래스이므로 제안한 것처럼 인스턴스화 할 수 없습니다. 위의 구문은 인스턴스를 필요로하는'BluetoothA2DP' 클래스에 대한 확장 메소드를 생성하기위한 것입니다. A2DP 프록시 객체에 액세스하는 방법은 내 대답을 참조하십시오. –