How to get WiFi MAC address of Android device ?



  • Hi all,
    I want to get the MAC address from my android device can some one suggest me here.
    Bellow is my sample code

    QList<QNetworkInterface> interfaceList = QNetworkInterface::allInterfaces();

    interfaceList.erase(std::remove_if(interfaceList.begin(), interfaceList.end(),
                                       [](const QNetworkInterface &iface) { return (iface.flags().testFlag(QNetworkInterface::IsLoopBack) || !iface.isValid()); }),
                        interfaceList.end());
    
    qWarning() << " List Count :: " << interfaceList.count() << endl;
    
    if (!interfaceList.isEmpty()) {
        const QString str = interfaceList.constFirst().hardwareAddress().remove(QLatin1Char(':'));
    
        qWarning() << " STR :: " << str << endl;
    
        return QByteArray::fromHex(str.toLatin1()).toStdString();
    }
    

    but the result what i get is

    W libMAcAddressTest.so: ..\MAcAddressTest\widget.cpp:25 (std::string Widget::getMacAddress() const): List Count :: 1
    W libMAcAddressTest.so: ..\MAcAddressTest\widget.cpp:30 (std::string Widget::getMacAddress() const): STR :: ""

    i also have permission enabled in my AndroidManifest.xml but nothing helped me here

    0_1518236725503_bb47db04-14be-439c-b260-7c3ed55e5b79-image.png

    Thank You in advance.



  • @Pradeep-P-N

    QString MainWindow::getMacAddress()
    {
    foreach(QNetworkInterface netInterface, QNetworkInterface::allInterfaces())
    {
    if (!(netInterface.flags() & QNetworkInterface::IsLoopBack))
    return netInterface.hardwareAddress();
    }
    return QString();
    }



  • @Vinod-Kuntoji did you try this code in Android ?

    My Question is clear I need to get MAC address of the Android device in which my code runs



  • This should print available network interface names and their hardware/MAC addresses.

    for(auto interface: QNetworkInterface::allInterfaces())
        qDebug() << interface.name() << interface.hardwareAddress();
    

    For WLAN you may do something like this:

    for(auto interface:  QNetworkInterface::allInterfaces())
    {
        if(interface.name() == QLatin1String("wlan0"))
        {
            // do something with 'interface.hardwareAddress()'
    
            break;
        }
    }
    

    Note that second code block assumes that device don't have multiple WLAN interfaces.



  • @casdevel Thank you,
    but this doesn't provide me the WiFi MAC address of the Android device right ?



  • In my case it does. I tested this code on my Android tablet.



  • Hi @casdevel

    Can you please tell me your Android version and which device are you using ?

    I use Galaxy S6 with Android 7.0
    the output is

    W libMAcAddressTest.so: ..\MAcAddressTest\widget.cpp:45 (void Widget::getMacAddress() const): "lo" ""
    W libMAcAddressTest.so: ..\MAcAddressTest\widget.cpp:45 (void Widget::getMacAddress() const): "wlan0" ""



  • Tablet is ASUS Fonepad 7 (FE170CG) and Android version is 4.4.2.

    From log that you posted I see that network interfaces are recognized but hardware addresses are empty strings.
    Here is log from my device so you can see what is missing:
    D/libk012-server.so( 4097): (null):0 ((null)): "wlan0" "78:24:AF:65:B4:09"
    D/libk012-server.so( 4097): (null):0 ((null)): "lo" "00:00:00:00:00:00"

    I also played with user permissions to see if I can reproduce that empty string issue, but without success. Only permission needed for this to work is 'android.permission.INTERNET'.

    Here is my development environment details if you are interested:
    Qt Creator 5.10.0
    Android SDK 26.1.1
    Android NDK 16.1.4479499
    OpenJDK 8

    Android Studio is not installed, and development is done on Kubuntu 16.04.3 LTS.



  • Apparently, this behaviour changed when Android got a revised permission system for version 6. There are somewhat conflicting information in the net about this. Some claim that permissions in manifest are not enough, but you need to ask the user for the permission, some claim ways to get the MAC from IpV6 address... At least the problem is not related to Qt. Startt googling...



  • @mvuori those changes shouldn't affect this particular problem, according to official docs: https://developer.android.com/guide/topics/permissions/requesting.html#normal-dangerous.
    If permissions are in play here dialog box should pop-up, so I guess something else is responsible for this issue.
    Also I think that, at this point, Qt shouldn't be ruled out as a source of the problem.



  • @casdevel
    Even with the additional permission in manifest file i couldn't get any results.
    Is it possible for you to try with Android 6.0 or latest ?
    As i know the Android Update has removed its Access to BT and WiFi MAC Address.



  • @Pradeep-P-N said in How to get WiFi MAC address of Android device ?:

    Is it possible for you to try with Android 6.0 or latest ?

    Unfortunately no, this is the only Android device that I have and latest supported Android version for this device is 5.0.



  • @Pradeep-P-N it looks like the culprit is Android itself :-) as programmatic access to hardware MAC address was removed since version 6. You may want to see if this approach can help you.



  • @Pablo-J.-Rogina
    Thank you. I will check with the link :)


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.