首页 > 电脑专区 > 电脑教程 >

ndk wifi ip 实现 附源码 详解

来源:互联网 2023-02-20 22:55:31 444

ndk获取wifi的ip的方法,分两种,一种是通过java层获取,一种是通过linux api获取,用 linux api gethostname获取的名字是"localhost", 调用 gethostbyname 后返回的永远是"127.0.0.1",所以暂时不采用这种方式;clG办公区 - 实用经验教程分享!

采用Java层获取,jni回调,最大的缺点是麻烦,现将实现过程如下:clG办公区 - 实用经验教程分享!

方便他人亦是方便自己,如果觉得还行就点下赞吧,这样可以帮助其他人更快的找到解决问题的方法;有疑问的也可留言哦, 谢谢!clG办公区 - 实用经验教程分享!

视频和代码的百度云地址:http://pan.baidu.com/s/1pJNT2DtclG办公区 - 实用经验教程分享!

工具/原料

  • Eclipse
  • ADT adt-bundle-windows-x86_64-20140321
  • NDK android-ndk-r9d

方法/步骤

  • 1

    在java层MainActivity 类中实获取wifi的密码的函数:clG办公区 - 实用经验教程分享!

    int getWifiAddress()clG办公区 - 实用经验教程分享!

    {clG办公区 - 实用经验教程分享!

    WifiManager mgr = (WifiManager)getSystemService(WIFI_SERVICE);clG办公区 - 实用经验教程分享!

    WifiInfo info = mgr.getConnectionInfo();clG办公区 - 实用经验教程分享!

    if (null == info)clG办公区 - 实用经验教程分享!

    return0;clG办公区 - 实用经验教程分享!

    clG办公区 - 实用经验教程分享!

    int nIp = info.getIpAddress();clG办公区 - 实用经验教程分享!

    clG办公区 - 实用经验教程分享!

    returnnIp;clG办公区 - 实用经验教程分享!

    }clG办公区 - 实用经验教程分享!

  • 1此文章非法爬取自百度经验
  • 2

    将MainActivity 的对象指针传到ndk层:clG办公区 - 实用经验教程分享!

    在类中声明一个函数,不需要实现,由ndk层来实现:clG办公区 - 实用经验教程分享!

    public native int Tst();clG办公区 - 实用经验教程分享!

    并在MainActivity 的onCreate 方法中调用clG办公区 - 实用经验教程分享!

    Tst();clG办公区 - 实用经验教程分享!

  • 3

    通过javah生成对应的c接口,由ndk层来来实现改函数:clG办公区 - 实用经验教程分享!

    在ndk层实现对应的函数 (C 的话需要加 extern "C"前缀)clG办公区 - 实用经验教程分享!

    extern "C" JNIEXPORT jint JNICALL Java_fk_localtalkie_MainActivity_TstclG办公区 - 实用经验教程分享!

    (JNIEnv *pJniEnv, jobject objActivity);clG办公区 - 实用经验教程分享!

    如下图,javah的通过Eclipse的 菜单下的 Run->External Tools->External Tools Configuration... 配置的效果图:配置好后点击 Run 就会在 jni/platform下面生成对应的文件fk_localtalkie_MainActivity.hclG办公区 - 实用经验教程分享!

    ndk wifi ip 实现 附源码 详解clG办公区 - 实用经验教程分享!

  • 4

    通过javap生成java层 MainActivity 类的方法签名,clG办公区 - 实用经验教程分享!

    如下图,javp的通过Eclipse的 菜单下的 Run->External Tools->External Tools Configuration... 配置的效果图:配置好后点击 Run 就会在 Eclipse 控制台窗口生成对应的 函数签名,如下图clG办公区 - 实用经验教程分享!

    ndk wifi ip 实现 附源码 详解clG办公区 - 实用经验教程分享!

    ndk wifi ip 实现 附源码 详解clG办公区 - 实用经验教程分享!

  • 5

    在ndk层实现clG办公区 - 实用经验教程分享!

    extern "C"clG办公区 - 实用经验教程分享!

    JNIEXPORT jint JNICALL Java_fk_localtalkie_MainActivity_TstclG办公区 - 实用经验教程分享!

    (JNIEnv *pJniEnv, jobject objActivity)clG办公区 - 实用经验教程分享!

    {clG办公区 - 实用经验教程分享!

    clG办公区 - 实用经验教程分享!

    /// 获取 MainActivity类,不是对象,对象已经有了是:objActivityclG办公区 - 实用经验教程分享!

    jclass clsActivity= pJniEnv->FindClass("fk/localtalkie/MainActivity");clG办公区 - 实用经验教程分享!

    /// 获取类中的函数 getWifiAddress的函数ID,第三个参数填写该函数的函数签名clG办公区 - 实用经验教程分享!

    jmethodIDmethod= pJniEnv->GetMethodID(clsActivity, "getWifiAddress", "()I");clG办公区 - 实用经验教程分享!

    /// 调用java层函数clG办公区 - 实用经验教程分享!

    int nIp = pJniEnv->CallIntMethod(objActivity, method);clG办公区 - 实用经验教程分享!

    /// 获取ip地址,ip地址就存在于变量ip中clG办公区 - 实用经验教程分享!

    char*ip = inet_ntoa(*((in_addr*)&nIp));clG办公区 - 实用经验教程分享!

    return0;clG办公区 - 实用经验教程分享!

    }clG办公区 - 实用经验教程分享!

  • 6

    如果希望直接把 获取wifi ip的功能写成ndk接口getWifiIp(char* szIp);可以考虑在在 MainActivity的OnCreate中把JNIEnv环境指针 和 MainActivityjobject对象传过来,ndk层保存好这两个变量,然后在getWifiIp 函数就可以直接对用这两个变量;clG办公区 - 实用经验教程分享!

  • 7

    到此完毕clG办公区 - 实用经验教程分享!

  • 注意事项

    • 实现 Java_fk_localtalkie_MainActivity_Tst的时候,如果是C 需要加前缀 extern "C"
    • javap -s 指向的是 .class 文件,不是java文件,而.class在Eclipse的资源管理器中是看不见的,需要在windows文件系统中查看

    以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!clG办公区 - 实用经验教程分享!


    标签: WIFI实现

    办公区 Copyright © 2016-2023 www.bgqu.net. Some Rights Reserved. 备案号:湘ICP备2020019561号统计代码