问题描述
我正在尝试构建一个蓝牙应用程序,它使用 startdiscovery() 方法发现附近的设备。在家里,我的应用程序工作得很好,它会发现附近的设备等。但是当我更改位置时,大多数时候应用程序会在 startdiscovery 方法上崩溃。我正在使用 BLUetoOTH、BLUetoOTH_ADMIN 和 FINE_LOCATION 权限来发现设备。
我还尝试在崩溃的地方在调试中运行应用程序,但在 logcat 上没有发生任何事情。
这是我的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 (将#修改为@)