Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Q 10连接到网络WifineTworksSpecifier_Android_Connection_Wifi_Android 10.0 - Fatal编程技术网

Android Q 10连接到网络WifineTworksSpecifier

Android Q 10连接到网络WifineTworksSpecifier,android,connection,wifi,android-10.0,Android,Connection,Wifi,Android 10.0,由于Android Q不允许WifiManager添加网络,他们建议改用WifineTworksSpecifier。 使用WifiNetworkSuggestionBuilder,我已经能够在状态栏上显示通知,用户可以加入网络。但是这个API不能满足我的要求,因为我不要求用户使用statusbar的建议 使用wifinetworksspecifier,我还可以显示一个关于加入网络的弹出窗口,并且应用程序还与应用程序建立了连接。但wifi连接似乎只在应用程序范围内可用。如何克服应用程序的这个范围,

由于Android Q不允许WifiManager添加网络,他们建议改用WifineTworksSpecifier。 使用WifiNetworkSuggestionBuilder,我已经能够在状态栏上显示通知,用户可以加入网络。但是这个API不能满足我的要求,因为我不要求用户使用statusbar的建议

使用wifinetworksspecifier,我还可以显示一个关于加入网络的弹出窗口,并且应用程序还与应用程序建立了连接。但wifi连接似乎只在应用程序范围内可用。如何克服应用程序的这个范围,使其他应用程序,例如浏览器能够使用这个新建立的连接? 下面是我的代码

wifinetworksspecifier.Builder=新的wifinetworksspecifier.Builder();
建造商:setSsid(“abcdefgh”);
builder.setWpa2Passphrase(“1234567890”);
wifinetworksspecifier wifinetworksspecifier=builder.build();
NetworkRequest.Builder networkRequestBuilder=新建NetworkRequest.Builder();
networkRequestBuilder.addTransportType(NetworkCapabilities.TRANSPORT\u WIFI);
networkRequestBuilder.addCapability(NetworkCapabilities.NET_CAPABILITY不受限制);
networkRequestBuilder.addCapability(NetworkCapabilities.NET\u CAPABILITY\u TRUSTED);
networkRequestBuilder.setNetworkSpecifier(WifineTworksSpecifier);
NetworkRequest NetworkRequest=networkRequestBuilder.build();
ConnectivityManager cm=(ConnectivityManager)App.getInstance().getBaseContext().getApplicationContext().getSystemService(Context.CONNECTIVITY_服务);
如果(cm!=null){
cm.requestNetwork(networkRequest,新的ConnectionManager.NetworkCallback(){
@凌驾
公共无效onAvailable(@NonNull Network){
//使用此网络对象发送请求。
//使用OkHttp库创建服务请求
超级用户可用(网络);
}
});

派对有点晚了,但可能会帮助其他遇到这个问题的人

看来你是对的。 在android Q中,一旦应用程序被关闭,系统会自动断开我们通过WifineTworksSpecifier连接到的WiFi网络,无法阻止系统这样做

我想到的最好的解决方案是使用WiFineTworksSpecifier和WiFineTworksSuggestion。这允许我们在使用我们的应用程序时使用WiFineTworksSpecifier,并建议在系统因应用程序终止而与我们的wifi断开连接时,系统自动连接到wifi网络

以下是一些示例代码:

    WifiNetworkSuggestion.Builder builder = new WifiNetworkSuggestion.Builder()
        .setSsid("YOUR_SSID")
        .setWpa2Passphrase("YOUR_PASSWORD")
    WifiNetworkSuggestion suggestion = builder.build();

    ArrayList<WifiNetworkSuggestion> list = new ArrayList<>();
    list.add(suggestion);

    WifiManager manager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
    int status = manager.addNetworkSuggestions(list);

    if (status == STATUS_NETWORK_SUGGESTIONS_SUCCESS) {
        //We have successfully added our wifi for the system to consider
    }
WifiNetworkSuggestion.Builder=new WifiNetworkSuggestion.Builder()
.setSsid(“您的_SSID”)
.setWpa2Passphrase(“您的密码”)
wifinetworkssuggestion suggestion=builder.build();
ArrayList=新建ArrayList();
增加(建议);
WifiManager=(WifiManager)getSystemService(Context.WIFI\u服务);
int status=manager.addNetworkSuggestions(列表);
如果(状态==状态\网络\建议\成功){
/我们已经成功地添加了WiFi来考虑系统。
}

干杯,

我试过这个代码,它工作得很好

WifiNetworkSpecifier.Builder builder = new WifiNetworkSpecifier.Builder();
builder.setSsid("abcdefgh");
builder.setWpa2Passphrase("1234567890");

WifiNetworkSpecifier wifiNetworkSpecifier = builder.build();
NetworkRequest.Builder networkRequestBuilder = new NetworkRequest.Builder();
networkRequestBuilder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);     
networkRequestBuilder.setNetworkSpecifier(wifiNetworkSpecifier);
NetworkRequest networkRequest = networkRequestBuilder.build();
ConnectivityManager cm = (ConnectivityManager) 
           App.getInstance().getBaseContext().getApplicationContext()
          .getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm != null) {
    cm.requestNetwork(networkRequest, new ConnectivityManager.NetworkCallback() {
        @Override
        public void onAvailable(@NonNull Network network) {
           super.onAvailable(network);
    cm.bindProcessToNetwork(network)
        }});

您必须添加此行才能使用internet.networkRequestBuilder.addCapability(NetworkCapabilities.NET\u CAPABILITY\u internet);

嘿,您找到解决方案了吗?每当我使用NetworkSpecifier时,它都会显示im“已连接”到网络,但我没有实际的互联网连接。嘿,对于我的用例,我跳到了WifiNetworkSuggestionBuilder@AmirZ post。似乎如果你想用WifiNetworkSpecifier连接到一个普通的wifinetworks,你只能访问这个应用的互联网功能。因此,你不会有其他应用的互联网ChromeAh听到这个消息真让人失望。谢谢你!我尽一切努力只使用我的应用程序上网,但无论我怎么做都无法连接互联网。我可以在看到弹出窗口后连接到wifi,但即使在我的应用程序内也无法连接互联网。当手机未连接到其他网络时,此解决方案有效。@AmirZ但用户是否有要确认建议,还是在应用程序被关闭后系统会自动连接到建议的网络?据我所知,在没有任何用户交互的情况下,无法将用户连接到android Q上的wifi网络。此外,如果用户手动断开与您网络的连接,您的网络将被列入黑名单e下一个24小时,这意味着在此期间您将无法再次建议该网络(如果用户选择,当然可以手动连接到您的网络)。但您不能在应用程序之外使用此internet连接,对吗?例如,在应用程序中进行normak浏览Chrome@JulianSchweppe是的,我们不能在应用程序外使用互联网,即使我们无法连接到互联网,如果我们的WiFi关闭,我们也不能打开WiFi程序。我甚至不能在我的应用程序内使用互联网。显示带有“x”的WiFi图标在角落里。