Ouanu / WifiDemo

Android 12 Wifi Demo
1 stars 1 forks source link

安卓12的红米K40没法控制开关wifi #1

Open ou2356 opened 1 year ago

ou2356 commented 1 year ago

红米K40的WiFi是双模的(就是可以连一个WiFi,又开一个热点),我当我把WiFi关闭时,你这个app还是可以搜索到WiFi,并且用你这个app输入密码后并没有连上WiFi,只是在WiFi管理中看到(在WiFidemo中可用),所以不知道是怎么个回事。而且没法用你这个app控制WiFi的开启或关闭。在安卓6的小米5中可以用你这个app控制WiFi开关和搜索WiFi,但是没法连接,一连接WiFi就闪退。 图片 图片

Ouanu commented 1 year ago

你好。 这个项目指适用于Android 12,原因是Android 11、12都收紧了wifi连接权限,现如今只能“建议”系统去连某个(或者某些)wifi,连接过程也会弹出一个二次确认的窗口,想必你也遇见了,而这些API Android 6.0 应该是无法调用的。 此外,开关Wifi是需要系统权限(system,非root,需要在AndroidManifest.xml文件中添加android:sharedUserId="android.uid.system" ),也就是要系统签名,也就是你要有对应系统源码,相关的获取方法你可以自己去搜一下。如果你有系统权限的话,加上上面那个属性,然后打包签名就能启停Wifi。

至于Android 6.0,其连接方法是另一套,我等会上传一下,你过个几分钟再回来看看。

@ou2356

ou2356 commented 1 year ago

你好。 这个项目指适用于Android 12,原因是Android 11、12都收紧了wifi连接权限,现如今只能“建议”系统去连某个(或者某些)wifi,连接过程也会弹出一个二次确认的窗口,想必你也遇见了,而这些API Android 6.0 应该是无法调用的。 此外,开关Wifi是需要系统权限(system,非root,需要在AndroidManifest.xml文件中添加android:sharedUserId="android.uid.system" ),也就是要系统签名,也就是你要有对应系统源码,相关的获取方法你可以自己去搜一下。如果你有系统权限的话,加上上面那个属性,然后打包签名就能启停Wifi。

至于Android 6.0,其连接方法是另一套,我等会上传一下,你过个几分钟再回来看看。

我明白了,非常感谢,我只是个安卓开发小白,目前只能看看别人的例程来学习一下如何使用。还有一个疑问就是那个建议连接某个WiFi添加之后需要如何才能让它真正连上去呢?

Ouanu commented 1 year ago

你好。 这个项目指适用于Android 12,原因是Android 11、12都收紧了wifi连接权限,现如今只能“建议”系统去连某个(或者某些)wifi,连接过程也会弹出一个二次确认的窗口,想必你也遇见了,而这些API Android 6.0 应该是无法调用的。 此外,开关Wifi是需要系统权限(system,非root,需要在AndroidManifest.xml文件中添加android:sharedUserId="android.uid.system" ),也就是要系统签名,也就是你要有对应系统源码,相关的获取方法你可以自己去搜一下。如果你有系统权限的话,加上上面那个属性,然后打包签名就能启停Wifi。 至于Android 6.0,其连接方法是另一套,我等会上传一下,你过个几分钟再回来看看。

我明白了,非常感谢,我只是个安卓开发小白,目前只能看看别人的例程来学习一下如何使用。还有一个疑问就是那个建议连接某个WiFi添加之后需要如何才能让它真正连上去呢?

我只想到一个方法,这个Demo就是这么实现的: 1、先删除所有建议的Wifi,这个demo在添加建议Wifi前就是这么做的; 2、然后只添加一个建议Wifi。 理论上来说这样就能连上指定的Wifi,如果连不上的话,得重启Wifi才行,然后又回到最初的系统权限问题。 Wifi连接这部分功能,不适合我们这些第三方开发者做,未来这部分功能有可能会完全封闭,只允许系统厂商进行开发。 我的建议是如果你所在的公司有提供系统源码的话,建议先生成对应系统的签名,再进行这些系统功能的开发;如果是个人自学的话,最好从编译Android源码下手来获取系统签名。如果不具备获取源码的条件,那我更建议直接使用Intent来跳转到系统的Wifi页面进行连接,这种会更加符合现在的开发逻辑。 @ou2356

ou2356 commented 1 year ago

@Ouanu 明白了,我是个人自学来实现控制自己的做的无人机的,就是想问下获取这个系统权限只能拿到红米K40官方的ROM包的源码才能获取成功系统权限吗?还是说在这个安卓官方的源码的这个目录中 https://cs.android.com/android/platform/superproject/+/master:build/make/target/product/security/ 也可以获取创建系统权限所需的权限?我搜索到的资料是需要一下两个文件来创建密钥的: 图片

Ouanu commented 1 year ago

@Ouanu 明白了,我是个人自学来实现控制自己的做的无人机的,就是想问下获取这个系统权限只能拿到红米K40官方的ROM包的源码才能获取成功系统权限吗?还是说在这个安卓官方的源码的这个目录中 https://cs.android.com/android/platform/superproject/+/master:build/make/target/product/security/ 也可以获取创建系统权限所需的权限?我搜索到的资料是需要一下两个文件来创建密钥的: 图片

是用这两个,但必须是k40 官方ROM对应的源码包才行,不同ROM系统签名是不一样的。如果说是无人机wifi控制的话,建议用点对点连接,详情可参考官方文档:https://developer.android.google.cn/guide/topics/connectivity/wifip2p 这个就可以直连,不用等系统决策,但wifi开关还是得系统签名。

直连和建议不同,直连只能在固定应用里使用,一旦返回桌面或者到其他应用里,是不起作用的,还有可能会断开。

@ou2356

ou2356 commented 1 year ago

@Ouanu 是的,我的首选也是用WiFi直连,但是我的无人机的WIFI模块貌似不支持WIFI直连,所以只能来看看sta/ap模式。