我的应用程序需要使用互联网连接从链接下载某些文件。我有一个使用代理并需要身份验证的互联网连接。不知何故,当我尝试连接到互联网时,它从不要求此身份验证,因此无法下载文件。
我想问的是,有没有办法检测用户的互联网连接是否需要验证才能从互联网上下载文件,以便在必要时我的应用程序可以要求用户打开正常设备的互联网浏览器并提供所需的身份验证。
答案 0 :(得分:2)
这是一个非常真实的案例,当您的应用程序尝试访问组织机构中的互联网时会遇到麻烦,例如在使用代理允许用户连接到互联网的机构或公司中。
由于我没有收到任何关于这个问题的答案,我将告诉我所遵循的程序,因为有时您的申请无法访问互联网会使其死亡。
首先,我通过使用此
对设备进行简单状态检查来检查设备上是否有互联网连接 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
}
以上代码提供了有关互联网连接是否可用的信息,但无法判断互联网连接是否需要身份验证(因此无法下载或损坏文件或在下载文件位置创建零大小文件)因此,在检查上述条件后,我尝试访问下载链接,然后使用此逻辑。
我提供了一个来自互联网的小.zip文件的链接,当按下访问互联网的按钮时(例如用户点击应用程序的“更新数据库”),我的应用程序会尝试下载该文件。我已经使用了这个问题中给出的信息(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();
}
}