BlueAlwaysDiscoverableReceiver.java
package com.ks.xybase.receiver;
import android.bluetooth.BluetoothAdapter;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import com.ks.xybase.utils.L;
import java.lang.reflect.Method;
import java.util.Objects;
//蓝牙设置为始终可发现模式
public class BlueAlwaysDiscoverableReceiver extends BroadcastReceiver {
private static final String TAG = "BlueAlwaysDiscoverableR";
private Context mContext;
private BluetoothAdapter mBluetoothAdapter;
private IntentFilter mIntentFilter;
public BlueAlwaysDiscoverableReceiver(Context context) {
mContext = context;
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
mIntentFilter = new IntentFilter();
mIntentFilter.addAction(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED);
}
public void start() {
mContext.registerReceiver(this, mIntentFilter);
setBlueCanVisible();
}
public void stop() {
mContext.unregisterReceiver(this);
}
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (!Objects.equals(action, BluetoothAdapter.ACTION_SCAN_MODE_CHANGED)) {
return;
}
setBlueCanVisible();
}
private void setBlueCanVisible() {
try {
Method setScanModeMethod = BluetoothAdapter.class.getMethod("setScanMode", int.class);
setScanModeMethod.setAccessible(true);
setScanModeMethod.invoke(mBluetoothAdapter, BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE);
} catch (Exception e) {
L.d(TAG, "error when setBlueCanVisible,e==" + e.getMessage());
}
}
}
然后在activity中
private BlueAlwaysDiscoverableReceiver mBlueAlwaysDiscoverableReceiver;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//设置蓝牙为始终被发现模式
mBlueAlwaysDiscoverableReceiver = new BlueAlwaysDiscoverableReceiver(this);
mBlueAlwaysDiscoverableReceiver.start();
}
@Override
protected void onDestroy() {
mBlueAlwaysDiscoverableReceiver.stop();
super.onDestroy();
}