Android6.0系统获取wifi密码列表,并导入到另一台设备中

客户有个需求是,要把一台手机连接的wifi信息,以及其他配置信息一同导入到另一台手机中,然后生效。其他系统配置信息例如系统密码,usb调试等,比较容易做到。但wifi列表的话,是保存在/data/misc/wifi/wpa_supplicant.conf文件中。用cat命令查看,可以看到network={...}的信息,就是系统保存的wifi账号密码,可以保存所有连接过的wifi信息


image.png

但是很遗憾的是,这个wpa_supplicant.conf文件是归属于wifi所有的,所以我们不能通过读写和拷贝这个文件


image.png

原想在上层Settings工程中,通过追踪系统源码,查看在设置-wifi里是如何保存系统wifi的,但是发现要在Settings获取WifiConfiguration对象的preSharedKey,即wifi密码时返回的是*,而且保存wifi的配置也很麻烦。所以就在frameworks中搜索
/data/misc/wifi/wpa_supplicant.conf,在frameworks/opt\net\wifi\service\java\com\android\server\wifi\WifiConfigStore中找到了读取这个文件的代码。


image.png

image.png

这说明了在WifiConfigStore中有权限可以读取这个文件,那么我们在其他系统应用中可以发广播,在这里读取文件,通过广播把读取到的wifi配置信息回传回去。

在frameworks/opt\net\wifi\service\java\com\android\server\wifi\WifiStateMachine中有WifiConfigStore的实例,而且这个文件中有注册监听广播的地方,我们可以直接copy,注册自己的广播


image.png
image.png

这样我们就拿到了wifi的账号密码的所有列表。然后就是导入另一台设备中了。


image.png
image.png

在WifiConfigStore没看到写wpa_supplicant.conf这个文件的操作,而且这个文件除了network以外还有设备自身的其他信息,所以选择是截取除network外的其他信息,与通过广播传进来的需要导入的network信息拼接在一起,删除wpa_supplicant.conf文件,重新将这些信息写入新的wpa_supplicant.conf文件。通过cat命令看的确剩下了,但重启之后发现wifi打不开了,原因是因为我们通过代码写的wpa_supplicant.conf文件,文件归属于System,而不在属于wifi,所以读取不了这个文件,wifi就打不开了。

所以要修改这个文件的权限,重启的时候让他变为wifi所有的文件。
修改 \MTK6755\system\core\rootdir\init.rc


image.png

修改 \MTK6755\device\mediatek\mt6755\meta_init.rc

image.png

这样重启的时候就会重新将wpa_supplicant.conf文件修改为wifi所有,效果也实现了

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • android 6.0架构下wpa_supplicant分析 2016年03月02日 16:57:44hatchu...
    辉色投像阅读 10,112评论 0 0
  • 概述 介绍Wi-Fi联盟推出的另外一项重要技术规范WiFi P2P。 该规范的商品名为Wi-Fi Direct, ...
    傀儡世界阅读 46,110评论 5 18
  • [TOC] [玩转树莓派] 选个系统先 Install Raspbian 0x00 树莓派的安装配置(无显示器) ...
    ttdevs阅读 11,174评论 0 11
  • 缺席 你该是旧时的流云,在我的手臂上炫耀 日复一日的白 仅仅停留在手臂上,抓不住 所以多年之后仍叫不出你的名字 天...
    蓝晓罂阅读 1,137评论 0 0
  • 我,不喜欢与人交往,恐惧与人交往,和其他人说话时就会紧张不安,语无伦次,这大概就是社交恐惧症了吧。 为什么不喜欢和...
    Chenwy阅读 1,501评论 0 1