2

私のアプリケーションでは、リンクからファイルをダウンロードするためにインターネット接続を使用する必要があります。プロキシを使用し、認証が必要なインターネット接続があります。どういうわけか、インターネットに接続しようとすると、この認証を求められないため、ファイルをダウンロードできません。

私が尋ねたいのは、ユーザーのインターネット接続がインターネットからファイルをダウンロードするために認証を必要とするかどうかを検出する方法があるということです.必要な認証を提供します。

4

1 に答える 1

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 ファイルへのリンクを提供しました。これは、インターネットにアクセスするためのボタンが押されたときにアプリケーションがダウンロードしようとするものです (ユーザーがアプリケーションの「データベースの更新」をクリックするなど)。この質問 ( 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();
            }
        }
于 2012-06-06T10:23:49.447 に答える