Мое приложение обращается к Интернету, чтобы загрузить файл с указанной ссылки. Я использую мое интернет-соединение в институте, которое использует настройки прокси-сервера.
Чтобы мое приложение могло загружать файл из Интернета, мне нужно открыть свой интернет-браузер, указать имя пользователя и пароль для подключения и сохранить браузер, только тогда мое приложение сможет загрузить полный файл, если я не сделайте это, мое приложение работает нормально и создает файл в нужном месте, но показывает размер файла равным нулю, что, скорее всего, связано с тем, что он не может напрямую подключиться к Интернету.
Как я могу сделать свое приложение, чтобы показать мне диалог с просьбой указать имя пользователя и пароль для подключения к Интернету, если он неспособен.
Благодаря :-)
Когда вы создаете объект соединения, через который будет осуществляться передача файла, вы должны указать, что используете любую форму учетных данных, которые ожидает прокси-сервер. Я не знаю, что вы будете делать в Java для Android, но в.NET я это делаю:
LogHandler.Log(LogHandler.LogType.Debug, "Configure proxy credentials");
// Proxy address and port
ec2Config.ProxyHost = ConfigurationManager.AppSettings["LocalProxyHost"];
ec2Config.ProxyPort = Convert.ToInt32(ConfigurationManager.AppSettings["LocalProxyPort"]);
// Create a dummy webrequest so we can set proxy credentials (to stop the proxy spitting 407s at us)
HttpWebRequest dummyRequest = (HttpWebRequest)WebRequest.Create(ec2Config.ServiceURL);
dummyRequest.Proxy.Credentials = CredentialCache.DefaultCredentials;
#pragma warning disable 168
HttpWebResponse myHttpWebResponse = (HttpWebResponse)dummyRequest.GetResponse();
#pragma warning restore 168
Я разработал эту логику, она требует много работы, но она помогает мне определить, есть ли какая-то другая проблема, например прокси-сервер или другой, поскольку обычный менеджер подключения к Интернету не может обнаружить, есть ли требование для аутентификации или нет.
final ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
final NetworkInfo activeNetwork = conMgr.getActiveNetworkInfo();
if (activeNetwork != null && activeNetwork.getState() == NetworkInfo.State.CONNECTED) {
//Do what ever you wish to do
} else {
// Display message internet connection not available
}
Вышеприведенный код дает информацию о том, доступно ли подключение к Интернету или нет, но он не указывает, требует ли интернет-соединение аутентификацию, поэтому после проверки вышеуказанного условия я пытаюсь получить доступ к ссылке для загрузки, а затем использовать эту логику.
Используемая мной логика упоминается в этом запросе stackoverflow (если интернет требует аутентификации для фактического подключения, чтобы иметь возможность скачивать?).... надеюсь, что информация помогает нуждающимся.