Java 安卓:如何让我的蓝牙扫描在给定时间后完成?
因此,我正在创建一个应用程序来扫描附近的蓝牙设备。现在这个部件工作得很好。问题是,我希望它在30秒后停止发现过程。我如何做到这一点 这是我的密码: 广播接收机:Java 安卓:如何让我的蓝牙扫描在给定时间后完成?,java,android,bluetooth,Java,Android,Bluetooth,因此,我正在创建一个应用程序来扫描附近的蓝牙设备。现在这个部件工作得很好。问题是,我希望它在30秒后停止发现过程。我如何做到这一点 这是我的密码: 广播接收机: private BroadcastReceiver mBroadcastReceiver3 = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) {
private BroadcastReceiver mBroadcastReceiver3 = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
Log.d(TAG,"onReceive: Action Found");
if(action.equals(BluetoothDevice.ACTION_FOUND))
{
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
Log.d(TAG, "onReceive: " + device.getName() + ": " + device.getAddress());
if(device.getName() != null)
{
//System.out.println("JUNGE ER FINDET DOCH SOGAR DAS DEVICE WIESO ZEIGT ER DIE SCHEIßE NICHT AN");
//Jetzt wo keine nullpointer Exception mehr ent
if(device.getName().contains("HC")) {
mBTDevices.add(device);
mDeviceListAdapter = new DeviceListAdapter(context, R.layout.device_adapter_view, mBTDevices);
lvNewDevices.setAdapter((mDeviceListAdapter));
}
}
}
/*else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
Log.v(TAG, "Entered the Finished ");
System.out.println("Entered the Finished");
}
*/
}
} ;
Discover方法(当我按下Discover按钮时单击onclick)
更换
mBluetoothAdapter.startDiscovery()代码>带有scann(mBluetoothAdapter,30)代码>
void scann(最终BluetoothAdapter MBBluetoothAdapter,整数秒)
{
最终所需长时间_毫秒=秒*1000;
最终长启动_mils=System.currentTimeMillis();
最终计时器tm=新计时器();
tm.时间表(新TimerTask(){
@凌驾
公开募捐{
如果((System.currentTimeMillis()-start\u mils)>=所需的\u毫秒(&mBtAdapter.isDiscover())
{
mBluetoothAdapter.cancelDiscovery();
tm.cancel();
}否则如果((System.currentTimeMillis()-start_mils)将mBluetoothAdapter.startDiscovery();
替换为scann(mBluetoothAdapter,30);
void scann(最终BluetoothAdapter MBBluetoothAdapter,整数秒)
{
最终所需长时间_毫秒=秒*1000;
最终长启动_mils=System.currentTimeMillis();
最终计时器tm=新计时器();
tm.时间表(新TimerTask(){
@凌驾
公开募捐{
如果((System.currentTimeMillis()-start\u mils)>=所需的\u毫秒(&mBtAdapter.isDiscover())
{
mBluetoothAdapter.cancelDiscovery();
tm.cancel();
}如果((System.currentTimeMillis()-start_mils)thx为您的答案,但遗憾的是它不工作,它仍然没有取消。我甚至添加了一个“System.out.println(“取消”);卸载tm.cancel(),查看它是否在控制台上,但它不是,这意味着它永远不会取消:(谢谢您的回答,但遗憾的是它不起作用,它仍然没有取消。我甚至添加了一个“System.out.println(“取消”);卸载tm.cancel(),查看它是否在控制台上,但它没有,这意味着它永远不会取消:(
public void btnDiscover(View view)
{
Log.d(TAG,"btnDiscover: Looking for unpaired Devices");
if(mBluetoothAdapter.isDiscovering())
{
mBluetoothAdapter.cancelDiscovery();
Log.d(TAG,"btnDiscover:Cancelling discovery.");
//Checkt ob die Berechtigungen im Manifest für BT vorliegen
checkBTPermissions();
//start discovery again
mBluetoothAdapter.startDiscovery();
IntentFilter discoverDevicesIntent = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(mBroadcastReceiver3,discoverDevicesIntent);
}
if(!(mBluetoothAdapter.isDiscovering()))
{
//another check
checkBTPermissions();
mBluetoothAdapter.startDiscovery();
IntentFilter discoverDevicesIntent = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(mBroadcastReceiver3,discoverDevicesIntent);
}
}
void scann(final BluetoothAdapter mBluetoothAdapter, int seconds)
{
final long desired_miliseconds=seconds*1000;
final long start_mils=System.currentTimeMillis();
final Timer tm=new Timer();
tm.schedule(new TimerTask() {
@Override
public void run() {
if((System.currentTimeMillis()-start_mils)>=desired_miliseconds&&mBtAdapter.isDiscovering())
{
mBluetoothAdapter.cancelDiscovery();
tm.cancel();
}else if((System.currentTimeMillis()-start_mils)<desired_miliseconds&&!mBtAdapter.isDiscovering())
{
mBluetoothAdapter.startDiscovery();
}
}
},1000,1000);
}