ndk wifi ip 实现 附源码 详解

 时间:2026-02-15 12:20:41

1、在java层 MainActivity 类中实获取wifi的密码的函数:

int getWifiAddress()

{

WifiManager mgr = (WifiManager)getSystemService(WIFI_SERVICE);

WifiInfo info = mgr.getConnectionInfo();

if (null == info)

return 0;

int nIp = info.getIpAddress();

return nIp;

}

2、将 MainActivity 的对象指针传到ndk层:

在类中声明一个函数,不需要实现,由ndk层来实现:

public native int Tst();

并在 MainActivity 的 onCreate 方法中调用

Tst();

3、通过javah生成对应的c接口,由ndk层来来实现改函数:

在ndk层实现对应的函数 (C++的话需要加 extern "C"前缀)

extern "C" JNIEXPORT jint JNICALL Java_fk_localtalkie_MainActivity_Tst

  (JNIEnv *pJniEnv, jobject objActivity);

如下图,javah的通过Eclipse的 菜单下的 Run->External Tools->External Tools Configuration... 配置的效果图:配置好后点击 Run 就会在 jni/platform下面生成对应的文件 fk_localtalkie_MainActivity.h

ndk wifi ip 实现 附源码 详解

4、通过javap生成java层 MainActivity 类的方法签名,

如下图,javp的通过Eclipse的 菜单下的 Run->External Tools->External Tools Configuration... 配置的效果图:配置好后点击 Run 就会在 Eclipse 控制台窗口生成对应的 函数签名,如下图

ndk wifi ip 实现 附源码 详解

ndk wifi ip 实现 附源码 详解

5、在ndk层实现 

extern "C"

JNIEXPORT jint JNICALL Java_fk_localtalkie_MainActivity_Tst

  (JNIEnv *pJniEnv, jobject objActivity)

{

/// 获取 MainActivity类,不是对象,对象已经有了是:objActivity

jclass clsActivity = pJniEnv->FindClass("fk/localtalkie/MainActivity");

/// 获取类中的函数 getWifiAddress的函数ID,第三个参数填写该函数的函数签名

jmethodID method = pJniEnv->GetMethodID(clsActivity, "getWifiAddress", "()I");

/// 调用java层函数

int nIp = pJniEnv->CallIntMethod(objActivity, method);

/// 获取ip地址,ip地址就存在于变量ip中

char* ip = inet_ntoa(*((in_addr*)&nIp));

return 0;

}

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

7、到此完毕

  • 三星S4手机突然不停下载黄色软件是怎么回事?
  • 化疗期间一定要多吃的几种食物
  • 抖音道具无法支持设备怎么办
  • 京东怎么免费试用PLUS会员?
  • 天然气怎么开通
  • 热门搜索
    槟榔是什么东西 care是什么意思 尿黄是什么原因引起的 审核是什么意思 学制是什么意思 约转存期是什么意思 射手座和什么星座最配 玻尿酸是什么 基金净值是什么意思 bd是什么意思