startDiscovery() 冻结我的应用程序蓝牙应用程序

问题描述

我正在尝试构建一个蓝牙应用程序,它使用 startdiscovery() 方法发现附近的设备。在家里,我的应用程序工作得很好,它会发现附近的设备等。但是当我更改位置时,大多数时候应用程序会在 startdiscovery 方法上崩溃。我正在使用 BLUetoOTH、BLUetoOTH_ADMIN 和 FINE_LOCATION 权限来发现设备。

我还尝试在崩溃的地方在调试中运行应用程序,但在 logcat 上没有发生任何事情。

startdiscovery() 方法有问题吗?

这是我的java代码

一旦您向下滑动屏幕,应用程序就会开始发现。

 public class Bluetooth extends AppCompatActivity
        {
            ArrayList<String> discover = new ArrayList<>();
            ArrayList<BluetoothDevice> devices = new ArrayList<>();
        
            ArrayAdapter<String> discoverAdapter;
        
            ListView discoveredDevices;
        
            ProgressBar progressBar;
        
            SwipeRefreshLayout swipe;
        
            IntentFilter filter = new IntentFilter();

            protected void onCreate(Bundle savedInstanceState) 
            {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_bluetooth);
        
        
                discoveredDevices = findViewById(R.id.discoveredDevices);
                   
                progressBar = findViewById(R.id.progressbar);
        
                swipe = findViewById(R.id.swipe);                

                progressBar.setVisibility(View.INVISIBLE);
        
        swipe.setonRefreshListener(new SwipeRefreshLayout.OnRefreshListener()
                {
                    @Override
                    public void onRefresh()
                    {
                        discovery();
        
                        final Handler handler = new Handler();
                        handler.postDelayed(new Runnable()
                        {
                            @Override
                            public void run()
                            {
                                if(swipe.isRefreshing())
                                {
                                    swipe.setRefreshing(false);
                                }
                            }
                        },150);
                    }
                });
        
         discoverAdapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,discover);
         discoveredDevices.setAdapter(discoverAdapter);
        
        filter.addAction(BluetoothDevice.ACTION_FOUND);
                filter.addAction(BluetoothAdapter.ACTION_disCOVERY_STARTED);
                filter.addAction(BluetoothAdapter.ACTION_disCOVERY_FINISHED);
                registerReceiver(receiver,filter);
         }
        
        
         public void discovery()
            {
                bluetoothAdapter.canceldiscovery();
                bluetoothAdapter.startdiscovery();
            }
        
           @Override
            public void onDestroy()
            {
                super.onDestroy();
                bluetoothAdapter.canceldiscovery();
                unregisterReceiver(Receiver);
            }
        


         broadcastReceiver receiver = new broadcastReceiver()
            {
        
                public void onReceive(Context context,Intent intent)
                {
                    String action = intent.getAction();
        
                    if (BluetoothDevice.ACTION_FOUND.equals(action))
                    {
        
                        BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
        
        
                        devices.add(device);
        
                        if (!discover.contains(device.getName())) 
                        {
                            discover.add(device.getName());
                        }
        
        
                        discoverAdapter.notifyDataSetChanged();
        
        
        
                    }
                    else if(BluetoothAdapter.ACTION_disCOVERY_STARTED.equals(action))
                    {
                        progressBar.setVisibility(View.VISIBLE);
        
                    }
                    else if(BluetoothAdapter.ACTION_disCOVERY_FINISHED.equals(action))
                    {
                        progressBar.setVisibility(View.INVISIBLE);
                    }
        
                        
              
                }
        
            };
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...