养生 装修 购物 美食 感冒 便秘 营销 加盟 小吃 火锅 管理 创业 搭配 减肥 培训 旅游

ndk wifi ip 实现 附源码 详解

时间:2024-09-21 06:04:33

ndk获取wifi的ip的方法,分两种,一种是通过java层获取水貔藻疽,一种是通过linuxapi获取,用linuxap足毂忍珩igethostname获取的名字是"localhost",调用gethostbyname后返回的永远是"127.0.0.1",所以暂时不采用这种方式;采用Java层获取,jni回调,最大的缺点是麻烦,现将实现过程如下:方便他人亦是方便自己,如果觉得还行就点下赞吧,这样可以帮助其他人更快的找到解决问题的方法;有疑问的也可留言哦,谢谢!视频和代码的百度云地址:http://pan.baidu.com/s/1pJNT2Dt

工具/原料

Eclipse

ADTadt-bundle-windows-x86_64-20140321

NDKandroid-ndk-r9d

方法/步骤

1、在java层MainActivity类中实获取wifi的密码的函数:intgetWifiAddress() { WifiManagermgr=(WifiManager)getSystemService(WIFI_SERVICE); WifiInfoinfo=mgr.getConnectionInfo(); if(null==info) return 0; intnIp=info.getIpAddress(); return nIp; }

2、将MainActivity的对象指针传到ndk层:在类中声明一个函数,不需要实现,由ndk层来实现:publicnativeintTst();并在MainActivity的onCreate方法中调用Tst();

3、通过javah生成对应的c接口,由ndk层来来实现改函墙绅褡孛数:在ndk层实现对应的函数(C++的话需醐肛们亲要加extern"C"前缀)extern"C"JNIEXPORTjintJNICALLJava_fk_localtalkie_MainActivity_Tst(JNIEnv*pJniEnv,jobjectobjActivity);如下图,javah的通过Eclipse的菜单下的Run->ExternalTools->ExternalToolsConfiguration...配置的效果图:配置好后点击Run就会在jni/platform下面生成对应的文件fk_localtalkie_MainActivity.h

ndk wifi ip 实现 附源码 详解

4、通过javap生成java层MainActivity类的方法签名,如下图,javp的通过Eclipse的菜单下的Run->ExternalTools->ExternalToolsConfiguration...配置的效果图:配置好后点击Run就会在Eclipse控制台窗口生成对应的函数签名,如下图

ndk wifi ip 实现 附源码 详解

ndk wifi ip 实现 附源码 详解

5、在ndk层实现extern"C"JNIEXPORTjint咯悝滩镞JNICALLJava_fk_localtalkie_MainActivit烤恤鹇灭y_Tst(JNIEnv*pJniEnv,jobjectobjActivity){ ///获取MainActivity类,不是对象,对象已经有了是:objActivity jclassclsActivity =pJniEnv->FindClass("fk/localtalkie/MainActivity"); ///获取类中的函数getWifiAddress的函数ID,第三个参数填写该函数的函数签名 jmethodID method =pJniEnv->GetMethodID(clsActivity,"getWifiAddress","()I"); ///调用java层函数 intnIp=pJniEnv->CallIntMethod(objActivity,method); ///获取ip地址,ip地址就存在于变量ip中 char* ip=inet_ntoa(*((in_addr*)&nIp)); return 0;}

6、如果希望直接把获取wifiip的功能写成ndk接口getWifiIp(char*szIp);可以考虑在在MainActivity的OnCreate中把JNIEnv环境指针和MainActivityjobject对象传过来,ndk层保存好这两个变量,然后在getWifiIp函数就可以直接对用这两个变量;

7、到此完毕

© 一点知识