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"