我需要在不与用户交互的情况下以编程方式将Android设备连接到WiFi。值得注意的是,这款应用是专门打造的,不会出现在Play商店或公开部署(我这么说是因为我需要做的事情可能会有严重的安全隐患)。
下面是我如何以编程方式连接设备
TextView textFeedback = findViewById(R.id.text);
ConnectivityManager.NetworkCallback wifiConnectionCallback = new ConnectivityManager.NetworkCallback(){
@Override
public void onAvailable(@NonNull Network network) {
super.onAvailable(network);
Log.e(logTAG, "wifi connected");
textFeedback.setText("wifi connected");
}
@Override
public void onLosing(@NonNull Network network, int maxMsToLive) {
super.onLosing(network, maxMsToLive);
Log.e(logTAG, "losing wifi connection");
textFeedback.setText("losing wifi connection");
}
@Override
public void onLost(@NonNull Network network) {
super.onLost(network);
Log.e(logTAG, "lost wifi connection");
textFeedback.setText("lost wifi connection");
}
@Override
public void onUnavailable() {
super.onUnavailable();
Log.e(logTAG, "user closed wifi connection");
textFeedback.setText("user closed wifi connection");
}
};
// instantiate connectivity manager
ConnectivityManager connectivityManager = (ConnectivityManager) this.getApplicationContext().getSystemService(this.CONNECTIVITY_SERVICE);
// connect to phl via wifi
Thread wifiConnectionThread = new Thread(new Runnable()
{
@Override
public void run()
{
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q)
{
NetworkSpecifier networkSpecifier = new WifiNetworkSpecifier.Builder()
.setSsid(ssid)
.build();
NetworkRequest networkRequest = new NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.setNetworkSpecifier(networkSpecifier)
.build();
connectivityManager.requestNetwork(networkRequest, wifiConnectionCallback);
}
}
});
wifiConnectionThread.start();
这个功能运行良好,但有一个例外。它会提示用户询问他们是否要连接到网络。这是有问题的,因为即使没有用户,我也需要设备连接(因此需要以编程方式来完成此操作,通常不会有用户在场)。(最好不需要对设备进行root)?例如,是否可以进行设置,使用户只被提示一次,从那一刻起就是自动的?
2条答案
按热度按时间fzsnzjdm1#
几年前,我在开发一个小型网关以收集BLE传感器的数据并通过Wi-Fi将其推送到后端时遇到了完全相同的问题。
当时我使用了GitHub中公开的一个小库,叫做WifiUtils,你可以在this link下面找到这个库。
它使用起来非常简单,你可以从GitHub的www.example.com上获得很多信息README.md。
启用Wi-Fi:
扫描Wi-Fi网络:
最后和他们联系起来:
因为这个库的所有代码都在GitHub中,你可能会在那里找到更多的信息。
ckocjqey2#
很抱歉你不能这么做...
实际Android设备连接的最佳解决方案是启动意图打开WiFi设置并观察当前WiFi网络。
要启用WiFi,您必须询问用户!!!