700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > android蓝牙耳机来电铃声 Android实现积极连接蓝牙耳机

android蓝牙耳机来电铃声 Android实现积极连接蓝牙耳机

时间:2018-11-14 21:42:50

相关推荐

android蓝牙耳机来电铃声 Android实现积极连接蓝牙耳机

Android实现主动连接蓝牙耳机

在Android程序中可以实现自动扫描蓝牙、配对蓝牙、建立数据通道。蓝牙分不同类型,这篇文字只讨论如何与蓝牙耳机连接。

大致可以分三步:

一、扫描蓝牙设备:

1、注册并监听广播:

BluetoothAdapter.ACTION_DISCOVERY_STARTED

BluetoothDevice.ACTION_FOUND

BluetoothAdapter.ACTION_DISCOVERY_FINISHED

启动扫描:

BluetoothAdapter.getDefaultAdapter().startDiscovery();

对扫描的结果按类型进行筛选,只保留我们需要的蓝牙耳机:

if(device.getBluetoothClass().getDeviceClass() == BluetoothClass.Device.AUDIO_VIDEO_WEARABLE_HEADSET

|| device.getBluetoothClass().getDeviceClass() == BluetoothClass.Device.AUDIO_VIDEO_HANDSFREE){

//蓝牙耳机

}

二、配对指定的蓝牙设备:

这个跟配对普通蓝牙一样,方法如下:

public static boolean createBond(BluetoothDevice btDevice){

boolean result = false;

try{

Method m = btDevice.getClass().getDeclaredMethod("createBond",new Class[]{});

m.setAccessible(true);

Boolean originalResult = (Boolean) m.invoke(btDevice);

result = originalResult.booleanValue();

}catch(Exception ex){

}

return result;

}

等配对完成之后就是要建立数据连接;

三、建立数据连接:

if you SDK between 11 and 16.call a2dp.connectSink(btDevice) or a2dp.connect(btDevice)

private static IBluetoothA2dp getIBluetoothA2dp() {

IBluetoothA2dp ibta = null;

try {

final Class serviceManager = Class.forName("android.os.ServiceManager");

final Method getService = serviceManager.getDeclaredMethod("getService", String.class);

final IBinder iBinder = (IBinder) getService.invoke(null, "bluetooth_a2dp");

final Class iBluetoothA2dp = Class.forName("android.bluetooth.IBluetoothA2dp");

final Class[] declaredClasses = iBluetoothA2dp.getDeclaredClasses();

final Class c = declaredClasses[0];

final Method asInterface = c.getDeclaredMethod("asInterface", IBinder.class);

asInterface.setAccessible(true);

ibta = (IBluetoothA2dp) asInterface.invoke(null, iBinder);

} catch (final Exception e) {

Log.e("Error " + e.getMessage());

}

return ibta;

}

参考:/questions/8467178/working-around-a2dp-and-hfp-limitations-of-android-pre-honeycomb

如果API大于16需要用如下的方法:

private void initA2dpService(){

//Intent i = getExplicitIntent(mContext,new Intent(IBluetoothA2dp.class.getName()));//5.0以上系统需要显示intent

Intent i = new Intent(IBluetoothA2dp.class.getName());

boolean success = mContext.bindService(i, mConnection, Context.BIND_AUTO_CREATE);

if (success) {

} else {

}

}

public ServiceConnection mConnection = new ServiceConnection() {

@Override

public void onServiceConnected(ComponentName name, IBinder service) {

try {

mA2dpService = IBluetoothA2dp.Stub.asInterface(service);

} catch (Exception e) {

e.printStackTrace();

}

}

@Override

public void onServiceDisconnected(ComponentName name) {

// TODO Auto-generated method stub

}

};

public Intent getExplicitIntent(Context context, Intent implicitIntent) {

// Retrieve all services that can match the given intent

PackageManager pm = context.getPackageManager();

List resolveInfo = pm.queryIntentServices(implicitIntent, 0);

// Make sure only one match was found

if (resolveInfo == null || resolveInfo.size() != 1) {

return null;

}

// Get component info and create ComponentName

ResolveInfo serviceInfo = resolveInfo.get(0);

String packageName = serviceInfo.serviceInfo.packageName;

String className = serviceInfo.serviceInfo.name;

ComponentName component = new ComponentName(packageName, className);

// Create a new intent. Use the old one for extras and such reuse

Intent explicitIntent = new Intent(implicitIntent);

// Set the component to be explicit

explicitIntent.setComponent(component);

return explicitIntent;

}

建立连接:mA2dpService.connect(device);

断开连接:mA2dpService.disconnect(device);

参考:/questions/14705167/how-connect-paired-bluetooth-a2dp-device-on-android-4-2-using-reflection

/qs_csu/article/details/45114251

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。