qt android 蓝牙的使用 避过的坑

记录将软件移植到android上,需要使用蓝牙接收fpga采集卡发送过来的串口信息:
//蓝牙功能实现
#include
#include
#include
#include
#include
#include
#include
#include

//蓝牙功能
QBluetoothDeviceDiscoveryAgent *discoveryAgent;
QBluetoothLocalDevice *localDevice;
QBluetoothSocket *socket;
//蓝牙功能
void on_open_blu_clicked();//开启蓝牙
void findFinish();//搜索蓝牙设备结束
void connectOK();//连接成功
void connectNot();//连接失败
void connectBLE(QListWidgetItem *);//连接指定蓝牙设备
void addBlueToothDevicesToList(QBluetoothDeviceInfo info);//添加搜索到的蓝牙设备
void on_chazhao_blu_clicked();//搜索周围蓝牙设备

.cpp中文件
void Dserial::initialize_blutooth() //初始化蓝牙功能
{
//QBluetoothLocalDevice 是指配置获取设备的蓝牙状态信息等!
//QBluetoothDeviceDiscoveryAgent 这个是指扫描周围蓝牙设备!
//QBluetoothSocket指进行链接蓝牙设备,读写信息!

discoveryAgent = new QBluetoothDeviceDiscoveryAgent(this);
//为本地蓝牙创建描述类
localDevice = new QBluetoothLocalDevice(this);
// 给socket分配内存,限定套接字协议
socket = new QBluetoothSocket(QBluetoothServiceInfo::RfcommProtocol);
if (localDevice->hostMode() == QBluetoothLocalDevice::HostPoweredOff) {
    ui->open_blu->setEnabled(true);
    ui->chazhao_blu->setEnabled(false);
    // 开始扫描蓝牙设备
   // discoveryAgent->start();
} else {
    ui->open_blu->setEnabled(false);
    ui->chazhao_blu->setEnabled(true);
}
// 发现设备时会触发deviceDiscovered信号,转到槽显示蓝牙设备
connect(discoveryAgent, SIGNAL(deviceDiscovered(QBluetoothDeviceInfo)), this,
       SLOT(addBlueToothDevicesToList(QBluetoothDeviceInfo)));
connect(discoveryAgent, SIGNAL(finished()), this, SLOT(findFinish()));
//双击listwidget的项目,触发连接蓝牙的槽
//error(QBluetoothDeviceDiscoveryAgent::Error error)

connect(ui->listWidget_blu, SIGNAL(itemActivated(QListWidgetItem *)), this,
        SLOT(connectBLE(QListWidgetItem *)));
connect(socket, SIGNAL(connected()), this, SLOT(connectOK()));
connect(socket, SIGNAL(disconnected()), this, SLOT(connectNot()));

}

//手势功能
//bool Dserial::event(QEvent *event)
//{

//}
bool Dserial::gestureEvent(QGestureEvent *event){

}
void Dserial::panTriggered(QPanGesture *gesture){

}
void Dserial::pinchTriggered(QPinchGesture *gesture){

}
void Dserial::swipeTriggered(QSwipeGesture *gesture){

}
void Dserial::tapTriggered(QTapGesture *gesture){

}
void Dserial::tapAndHoldTriggered(QTapAndHoldGesture *gesture){

}

//蓝牙功能
void Dserial::on_open_blu_clicked()//开启蓝牙
{
localDevice->powerOn();
ui->open_blu->setEnabled(false);
ui->open_blu->setEnabled(true);
/* 开始扫描蓝牙设备 */
// discoveryAgent->start();
}
void Dserial::findFinish()//搜索蓝牙设备结束
{
ui->chazhao_blu->setEnabled(true);
}
void Dserial::connectOK()//连接成功
{
discoveryAgent->stop(); //停止搜索设备
QMessageBox::information(this, tr(“成功”), tr(“连接成功!”));
}
void Dserial::connectNot()//连接失败
{
QMessageBox::information(this, tr(“错误”), tr(“连接失败!”));
}
void Dserial::connectBLE(QListWidgetItem *item)//连接指定蓝牙设备
{

static const QLatin1String serviceUuid(
    "00001101-0000-1000-8000-00805F9B34FB");//百度来的手机连接单片机用的uuid
QString text = item->text();
int index = text.indexOf(' ');
if (index == -1)
    return;
QBluetoothAddress address(text.left(index));
QString name(text.mid(index + 1));
QMessageBox::information(this, tr("信息"), tr("蓝牙正在连接中,请稍后..."));
socket->connectToService(address, QBluetoothUuid(serviceUuid),
                         QIODevice::ReadWrite);



}

void Dserial::addBlueToothDevicesToList(QBluetoothDeviceInfo info)//添加搜索到的蓝牙设备
{

QString label =
    QString("%1 %2").arg(info.address().toString()).arg(info.name());



QList<QListWidgetItem *> items =
    ui->listWidget_blu->findItems(label, Qt::MatchExactly);
if (items.empty()) {
    QListWidgetItem *item = new QListWidgetItem(label);
    QBluetoothLocalDevice::Pairing pairingStatus =
        localDevice->pairingStatus(info.address());
    /* 蓝牙状态pairingStatus,Pairing枚举类型 0:Unpaired没配对
 * 1:Paired配对但没授权 2:AuthorizedPaired配对且授权 */
    if (pairingStatus == QBluetoothLocalDevice::Paired ||
        pairingStatus == QBluetoothLocalDevice::AuthorizedPaired) {
        item->setForeground(QColor(Qt::green));
    } else {
        item->setForeground(QColor(Qt::black));
    }
    ui->listWidget_blu->addItem(item);

}

}
void Dserial::on_chazhao_blu_clicked() //搜索周围蓝牙设备
{

ui->listWidget_blu->clear();

 discoveryAgent->setInquiryType(QBluetoothDeviceDiscoveryAgent::GeneralUnlimitedInquiry);
 discoveryAgent->stop(); //停止搜索设备

 //QMessageBox::information(this, tr("错误"), tr("连接失败!"));
 discoveryAgent->start();


 ui->chazhao_blu->setEnabled(false);
 ui->text_blu->setText("开始查找蓝牙设备");

}

void Dserial::on_close_blu_clicked()//关闭蓝牙
{
localDevice->powerOn();
ui->open_blu->setEnabled(false);
ui->open_blu->setEnabled(true);
}

遇到的坑:因为需要数据库全屏显示,修改了AndroidManifest.xml,没有使用原先的,可能是将此文件修改错了,或者是权限不对,导致蓝牙已开启扫描就闪退,找了一天才解决。先使用默认的,再设置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_45247650

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值