【发布时间】:2012-06-01 04:48:41
【问题描述】:
我的应用程序需要使用互联网连接从链接下载一些文件。我有一个使用代理并需要身份验证的互联网连接。不知何故,当我尝试连接到互联网时,它从不要求此身份验证,因此无法下载文件。
我想问的是,有什么方法可以检测用户的互联网连接是否需要身份验证才能从互联网下载文件,以便在需要时我的应用程序可以要求用户打开正常的设备的互联网浏览器并提供所需的身份验证。
【问题讨论】:
标签: android
我的应用程序需要使用互联网连接从链接下载一些文件。我有一个使用代理并需要身份验证的互联网连接。不知何故,当我尝试连接到互联网时,它从不要求此身份验证,因此无法下载文件。
我想问的是,有什么方法可以检测用户的互联网连接是否需要身份验证才能从互联网下载文件,以便在需要时我的应用程序可以要求用户打开正常的设备的互联网浏览器并提供所需的身份验证。
【问题讨论】:
标签: android
这是一个非常真实的案例,当您的应用程序尝试在组织机构(例如使用代理让用户连接到 Internet)的机构或公司中访问 Internet 时,会导致麻烦。
由于我没有收到关于这个问题的任何答案,我将告诉我检查这个问题所遵循的程序,因为有时你的应用程序无法访问互联网可能会导致它死机。
首先,我通过使用此设备的简单状态检查来检查设备上的互联网连接是否可用
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
}
上面的代码提供了有关互联网连接是否可用的信息,但它无法判断互联网连接是否需要身份验证(因此导致没有下载或损坏的文件或在下载文件位置创建零大小文件) ,因此在检查上述条件后,我尝试访问下载链接,然后使用此逻辑。
我提供了一个来自 Internet 的小 .zip 文件的链接,当按下访问 Internet 的按钮时(例如用户单击应用程序的“更新数据库”),我的应用程序会尝试下载该文件。我使用了这个问题中给出的信息(Download and Extract Zip File in Android),然后将下载的文件解压缩到解压位置。
在此之后,我创建了一个检查选项(已经知道 .zip 文件中存在的文件的确切名称),它检查该文件是否是在我解压缩时提到的解压缩位置创建的。
如果文件不存在,您只需给他们一个选项来打开浏览器并提供身份验证,然后像这样返回到您的应用程序:
private void unableToConnectToInternetDialog() {
// TODO Auto-generated method stub
String Message ="CHECK IF:" +
"your internet connection uses proxy, if yes please follow these steps:" +
"\n 1 Open default Internet Browser" +
"\n 2 Open any webpage requiring authentication" +
"\n 3 Provide the authentication" +
"\n 4 Resume this application";
// TODO Auto-generated method stub
AlertDialog.Builder builderInternet = new AlertDialog.Builder(AppPage1.this);
builderInternet.setMessage(Message)
.setTitle("Unable to connect to Internet")
.setCancelable(false)
.setPositiveButton("Open Browser", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// Opening mobile's default browser to set the authentication
String url = "http://www.google.com";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
}
})
.setNegativeButton("Skip Update", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// Do the needful
}
});
builderInternet.create().show();
}
}
【讨论】: