Skip to content Skip to sidebar Skip to footer

Ioexception Unable To Resolve Host,no Address Associated With Hostname

I am working on Sony Remote camera which is connected using WiFi.I need to click a picture using a camera and then upload it to my FTP server which is in another activity.for than

Solution 1:

Connection to a network is not inmediate. Also, if the desired network has no internet connection, in recent versions of Android it will not connect (if the connection is made by a user, a popup shows a confirmation to connnect).

I solved both problems using Android APIs (2 versions, one for API<21 and the other for API>=21).

Try this code (I'm using AndroidAnnotations for dependency injection, but is not required):

publicclassWifiHelperextendsBroadcastReceiver {
    @RootContextContext context;

    @SystemServiceConnectivityManager connectivityManager;

    @SystemServiceWifiManager wifiManager;

    // For API>=21privateWifiHelperNetworkCallback wnc;

    // For API<21privateboolean isBroadcastRegistered;

    privateString desiredSSID;

    privateRunnable callback;

    publicvoidenableNetwork(String ssid, int networkId, Runnable callback) {
        desiredSSID = ssid;
        wifiManager.enableNetwork(networkId, true);
        configureNetworkRequest();
    }

    privatevoidnetworkAvailable() {
        // this method will be called when the network is available
        callback.run();
    }

    privatevoidconfigureNetworkRequest() {
        if (android.os.Build.VERSION.SDK_INT >= 21) {
            configureNetworkRequestAPI21();
        } else {
            configureNetworkRequestLegacy();
        }
    }

    @TargetApi(21)
    privatevoidconfigureNetworkRequestAPI21() {
        NetworkRequest request = newNetworkRequest.Builder()
                .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
                .build();
        if (wnc == null) wnc = newWifiHelperNetworkCallback(this, connectivityManager);

        connectivityManager.requestNetwork(request, wnc);
    }

    privatevoidconfigureNetworkRequestLegacy() {
        unregisterReceiver();

        connectivityManager.startUsingNetworkFeature(ConnectivityManager.TYPE_WIFI, null);
        IntentFilter intent = newIntentFilter();
        intent.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
        intent.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);

        context.registerReceiver(this, intent);
        isBroadcastRegistered = true;
    }

    @TargetApi(21)
    privatevoiddisableNetworkRequest() {
        if (android.os.Build.VERSION.SDK_INT >= 21) {
            if (wnc != null) connectivityManager.unregisterNetworkCallback(wnc);

            ConnectivityManager.setProcessDefaultNetwork(null);
        } else {
            unregisterReceiver();
        }
    }

    privatevoidunregisterReceiver() {
        if (isBroadcastRegistered) {
            context.unregisterReceiver(this);
            isBroadcastRegistered = false;
        }
    }

    // API<21@OverridepublicvoidonReceive(Context context, Intent intent) {
        if(intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
            NetworkInfo networkInfo =
                    intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
            if(networkInfo.isConnected()) {
                // Wifi is connectedif (desiredSSID.equals(getCurrentSSID())) {
                    // Callback and unregisternetworkAvailable();
                    unregisterReceiver();
                }
            }
        }
    }

    publicStringgetCurrentSSID() {
        WifiInfo wifiInfo = wifiManager.getConnectionInfo();
        if (wifiInfo != null && wifiInfo.getSupplicantState()== SupplicantState.COMPLETED) {
            returnssidWithoutQuotes(wifiInfo.getSSID());
        }
        elsereturnnull;
    }

    protectedstaticStringssidWithoutQuotes(String ssid) {
        if (ssid == null) returnnull;
        elseif (ssid.startsWith("\"") && ssid.endsWith("\"")) {
            return ssid.substring(1, ssid.length() - 1);
        } else {
            return ssid;
        }
    }

    protectedStringgetDesiredSSID() {
        return desiredSSID;
    }

    @TargetApi(21)
    publicstaticclassWifiHelperNetworkCallbackextendsConnectivityManager.NetworkCallback {
        public final StringLOG_TAG = WifiHelper.class.getSimpleName();

        privateConnectivityManager connectivityManager;
        privateWifiHelper wifiHelper;

        publicWifiHelperNetworkCallback(WifiHelper wifiHelper, ConnectivityManager connectivityManager) {
            this.wifiHelper = wifiHelper;
            this.connectivityManager = connectivityManager;
        }

        publicvoidonAvailable(Network network) {
            // Do something once the network is availableNetworkInfo info = connectivityManager.getNetworkInfo(network);;

            Log.i(LOG_TAG, "networkcallback!! " + info.getExtraInfo());

            String desiredSSID = wifiHelper.getDesiredSSID();

            if (desiredSSID != null && desiredSSID.equals(ssidWithoutQuotes(info.getExtraInfo()))) {
                ConnectivityManager.setProcessDefaultNetwork(network);
                wifiHelper.networkAvailable();
            }
        }

    }

}

You will need this permissions:

<uses-permissionandroid:name="android.permission.INTERNET" /><uses-permissionandroid:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" /><uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE" /><uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE" /><uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION" /><uses-permissionandroid:name="android.permission.CHANGE_NETWORK_STATE" /><uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permissionandroid:name="android.permission.VIBRATE"android:maxSdkVersion="18"/>

Post a Comment for "Ioexception Unable To Resolve Host,no Address Associated With Hostname"