我的应用程序需要使用互联网连接从链接下载一些文件。我有一个使用代理并需要身份验证的互联网连接。不知何故,当我尝试连接到互联网时,它从不要求此身份验证,因此无法下载文件。
我想问的是,有什么方法可以检测用户的互联网连接是否需要身份验证才能从互联网下载文件,这样如果需要,我的应用程序可以要求用户打开普通的互联网浏览器设备并提供所需的身份验证。
我的应用程序需要使用互联网连接从链接下载一些文件。我有一个使用代理并需要身份验证的互联网连接。不知何故,当我尝试连接到互联网时,它从不要求此身份验证,因此无法下载文件。
我想问的是,有什么方法可以检测用户的互联网连接是否需要身份验证才能从互联网下载文件,这样如果需要,我的应用程序可以要求用户打开普通的互联网浏览器设备并提供所需的身份验证。
这是一个非常真实的案例,当您的应用程序尝试在组织机构(例如使用代理让用户连接到 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 的按钮时(例如用户单击应用程序的“更新数据库”),我的应用程序会尝试下载该文件。我已经使用了这个问题中给出的信息(在 Android 中下载和提取 Zip 文件),然后我将下载的文件提取到解压缩位置。
在此之后,我创建了一个检查选项(已经知道 .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();
}
}