मैंने एंड्रॉइड वाई-फाई पी 2 पी एपीआई के साथ एक एक्सेस प्वाइंट बनाया है और मैं इसे वाईफ़ाई (वाईफाई डायरेक्ट नहीं) और निम्न कोड का उपयोग करके किसी अन्य फोन से कनेक्ट करना चाहता हूं:

WifiConfiguration conf = new WifiConfiguration();
conf.SSID = "\"" + networkSSID + "\""; 
conf.preSharedKey = "\""+ networkPass +"\"";
WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); 
wifiManager.addNetwork(conf);
List<WifiConfiguration> list = wifiManager.getConfiguredNetworks();
for( WifiConfiguration i : list ) {
    if(i.SSID != null && i.SSID.equals("\"" + networkSSID + "\"")) {
         wifiManager.disconnect();
         wifiManager.enableNetwork(i.networkId, true);
         wifiManager.reconnect();               

         break;
    }           
 }

और निम्नलिखित अनुमतियों के साथ:

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />

लेकिन यह उस एक्सेस प्वाइंट से कनेक्ट नहीं होता है।
लेकिन सैमसंग वाईफाई मैनेजर इससे आसानी से जुड़ जाता है।
मैंने कई पुस्तकालयों को जोड़ने की कोशिश की, लेकिन परिणाम समान था।
मैंने सोचा कि शायद इसलिए कि एक्सेस प्वाइंट में इंटरनेट कनेक्शन नहीं है, मैं इससे कनेक्ट नहीं हो सकता।
कृपया मेरी मदद करें मुझे अपने आवेदन के लिए इस मुद्दे को हल करने की आवश्यकता है। tnks

0
Matin Kanani 5 अक्टूबर 2020, 12:28

1 उत्तर

सबसे बढ़िया उत्तर

मैंने समस्या का समाधान कर दिया है और मैं इसका समाधान आपके साथ साझा करना चाहता हूं।
मैंने एक्सेस प्वाइंट की खोज के लिए वाईफ़ाई डायरेक्ट एपीआई का इस्तेमाल किया और इसे कनेक्ट करने के लिए पासवर्ड जैसी जानकारी पुनर्प्राप्त की लेकिन मुझे एहसास हुआ कि जब आप सेवाओं की खोज के लिए वाईफ़ाई डायरेक्ट एपीआई का उपयोग कर रहे हैं, तो आप एक ही समय में वाईफाई के साथ एक्सेस प्वाइंट से कनेक्ट नहीं हो सकते हैं (मुझे लगता है कि यह बग है)।
इसलिए आपको पहले सेवा खोज को रोकना चाहिए और फिर पहुंच बिंदु से कनेक्ट करना चाहिए।
मैंने निम्नलिखित कोड का उपयोग किया:

public void connectToAccessPoint(GroupAccessPoint groupAccessPoint) {
    stopServiceDiscovery(new WifiP2pManager.ActionListener() {
        @Override
        public void onSuccess() {
            connect(groupAccessPoint);
        }

        @Override
        public void onFailure(int reason) {
            connect(groupAccessPoint);
        }
    });
}

public void stopServiceDiscovery(@Nullable WifiP2pManager.ActionListener stopDiscoveryListener) {
    if (wifiP2pManager == null) return;
    wifiP2pManager.clearServiceRequests(channel, new DefaultActionListener(actionListener, Action.CANCEL_DISCOVERING));
    wifiP2pManager.setDnsSdResponseListeners(channel, null, null);
    wifiP2pManager.stopPeerDiscovery(channel, stopDiscoveryListener);
}

private void connect(GroupAccessPoint groupAccessPoint) {
    WifiUtils.withContext(activity.getApplicationContext())
            .connectWith(groupAccessPoint.ssid, groupAccessPoint.password)
            .setTimeout(12000)
            .onConnectionResult(new ConnectionSuccessListener() {
                @Override
                public void success() {
                    actionListener.onSuccess(Action.JOIN_GROUP);
                }

                @Override
                public void failed(@NonNull ConnectionErrorCode errorCode) {
                    actionListener.onFailure(Action.JOIN_GROUP);
                }
            }).start();
}
0
Matin Kanani 24 अक्टूबर 2020, 14:08