- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望我的应用程序在重新启动应用程序时自动连接到已连接的蓝牙设备。以下是我正在执行的程序:-
[最初]蓝牙设备处于“开启”状态:然后启动应用程序。
[行为]--> 蓝牙设备配对并成功连接(接收到 Intent 'ACTION_ACL_CONNECTED')
蓝牙设备已“开启”:关闭应用程序,然后再次启动应用程序。
[行为]--> 即使按照蓝牙设置中显示的方式进行连接,广播接收器也不会收到 Intent 'ACTION_ACL_CONNECTED'。
注意:- 关闭应用程序时,它不会断开蓝牙连接。因此,连接成功后,应用程序会立即进入主屏幕。否则,应用程序将转到一个带有按钮的屏幕,该按钮可将其带到蓝牙设置(下面的代码中存在 onClickListener)
我是android开发新手,所以我真的不知道我哪里出错了。我查找了类似问题的解决方案并应用它们,但没有效果。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_index);
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_ACL_CONNECTED);
registerReceiver(mReceiver, filter);
IntentFilter filter1 = new IntentFilter(BluetoothDevice.ACTION_ACL_DISCONNECTED);
this.registerReceiver(mReceiver, filter1);
m_app = (BtApp) getApplication();
imagebt = (ImageView) this.findViewById(R.id.imagebt);
imagebt.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
final Toast tag = Toast.makeText(getApplicationContext(), "Connect to device", Toast.LENGTH_LONG);
tag.show();
new CountDownTimer(1000, 1000)
{
public void onTick(long millisUntilFinished) {tag.show();}
public void onFinish() {
//tag.show();
}
}.start();
if(mBluetoothAdapter != null && mBluetoothAdapter.isEnabled()){
mBluetoothAdapter.startDiscovery();
}
Intent intentBluetooth = new Intent();
intentBluetooth.setAction(android.provider.Settings.ACTION_BLUETOOTH_SETTINGS);
startActivity(intentBluetooth);
}
});
}
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if ( BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) {
m_app.m_main.setupCommPort();
device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
m_app.m_device = device;
isconnected = true;
new Timer().schedule(new TimerTask() {
@Override
public void run() {
if ( m_app.m_main.m_BtService != null && m_app.m_main.m_BtService.getState() != BluetoothRFCommService.STATE_CONNECTED ) {
m_app.m_main.m_BtService.connect(device, false);
}
}
}, 3500);
} else if ( BluetoothDevice.ACTION_ACL_DISCONNECTED.equals(action) ) {
isconnected = false;
m_app.m_main.tabHost.setCurrentTab(0);
}
}
};
@Override
protected void onStop()
{
unregisterReceiver(mReceiver);
super.onStop();
}
最佳答案
您不会收到 BluetoothDevice.ACTION_ACL_CONNECTED
事件,因为设备仍处于连接状态。仅当设备状态从断开连接更改为连接时才会触发该事件。
您有 2 个选择。
您可以将带有 BluetoothDevice.ACTION_ACL_CONNECTED
和 BluetoothDevice.ACTION_ACL_DISCONNECTED
过滤器的 BroadcastReceiver
放入 Service
并在后台跟踪设备连接状态。在应用程序启动时,您可以要求服务提供设备的当前状态。
您可以检查某些蓝牙配置文件是否在已连接设备列表中包含您的设备名称。
对于 API 18+,您可以使用 BluetoothManager#getConnectedDevices()
对于低于 18 的 API,您可以使用以下代码段(对于每个蓝牙配置文件)
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
BluetoothProfile.ServiceListener mProfileListener = new BluetoothProfile.ServiceListener() {
public void onServiceConnected(int profile, BluetoothProfile proxy) {
for (BluetoothDevice device : proxy.getConnectedDevices()) {
if (device.getName().contains("DEVICE_NAME")) {
deviceConnected = true;
}
}
if (!deviceConnected) {
Toast.makeText(getActivity(), "DEVICE NOT CONNECTED", Toast.LENGTH_SHORT).show();
}
mBluetoothAdapter.closeProfileProxy(profile, proxy);
}
public void onServiceDisconnected(int profile) {
// TODO
}
};
mBluetoothAdapter.getProfileProxy(context, mProfileListener, BluetoothProfile.A2DP);
关于java - Android:广播接收器在重新启动应用程序时未收到BluetoothDevice.ACTION_ACL_CONNECTED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39363681/
这是我的程序的两个部分 1. Set pairedDevices; BluetoothDevice[] pairedDevicesArray; 2. pairedDevices = btAdapter
我是一名 iOS 开发人员,正在构建我的第一个 Android 蓝牙应用程序。在我的应用程序中,我有两个类,一个调用第二个类的主类是我的 BluetoothGattCallback。 扫描设备后,我找
我有一个项目,两者都有 在其中我使用(简化)调用扫描 BT 设备: final BluetoothLeScanner scanner = BluetoothAdapter.getDefaultAd
这个问题在这里已经有了答案: Android 6.0 - Bluetooth - No code exists for Action_Found broadcast intent (1 个回答) 关
在我使用蓝牙的应用程序中,日志中可能充斥着数百行“D/BluetoothDevice: mAddress: (address)”行。假设我可以忽略它们,我该如何过滤掉这些行? 最佳答案 显然,这已在
在 Android 中,您可以为配对设备指定一个不同于设备本身的广告名称的名称。但是,如果我在 BluetoothDevice 上调用 getName(),我会得到设备自己的名称。 有没有办法获取设备
我想保存我的应用程序连接到的最后一个蓝牙设备。如果以前有蓝牙连接,我根本不想提示用户。他们可以选择连接到新设备,但他们不需要这样做。如果他们选择不选择连接,他们会定期使用该应用程序,然后在需要蓝牙设备
我刚开始使用 Android,并使用低功耗蓝牙在 Android Studio 中设置了一个 API 21 项目。 深入研究 BluetoothDevice 向我展示了 ConnectGatt() 方
我正在使用此 sample-code 对 Android 的蓝牙 LE 功能进行一些简单的扫描 + 广告测试 我正在使用三星 6 和 Nexus 9 对其进行测试,出于某种原因,如果我让应用程序在三星
使用 Log 类跟踪运行时显示 onReceive() 方法没有调用,为什么? 动态注册广播接收器 private void discoverDevices () { Log.e("MOHA
这里是 Kotlin 菜鸟。 当我在 BluetoothDevice 上 ctrl+click 时,它会打开... \AppData\Local\Android\Sdk\sources\android
我的应用程序在连接到某些设备上的 BluetoothGatt 时出现问题。 所有 BLE 相关代码都驻留在 android Service 中,除 Huawei CAM-L03 外一切正常。据报道,一
我发现崩溃实例大幅增加,几个不同的崩溃报告都以相同的致命异常结束: [BluetoothDevice classicDevice]:无法识别的选择器发送到实例 0x2805a8ba0 这种情况在 iO
我有一个 BluetoothDevice 及其关联的 BluetoothGatt 对象。这是用户每天连接的设备,它没有任何经常变化的特性或服务。 现在为了与设备交互,每次连接后我必须首先发现所有服务,
这是我的扫描仪回调代码。 private BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeSc
我的应用程序与 BLE 外围设备通信。有时,应用程序会在已连接外围设备的情况下启动。我可以通过调用以下方式取回设备: BluetoothManager manager = (BluetoothMana
我的 Android 手机允许我重命名已配对的设备,方法是转至 [设置 > 无线和网络 > 蓝牙] Activity 页面并单击已配对蓝牙设备右侧的设置按钮。但是,当我使用 BluetoothAdap
我正在尝试通过我的应用程序管理多个蓝牙事件,这样用户就不需要离开应用程序并尝试从 Android 设置中搜索/配对蓝牙设备。 我能够枚举以前配对的设备并开始发现,但是我找不到附近的设备。 背景信息:
有时,BluetoothDevice.getName() 返回 null。我该如何解决?remoteDeviceName 在以下代码中可能为 null。我需要通过 remoteDeviceName 区
我想知道远程物理设备中的哪些事件会触发监听设备中的 ACTION_ACL_CONNECTED 和 ACTION_ACL_DISCONNECTED。我的测试结果毫无意义。我收集了几个彼此相距几分米的设备
我是一名优秀的程序员,十分优秀!