如何从C++代码直接访问android framework层的WifiService

本文通过实例代码展示如何从C++层面直接调用Android framework层的WifiService,核心是利用binder接口进行操作。编译运行后,能够获取到Wi-Fi的相关信息,如SSID、BSSID、信号强度等。
摘要由CSDN通过智能技术生成

    说到底,Java层的service就是就C++层的binder的封装,所以从原理上来讲通过C++代码直接访问android framework层的service是完全可能的,这篇文章以访问WifiService为例,讲解如何去实现这个功能。


费话少说,直接上代码:


WifiTest.cpp


#include <sys/types.h>
#include <unistd.h>
#include <grp.h>

#include <binder/IPCThreadState.h>
#include <binder/ProcessState.h>
#include <binder/IServiceManager.h>
#include <utils/Log.h>

#include <utils/String16.h>
//#include <utils/Vector.h>
#include <utils/List.h>
#include <utils/PropertyMap.h>

using namespace android;


#define WIFI_SERVICE  "wifi"
const String16 WIFI_DESCRIPTOR("android.net.wifi.IWifiManager");

class ScanResult
{

private:
    ScanResult& operator=(const ScanResult& o);

public:
    ScanResult(const ScanResult& o):
        mSsid(o.mSsid),mBssid(o.mBssid),mCaps(o.mCaps),mLevel(o.mLevel),mFrequency(o.mFrequency),mTimestamp(o.mTimestamp)
    {
    }

    ScanResult(String8 ssid,String16 bssid,String16 caps,int level,int freq,int64_t timeStamp):
        mSsid(ssid),mBssid(bssid),mCaps(caps),mLevel(level),mFrequency(freq),mTimestamp(timeStamp)
    {
    }
    void dump()
    {
        char temp[130];
        int size;
        memset(temp,0,sizeof(temp));
        printf("ssid %s \n",mSsid.string());

        size = mBssid.size();
        if(size > sizeof(temp)/2 - 1)
        {
            size = sizeof(temp)/2 - 1;
        }
        utf16_to_utf8(mBssid.string(), size, temp);
        printf("Bssid %s \n",temp);

        size = mCaps.size();
        if(size > sizeof(temp)/2 - 1)
        {
            size = sizeof(temp)/2 - 1;
        }
        utf16_to_utf8(mCaps.string(), size, temp);
        printf("ssid %s \n",temp);


        printf("level %d \n",mLevel);
        printf("freq %d \n",mFrequency);
        printf("freq %ld \n",mTimestamp);
    }
private:
    String8 mSsid;
 
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值