android 增加wifi-p2p api 第三版

来源:互联网 发布:淘宝查号是什么意思 编辑:程序博客网 时间:2024/04/25 18:30

前提条件:

      必须驱动和wpa_supplicant都必须支持p2p命令。

      部分驱动本身支持p2p,但是可能不完善,p2p命令被屏蔽掉了,这时候需修改wpa_supplicant中读取驱动capa标志位,欺骗wpa_supplicant实现p2p的支持。


Android的修改:

1,增加自定义api

cp WifiNative.java WifiP2p.java

音调hide注释

修改WifiNative--->WifiP2p

注释掉蓝牙相关函数。

cp android_net_wifi_Wifi.cpp android_net_wifi_WifiP2p.cpp


#define WIFI_PKG_NAME "android/net/wifi/WifiP2p"


int register_android_net_wifi_P2p(JNIEnv* env)


修改文件:

frameworks/base/core/jni/AndroidRuntime.cpp

REG_JNI(register_android_net_wifi_WifiP2p),

extern int register_android_net_wifi_WifiP2p(JNIEnv* env);


frameworks/base/core/jni/Android.mk

android_net_wifi_WifiP2p.cpp \

重启。。


NIHelp ( 2569): RegisterNatives failed for 'android/net/wifi/WifiP2p'
E/AndroidRuntime( 2569): Unable to register all android natives
I/ServiceManager( 1119): service 'media.audio_flinger' died
I/ServiceManager( 1119): service 'media.player' died
I/ServiceManager( 1119): service 'media.camera' died
I/ServiceManager( 1119): service 'media.audio_policy' died
I/Netd    ( 2571): Netd 1.0 starting
I/        ( 2570): ServiceManager: 0xad50
E/AudioHardwareALSA( 2570): ALSALib: external/alsa-lib/src/control/control.c:902:(snd_ctl_open_noupdatt
W/AudioHardwareALSA( 2570): Unable to attach mixer to device AndroidOut: No such file or directory
E/AudioHardwareALSA( 2570): ALSALib: external/alsa-lib/src/control/control.c:902:(snd_ctl_open_noupdatn
W/AudioHardwareALSA( 2570): Unable to attach mixer to device AndroidIn: No such file or directory
I/CameraService( 2570): CameraService started (pid=2570)
D/AudioHardwareALSA( 2570): openOutputStream called for devices: 0x00000002
D/ALSAModule( 2570): open called for devices 00000002 in mode 0...
I/ALSAModule( 2570): Initialized ALSA PLAYBACK device AndroidPlayback_Speaker_normal
I/AudioFlinger( 2570): AudioFlinger's thread 0x2ee78 ready to run

D/ALSAModule( 2570): route called for devices 00000002 in mode 0...

原因:是蓝牙的几个函数原因。在这几个改动文件删除掉即可。

2,加入:传入命令功能:

  文件: frameworks/base/wifi/java/android/net/wifi/WifiP2p.java

    public native static String sendP2pCommand(String p2pCommand);

文件:frameworks/base/core/jni/android_net_wifi_WifiP2p.cpp

//*************************leo for p2p commands*******************************
static jstring android_net_wifi_sendP2pCommand(JNIEnv* env,
                                                          jobject clazz,
                                                          jstring p2pCommand)
{
    char cmdstr[256];
    jboolean isCopy;

    const char *nameStr = env->GetStringUTFChars(p2pCommand, &isCopy);

    if (nameStr == NULL)
        return env->NewStringUTF(NULL);

    int cmdTooLong = snprintf(cmdstr, sizeof(cmdstr), "%s",nameStr) >= (int)sizeof(cmdstr);

    env->ReleaseStringUTFChars(p2pCommand, nameStr);

    return cmdTooLong ? env->NewStringUTF(NULL) : doStringCommand(env, cmdstr);
}

//*************************leo for p2p commands*******************************

注册接口::

 { "sendP2pCommand", "(Ljava/lang/String;)Ljava/lang/String;",
        (void*) android_net_wifi_sendP2pCommand },

跟新API

make update-api

发现链接失败:

追查原因:链接wpa_supplicant客户端创建两个soket后,attch返回-2失败,

修改客户端soket文件权限:

external/ath_supplicant-0.8.x/src/common/wpa_ctrl.c


 //chmod(ctrl->local.sun_path, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
        chmod(ctrl->local.sun_path, 0777);

依然:添加wpa_ctrl.c打印信息:

ath_supplicant-0.8.x/wpa_supplicant/Android.mk

LOCAL_SRC_FILES = $(MY_SUPPLICANT)/src/utils/wpa_debug.c $(MY_SUPPLICANT)/src/common/wpa_ctrl.c  $(MY_SUPPLICANT)/src/utils/os_$(CONFIG_OS).c




原创粉丝点击