2014-05-09 12 views
7

Burada birçok yanıt aldıktan sonra, bağlı bluetooth cihazlarının listesini BroadcastReceiver yardımı ile oluşturabiliyorum. Şimdi sorum şu, hangi cihazın hangi profili desteklediğini nasıl bilebilirim. Cihazları profil bazında seçebilmek istiyorum, örneğin şu anda bağlı cihazların listesini ve profillerini alabilir ve bunlardan birini seçebilirim. BluetoothDevice örneğim varsa bu bilgileri nasıl alabileceğimi bilmiyorum.Android'de, bağlı bir bluetooth cihazının profilini nasıl edinebilirim?

Bu sayfada, bir bluetooth kulaklık profili ile çalışmayı gösteren bazı kodlar vardır: http://developer.android.com/guide/topics/connectivity/bluetooth.html#Profiles. Ama benim problemimi çözmüyor. Bir şey kaçırdığımı düşünüyorsanız, lütfen bana yardım et ve işaret et.

Çok önceden teşekkürler.

cevap

3

Aynı sorunla karşılaştım. Mevcut profilleri BluetoothDevice sınıfından alabileceğiniz görülmemektedir. Ama uzun bir yol BluetoothProfile sınıfında getDevicesMatchingConnectionStates yönteminden BluetoothDevice s'lik bir listesi alarak etrafında yoktur.

hangi BluetoothDevice destek A2DP bulmak istiyorsanız Örneğin, ilk

public class cServiceListener implements BluetoothProfile.ServiceListener { 
private static final int[] states={ BluetoothProfile.STATE_DISCONNECTING, 
            BluetoothProfile.STATE_DISCONNECTED, 
            BluetoothProfile.STATE_CONNECTED, 
            BluetoothProfile.STATE_CONNECTING}; 
@Override 
public void onServiceConnected(int profile, BluetoothProfile bluetoothProfile) { 
List<BluetoothDevice> Devices=bluetoothProfile.getDevicesMatchingConnectionStates(states); 
    for (BluetoothDevice loop:Devices){ 
     Log.i("myTag",loop.getName()); 
    } 
} 

@Override 
public void onServiceDisconnected(int profile) { 
} 

} 

Sonra özel bir BluetoothProfile.ServiceListener oluşturmak bu örnek A2DP, denetlemek istediğiniz profile ekleyin

mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
cServiceListener mServiceListener=new cServiceListener(); 
mBluetoothAdapter.getProfileProxy(thisContext,mServiceListener, BluetoothProfile.A2DP); 

Bu içindedir A2DP desteklemelidir tüm bluetooth cihazlarını logCat olacak İstenen , adreslerini içerir. Bu örnekte, halihazırda bağlı olan ve daha önce eşleştirilmiş olan, daha önce eşleştirilmiş olan tüm cihazları kapsamaktadır.

0

Android kaynak koduna bakarak, UUID'lere bakarak bir aygıt için hangi profillerin kullanılabileceğini tahmin edebilir ve ardından her profili tek tek bağlayabilirsiniz.

Adım 0: Kopya _PROFILE_UUIDS oradan sabitler: https://android.googlesource.com/platform/packages/apps/Settings/+/9ad703cdb9a8d0972c123b041d18aa7bbeb391a4/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java

Adım 1: örneğin tarama yoluyla, senin BluetoothDevice olsun. Düzgün bağlandığından emin olun.

Adım 2:android.bluetooth.BluetoothDevice.ACTION_UUID eylem niyet

Adım 3 için BroadcastReceiver kayıt: çağrı cihazınızdafetchUuidsWithSdp yöntemi

Adım 4: Bir ACTION_UUID yayın alacaksınız: yönteminde, alıcının kaydını silebilir ve aşağıdaki gibi profil listesini alabilirsiniz:

ArrayList<Integer> profiles = new ArrayList<>(); 

ParcelUuid[] uuids = device.getUuids(); 

if (BluetoothUuid.containsAnyUuid(uuids, HEADSET_PROFILE_UUIDS)) 
{ 
    profiles.add(BluetoothProfile.HEADSET); 
} 

if (BluetoothUuid.containsAnyUuid(uuids, A2DP_PROFILE_UUIDS)) 
{ 
    profiles.add(BluetoothProfile.A2DP); 
} 

if (BluetoothUuid.containsAnyUuid(uuids, OPP_PROFILE_UUIDS)) 
{ 
    //OPP doesn't have any BluetoothProfile value 
} 

if (BluetoothUuid.containsAnyUuid(uuids, HID_PROFILE_UUIDS)) 
{ 
    //You will need system privileges in order to use this one 
    profiles.add(BluetoothProfile.INPUT_DEVICE); 
} 

if (BluetoothUuid.containsAnyUuid(uuids, PANU_PROFILE_UUIDS)) 
{ 
    profiles.add(BluetoothProfile.PAN); 
} 

Adım 5: tek tek, profiller için vekiller olsun:

for (int profile : profiles) 
{ 
    if (!adapter.getProfileProxy(context, listener, profile)) 
    { 
     //Do something 
    } 
} 

Adım 6: senin dinleyici onServiceConnected yönteminde alınan her proxy ile bir şey yapmak. Relfection kullanarak connect yöntemine erişebilirsiniz.

İlgili konular