2016-01-02 15 views
16

私はこのコードを持っている:URLのリダイレクト - (ページが見つかりませんエラー)

Button bluehost = (Button)findViewById(R.id.bluehost); 
bluehost.setOnClickListener(new Button.OnClickListener() 
{ 
    public void onClick(View v) 
    { 
     Intent browserIntent = new Intent(Intent.ACTION_VIEW, 
       Uri.parse("https://www.bluehost.com/track/businessplan/")); 
     startActivity(browserIntent); 
    } 
}); 

技術を、このコードは、この特定のURLそのURLに人を送るために動作しますが、何らかの理由このコードでは見つからないページに移動しますが、このURLをブラウザに挿入するとレンダリングされます。しかし、アプリケーションから完了すると、ページが見つかりません。私はAndroid Safariブラウザでテストしています。

URLのリダイレクトのためですか?どうすればこの問題を解決できますか?

私は私のマニフェストファイルに次の行を持っている:

<uses-permission android:name="android.permission.INTERNET" /> 

注:

インターネット接続は問題ではありません。このコードは他のURLでも有効です。この特定のリンクで起こっていることは、奇妙なことです。

ありがとうございます!

+0

..私は私の元の質問を更新し@AvijitKarmakar –

+0

をマニフェストファイルのコードを投稿してください。あなたが興味を持ったこの許可はありましたか? – Genadinik

+0

私は –

答えて

5

私の答えのコードと対応するリダイレクトが私のために働いた。このように私のXperia Zウルトラオン

は、それが見えます:

公式のAndroid documentationによると、それはまた、19 以下、以前のAPIレベルで動作するはずです私はクロームのドキュメントが最小APIレベルを述べた仮定しましたHTML5の機能を使用したいWeb開発者を対象としていたからです。それはキットカットの古いイメージをエミュレートネクサスS(上を動作しません - 言われて、このソリューションは私の古いスプリントXPRT(APIレベル10のAndroid 2.3.5)でに動作しないこと

それに)。それは"ウェブページが見つかりません"両方の上にあると言う。そして私がXPRTでブラウザを使ってさらに試してみたところ、手作業でURLを入力したとき、「安全な接続が確立できませんでした」というダイアログが表示されます。残念ながら、httpsで 's'を削除しても、セキュアバージョンにリダイレクトされるため、「安全な接続を確立できませんでした」というメッセージが表示されるため、削除することもできません。

以前の回答:あなたはそのクロームのWebView tutorialが正確に従っている場合

。あなたはこの部分に行くでしょう。 太字のの強調は私のものです。

取り扱いナビゲーション

http://www.html5rocks.com/に、あなたがロードしているURLを変更してみてくださいし、アプリケーションを再実行します。あなたは 何か変なことに気づくでしょう。

あなたはhtml5rocks.com のようなリダイレクトを持つサイトで今すぐアプリケーションを実行する場合は、あなたのアプリが デバイスのブラウザでサイトを開いてしまい、ないあなたのWebViewで - おそらくない何期待される。WebViewがナビゲーションイベントを処理する方法のため、これは です。ここで

は、一連のイベントです:

  1. のWebViewは、リモートサーバーから元のURLをロードしよう、と は新しいURLへのリダイレクトを取得します。

  2. ので、システムは、URL ナビゲーションを処理する場合、システムが それ以外のWebViewが内部をナビゲートします、URLのビューの意図を扱うことができる場合WebViewのチェックは(すなわち ユーザーは何のブラウザは、自分のデバイスにインストールしていません) 。 - 、ユーザーのデフォルトブラウザで// URLスキーム:

  3. システムは、HTTPを処理するための ユーザの好みのアプリケーションを選びます。複数のブラウザ がインストールされている場合、この時点でダイアログが表示されることがあります。言い換えれば

あなたはこの時点でチュートリアルを停止した場合、あなたが望む行動を取得します。ここで

そのチュートリアルにlinkた場合の実際のコードは動作を停止している:

MainActivity.java

これを読んで他の誰のためにも
public class MainActivity extends Activity { 

private WebView mWebView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mWebView = (WebView) findViewById(R.id.activity_main_webview); 
     mWebView.loadUrl("https://www.bluehost.com/track/businessplan/"); 
    } 

    @Override 
    public void onBackPressed() { 
     if(mWebView.canGoBack()) { 
      mWebView.goBack(); 
     } else { 
      super.onBackPressed(); 
     } 
    }  
} 

activity_main.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity"> 
    tools:ignore="MergeRootFrame"> 

     <WebView 
     android:id="@+id/activity_main_webview" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
</FrameLayout> 

、私はマニフェストに必要なインターネットの許可を言及していない元の人が既にその部分のコヴェルを持っているのでd。

+0

@stephen Branczyk wow驚くべき答えです。そして、私は以前のバージョンのAndroidで動かす必要があります。どうすればいいのか説明できますか?ありがとうございました! – Genadinik

+0

好奇心が強いのですが、ユーザーのOSを確認して、両方のバージョンのコードを実行する方法はありますか?人々の一部に新しい方法を使用させる利点がありますか? – Genadinik

