public class Myservice extends Service {
private BluetoothAdapter bTAdatper;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
bTAdatper = BluetoothAdapter.getDefaultAdapter();
initReceiver();
new Thread(new Runnable() {
@Override
public void run() {
while (bTAdatper.isDiscovering()) {
System.out.println("11");
try {
Thread.sleep(1000);
bTAdatper.startDiscovery();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
private void initReceiver() {
//注冊廣播
IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothDevice.ACTION_FOUND);
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
registerReceiver(mReceiver, filter);
}
//廣播接收器
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
//避免重復添加已經系結過的設備
if (device.getBondState() != BluetoothDevice.BOND_BONDED) {
//adapter.add(device);
}
} else if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {
System.out.println("開始搜索");
//Toast.makeText(getActivity(), "開始搜索", Toast.LENGTH_SHORT).show();
} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
System.out.println("搜索完畢");
}
}
};
}
uj5u.com熱心網友回復:
沒log?沒報錯?或者版本低的手機能運行么?
uj5u.com熱心網友回復:
while (bTAdatper.isDiscovering()) { <-----這里一直是false,沒往下走,就是沒有開始藍牙搜索,接受不到廣播,如果已經開始了搜索,bTAdatper.isDiscovering()=true,那循壞不是一直走?System.out.println("11");
try {
Thread.sleep(1000);
bTAdatper.startDiscovery();
} catch (InterruptedException e) {
e.printStackTrace();
}
不需要搞1秒延時, initReceiver();之后
if(!bTAdatper.isDiscovering()){ //判斷沒有在搜索就開始走索藍牙
bTAdatper.startDiscovery();
}
uj5u.com熱心網友回復:
我按照您說的重新改了一下,鏈接:https://pan.baidu.com/s/10n5tQQJeRNk5kJE4VNX-Lw 提取碼:36s0,但是還是有問題,可以幫我看看嗎
uj5u.com熱心網友回復:
Application中注冊廣播?沒見過這種操作,放到Service中吧另外,要會打日志斷點除錯找問題出現在哪里
uj5u.com熱心網友回復:
謝謝,前輩的指點,我馬上去改
uj5u.com熱心網友回復:
https://bbs.csdn.net/topics/394907454幫我看看這個好嗎,我在service中搜索藍牙,但是只能開始搜索和搜索完畢,不能發現設備
uj5u.com熱心網友回復:
BlueToothReceiver receiver = new BlueToothReceiver();這是我以前寫的,可以用。
registerReceiver(receiver, makeFilter());
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
private void startSearch() {
if (bluetoothAdapter == null) {
Logger.d("gxh", "device not support bluetooth");
swipeRefreshLayout.setRefreshing(false);
return;
}
//判斷藍牙是否開啟
if (bluetoothAdapter.isEnabled()) {
if (bluetoothAdapter.isDiscovering()) {
bluetoothAdapter.cancelDiscovery();
}
deviceMap.clear();
bluetoothAdapter.startDiscovery();
} else {
Intent enabler = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enabler, 100);
}
}
public class BlueToothReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
BluetoothDevice device = intent
.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
deviceMap.put(device.getAddress(), device);
Logger.d("gxh", "found:" + device.getName());
} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
//搜索完畢
Logger.d("gxh", "ACTION_DISCOVERY_FINISHED");
swipeRefreshLayout.setRefreshing(false);
devices.clear();
for (Map.Entry<String, BluetoothDevice> entry : deviceMap.entrySet()) {
devices.add(entry.getValue());
}
blueConfigAdapter.setNewData(devices);
}
}
}
public IntentFilter makeFilter() {
IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);//藍牙狀態改變的廣播
filter.addAction(BluetoothDevice.ACTION_FOUND);//找到設備的廣播
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);//搜索完成的廣播
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);//開始掃描的廣播
filter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);//狀態改變
return filter;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/92785.html
標籤:Android
上一篇:在service中回圈獲取藍牙設備 list_Device一直為空,在activity中測驗不為空
下一篇:請教一個簡單安卓編程 謝謝
