Java 安卓:如何让我的蓝牙扫描在给定时间后完成?

Java 安卓:如何让我的蓝牙扫描在给定时间后完成?,java,android,bluetooth,Java,Android,Bluetooth,因此,我正在创建一个应用程序来扫描附近的蓝牙设备。现在这个部件工作得很好。问题是,我希望它在30秒后停止发现过程。我如何做到这一点 这是我的密码: 广播接收机: private BroadcastReceiver mBroadcastReceiver3 = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) {

因此,我正在创建一个应用程序来扫描附近的蓝牙设备。现在这个部件工作得很好。问题是,我希望它在30秒后停止发现过程。我如何做到这一点

这是我的密码:

广播接收机:

  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);   

}