मैं एंड्रॉइड 5.0 टैबलेट को एक इंट्रानेट से कनेक्ट करने का तरीका ढूंढ रहा हूं जिसमें सुरक्षा कारणों से इंटरनेट कनेक्शन नहीं है।NetworkRequest.builder() के साथ वाईफाई नेटवर्क को कैसे निर्दिष्ट करें। SetNetworkSpecifier (string)
समस्या कैप्टिव पोर्टल सुरक्षा है जो Google 4.4/5.0 के बाद एंड्रॉइड में निर्मित है। इंटरनेट कनेक्शन की जांच के लिए android connectivitycheck पर एक कॉल किया जाता है, जब यह कॉल विफल रहता है तो वाईफाई नेटवर्क को काम नहीं कर रहा है और इससे बचा जाता है। लगभग लंगड़ा।
दूसरों एक ही मुद्दे में समाप्त हो गया है और कुछ एंड्रॉयड 5 में शुरू की गई एक नई एपीआई का उपयोग कर सुझाव देते हैं, देखें: Android 5.0 Lollipop and 4.4 KitKat ignores my WiFi network, enableNetwork() is useless
इस पर दस्तावेज़ीकरण बहुत अस्पष्ट है:
NetworkRequest.Builder.setNetworkSpecifier(String networkSpecifier)
"व्याख्या इस स्ट्रिंग का वाहक विशिष्ट है और इसका उपयोग करने वाले वाहक अपने विवरण दस्तावेज करना चाहिए। उदाहरण के लिए, ब्लूटूथ कुछ प्रकार की डिवाइस आईडी का उपयोग कर सकता है जबकि वाईफाई एसएसआईडी और/या बीएसएसआईडी का उपयोग कर सकता है। सेलुलर कैरियर स्पैन का उपयोग कर सकता है "
मैंने कोशिश की और यह काम नहीं करता है। मुख्य समस्या यह है कि एक बार जब मैं setNetworkSpecifier()
का उपयोग करता हूं तो कोई नेटवर्क नहीं मिलता है। मैंने bssid
(मैक) और एपी के ssid
का उपयोग करने का प्रयास किया।
ऐसा लगता है कि फ़िल्टर काम कर रहा है लेकिन यह स्पष्ट नहीं है कि इसे कैसे काम करना चाहिए। अगर मैं setNetworkSpecifier()
कॉल 1 नेटवर्क छोड़ देता हूं, लेकिन यह निर्धारित करना संभव नहीं है कि कौन सा है। कम से कम यह मेरे कोड काम करता है।
तो एसएसआईडी और बीएसएसआईडी काम नहीं करता है तो मुझे यहां क्या रखा जाना चाहिए?
मेरा कोड यहां है।
private void connect(String ssid, Context context) {
Log.i(TAG, "try connect to! " + ssid);
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest nr = new NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).
removeCapability(NetworkCapabilities.NET_CAPABILITY_TRUSTED).
removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET
setNetworkSpecifier(ssid). //<--- here is the problem
build();
ConnectivityManager.NetworkCallback callback
= new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(Network network) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Log.i(TAG, "onAvailable " + network.toString() + " " + network.getClass().getName());
}
}
@Override
public void onCapabilitiesChanged(Network network, NetworkCapabilities networkCapabilities) {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Log.i(TAG, "onCapabilitiesChanged " + networkCapabilities.getLinkDownstreamBandwidthKbps());
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onLinkPropertiesChanged(Network network, LinkProperties linkProperties) {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Log.i(TAG, "onLinkPropertiesChanged " + linkProperties.getInterfaceName());
}
} catch (Exception e) {
e.printStackTrace();
}
}
};
Log.i(TAG, "requestNetwork ");
// cm.requestNetwork(nr, callback);
cm.registerNetworkCallback(nr, callback);
}
}