+0

実際には、最小sdkバージョンに関する部分を忘れてしまいます。私は、公式のドキュメントを使用してソリューションを書き直していましたが、私は同じ正確なコードで終わりました。また、私はチュートリアル全体からコードをコピーしていたので、あまりにも多くのコードを提供していました。明らかに、カスタムWebViewClientを記述する必要はありません。なぜなら、WebViewClientは、アプリケーションのために保持したいと思う動作を削除するからです。 –

2

Android Safariブラウザでページが見つからないというエラーが表示された場合は、多くの端末が持っているクロムブラウザでリンクを開き、選択したブラウザでリンクを開くブラウザアプリケーションを選択するオプションをユーザに与えます。

Google Chromeブラウザにリンクするには、端末にイ​​ンストールされているかどうかを確認する必要があります。そのために、このメソッドを使用して、Chromeブラウザがインストールされているかどうかを確認できます。

private boolean isPackageInstalled(String packagename, Context context) { 
    PackageManager pm = context.getPackageManager(); 
    try { 
     pm.getPackageInfo(packagename, PackageManager.GET_ACTIVITIES); 
     return true; 
    } catch (PackageManager.NameNotFoundException e) { 
     return false; 
    } 
} 

クロムブラウザのpackge名はcom.android.chromeです。あなたは、このように作成できるアプリケーションを選択するようにユーザーに選択肢を示すbrowserIntent.setPackage("com.android.chrome");

を使用して、パッケージ名としてこれを設定する必要があります。

Intent chooserIntent = Intent.createChooser(browserIntent, "Select Application"); 
startActivity(chooserIntent); 
ここ

はあなたの最終的なコードは次のとおりです。

Intent browserIntent = new Intent(Intent.ACTION_VIEW, 
        Uri.parse("https://www.bluehost.com/track/businessplan/")); 
boolean isChromeInstalled = isPackageInstalled("com.android.chrome", YourActivityName.this); 
if (isChromeInstalled) { 
    browserIntent.setPackage("com.android.chrome"); 
    startActivity(browserIntent); 
}else{ 
    Intent chooserIntent = Intent.createChooser(browserIntent, "Select Application"); 
    startActivity(chooserIntent); 
} 

しかしノートブラウザアプリケーションを選択するオプションを指定すると、Safariブラウザも表示されます。

またはStephan Branczyk

によって答えとしてあなたも、私はこれがあなたの役に立てば幸いWebviewを使用するオプションを持つことができます。

+0

これは非常に良いです - ありがとう – Genadinik

0

ブラウザには特定のバグがあります。

Google Chrome、Opera、Firefox、Safari、およびInternet Explorerのブラウザ の近代的なバージョンには、SPDYとHTTP/2のサポートが制限されています。 SPDYをサポートするブラウザは はHTTP/2をサポートするブラウザをご覧ください。

すべてのブラウザは、TLS接続を介してSPDYとHTTP/2のみをサポートしています。 したがって、HTTPSを使用してSPDYまたはHTTP/2を活用する必要があります。

クロムブラウザでリンクを試すと「Webページが利用できません」と表示されます。しかし、私がオペラブラウザで同じことをしようとすると、それが開きます。

Chromeブラウザでは、「ERR_SPDY_PROTOCOL_ERROR」と表示されます。私はサーフ中に と言いますが、それはChromeブラウザ 自体にバグです。 可能な解決策の一つは、最新バージョンにあなたの携帯電話で利用可能なブラウザを更新してみます回避策この文献に記載さ link

  1. を試してみることです。

  2. 実際のサイトはメンテナンスのためにダウンしている可能性があります。

  3. あなたが "あなたの携帯電話でのavastのApp" をインストールした場合は、Chromeで

  4. SPDYセッションがURIを経由して検査することができるリンクを追加しよう:クローム://ネット-内部/#イベント& Qは=次のように入力します。SPDY_SESSION%20is:active。

    フォースSPDYオーバーSSL偽:

    有効SPDY:真

    使用代替プロトコル:常に

    フォースSPDY真 あなたはそこにこのような何かを見つけるかもしれない真の

    次プロトコル:http/1.1、spdy/2、spdy/3

"SPDY Enabled"オプションをfalseに設定した場合、それ以降は問題が解決され、Web通信にHTTPが使用されます。

  1. モバイルにavastアプリケーションをインストールした場合、avastで問題が発生することがあります。 [設定]> [アクティブな保護]> [Webシールドのカスタマイズ]> [除外]> [あなたのリンクをここに追加]に移動します。

うまくいけば、それはいくつかのケースでは..あなたを助けるかもしれない!!。私の悪い英語のために申し訳ありません。

ソースはインターネットから収集されました。

0

あなたのコードは、リダイレクトが動作しない場合は、間違いなく、問題はあなたのコードではありませんが、デバイスのブラウザでURLを開くです。ウェブサイトのリダイレクトが機能していないか、使用しているブラウザがこのリダイレクトを実行できない可能性があります。あなたの場合、あなたが使用しているブラウザはリダイレクトを実行できないと思います。

関連する問題