1 问题
Android10.0设备经过热点名字和密码链接另一台设置指定热点,可是他们之间依然不能通讯,网络不可达。shell
Android10.0设备经过热点名字和密码链接另一台设置指定热点,我用的是官方API,能够参考个人这篇博客网络
Android之经过用户名和密码链接指定wifi热点(兼容Android9.0和Android10.0和addNetwork(wifiNewConfiguration)返回-1问题)ide
Android10.0链接热点关键代码以下ui
boolean isOpenWifi = mWifiManager.isWifiEnabled(); if (!isOpenWifi) { Log.i(TAG, "用户须要打开wifi开关"); context.startActivity(new Intent(Settings.Panel.ACTION_INTERNET_CONNECTIVITY)); callBack.connnectResult(false); return; } NetworkSpecifier specifier = new WifiNetworkSpecifier.Builder() .setSsidPattern(new PatternMatcher(wifiApName, PatternMatcher.PATTERN_PREFIX)) .setWpa2Passphrase(password) .build(); NetworkRequest request = new NetworkRequest.Builder() .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .setNetworkSpecifier(specifier) .build(); ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() { @Override public void onAvailable(Network network) { // do success processing here.. Log.i(TAG, "onAvailable success"); Log.i(TAG, "network" + network.toString()); callBack.connnectResult(true); } @Override public void onUnavailable() { // do failure processing here.. Log.i(TAG, "onUnavailable fail"); callBack.connnectResult(false); } }; connectivityManager.requestNetwork(request, networkCallback);
2 分析
咱们查看竞品 "茄子快传",发现Android10.0设备经过热点名字和密码链接另一台设置指定热点,而后链接成功后能够正常通讯,咱们先用jadx反编译茄子代码,而后搜索上面官方API的关键字WifiNetworkSpecifierspa
没有搜索到,而后咱们用官方的10.0API也会让手机弹出提示,让用户赞成,可是竞品没有这个提示,就说明它用的不是这个方式链接指定热点的,可是依然能够链接上后正常通讯,咱们分析是否是用了其它特殊方式,咱们打开竞品扫描二维码,而后抓当前进程打印的日志.net
adb shell ps | grep share
adb logcat | grep pid
依然没有发现什么线索,而后就全局搜索关键字enableNetwork日志
也就只有这几处,而后咱们就再到网上找为何Android10.0设备enableNetwork 返回-1code