ndk wifi ip 实现 附源码 详解

2025-10-30 06:50:51

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、到此完毕

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