2012-06-01 27 views
2

我的应用程序需要使用互联网连接从链接下载某个文件。我有一个使用代理并需要身份验证的Internet连接。不知何故,当我尝试连接到互联网时,它从不要求这种身份验证,因此无法下载文件。如果互联网需要身份验证实际连接才能够下载?

我想问的是,有什么方法可以检测用户的互联网连接是否需要身份验证才能从互联网上下载文件,以便在需要的情况下,我的应用程序可以要求用户打开正常的设备互联网浏览器并提供想要的认证。

回答

2

这是一个非常真实的情况下,当你的应用程序试图在使用代理服务器为让用户连接到互联网的机构或公司接入互联网的一个组织体一样会引起麻烦。

由于我没有收到关于这个问题,我要告诉程序,然后我要检查这一点,因为有时你的应用程序无法访问互联网可以使死人任何回答。

起初我检查,如果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 
             } 

上面的代码通过设备的简单状态检查设备上提供了有关互联网连接是否可用没有信息,但它不能告诉检查上述条件我试图访问一个链接,下载,然后用这个逻辑之后,因此,如果互联网连接时需要验证(因此导致没有得到下载或损坏的文件或零大小的文件在下载文件位置创建)。

我已经提供了从互联网到一个小的.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(); 
      } 
     } 
+0

希望这些信息可以帮助别人:-) – Sumit

+0

如果有人仍然可以建议我一个更好的办法......我将不胜感激:-)肯定会接受,作为一个答案,如果它所服务的目的以及;-) – Sumit

相关问题