!3 解决获取部分手机(华为mate30)IP时,出现的"permission Denny"问题

* fix:permission Denny when get device(Huawei mate30) ip
* resolve: call of overloaded ‘abs(float)’ is ambiguous
This commit is contained in:
shellbei 2020-03-27 13:49:09 +08:00 committed by Barry
commit b24d38ad74
5 changed files with 42 additions and 2 deletions

View file

@ -146,6 +146,20 @@ QString AdbProcess::getDeviceIPFromStdOut()
return ip; return ip;
} }
QString AdbProcess::getDeviceIPByIpFromStdOut()
{
QString ip = "";
QString strIPExp = "wlan0 inet [\\d.]*";
QRegExp ipRegExp(strIPExp,Qt::CaseInsensitive);
if (ipRegExp.indexIn(m_standardOutput) != -1) {
ip = ipRegExp.cap(0);
ip = ip.right(ip.size() - 14);
}
qDebug() << "get ip: " << ip;
return ip;
}
QString AdbProcess::getStdOut() QString AdbProcess::getStdOut()
{ {
return m_standardOutput; return m_standardOutput;

View file

@ -31,6 +31,7 @@ public:
void setShowTouchesEnabled(const QString& serial, bool enabled); void setShowTouchesEnabled(const QString& serial, bool enabled);
QStringList getDevicesSerialFromStdOut(); QStringList getDevicesSerialFromStdOut();
QString getDeviceIPFromStdOut(); QString getDeviceIPFromStdOut();
QString getDeviceIPByIpFromStdOut();
QString getStdOut(); QString getStdOut();
QString getErrorOut(); QString getErrorOut();

View file

@ -22,6 +22,7 @@ Dialog::Dialog(QWidget *parent) :
connect(&m_adb, &AdbProcess::adbProcessResult, this, [this](AdbProcess::ADB_EXEC_RESULT processResult){ connect(&m_adb, &AdbProcess::adbProcessResult, this, [this](AdbProcess::ADB_EXEC_RESULT processResult){
QString log = ""; QString log = "";
bool newLine = true; bool newLine = true;
QStringList args = m_adb.arguments();
switch (processResult) { switch (processResult) {
case AdbProcess::AER_ERROR_START: case AdbProcess::AER_ERROR_START:
@ -32,13 +33,15 @@ Dialog::Dialog(QWidget *parent) :
break; break;
case AdbProcess::AER_ERROR_EXEC: case AdbProcess::AER_ERROR_EXEC:
//log = m_adb.getErrorOut(); //log = m_adb.getErrorOut();
if (args.contains("ifconfig") && args.contains("wlan0")){
getIPbyIp();
}
break; break;
case AdbProcess::AER_ERROR_MISSING_BINARY: case AdbProcess::AER_ERROR_MISSING_BINARY:
log = "adb not find"; log = "adb not find";
break; break;
case AdbProcess::AER_SUCCESS_EXEC: case AdbProcess::AER_SUCCESS_EXEC:
//log = m_adb.getStdOut(); //log = m_adb.getStdOut();
QStringList args = m_adb.arguments();
if (args.contains("devices")) { if (args.contains("devices")) {
QStringList devices = m_adb.getDevicesSerialFromStdOut(); QStringList devices = m_adb.getDevicesSerialFromStdOut();
ui->serialBox->clear(); ui->serialBox->clear();
@ -59,6 +62,13 @@ Dialog::Dialog(QWidget *parent) :
break; break;
} }
ui->deviceIpEdt->setText(ip); ui->deviceIpEdt->setText(ip);
} else if (args.contains("ip -o a")) {
QString ip = m_adb.getDeviceIPByIpFromStdOut();
if (ip.isEmpty()) {
log = "ip not find, connect to wifi?";
break;
}
ui->deviceIpEdt->setText(ip);
} }
break; break;
} }
@ -285,6 +295,20 @@ void Dialog::on_getIPBtn_clicked()
m_adb.execute(ui->serialBox->currentText().trimmed(), adbArgs); m_adb.execute(ui->serialBox->currentText().trimmed(), adbArgs);
} }
void Dialog::getIPbyIp()
{
if (checkAdbRun()) {
return;
}
QStringList adbArgs;
adbArgs << "shell";
adbArgs << "ip -o a";
m_adb.execute(ui->serialBox->currentText().trimmed(), adbArgs);
}
void Dialog::on_wirelessDisConnectBtn_clicked() void Dialog::on_wirelessDisConnectBtn_clicked()
{ {
if (checkAdbRun()) { if (checkAdbRun()) {

View file

@ -22,6 +22,7 @@ public:
void outLog(const QString& log, bool newLine = true); void outLog(const QString& log, bool newLine = true);
bool filterLog(const QString & log); bool filterLog(const QString & log);
void getIPbyIp();
private slots: private slots:
void on_updateDevice_clicked(); void on_updateDevice_clicked();

View file

@ -25,7 +25,7 @@ void KeepRadioWidget::setWidget(QWidget *w)
void KeepRadioWidget::setWidthHeightRadio(float widthHeightRadio) void KeepRadioWidget::setWidthHeightRadio(float widthHeightRadio)
{ {
if (abs(m_widthHeightRadio - widthHeightRadio) < 0.000001f) { if (fabs(m_widthHeightRadio - widthHeightRadio) < 0.000001f) {
return; return;
} }
m_widthHeightRadio = widthHeightRadio; m_widthHeightRadio = widthHeightRadio;