2012-01-23 12 views
1

インテントフィルタを使用してアプリケーション用のカスタムURLスキームを設定しました。 URLがWebViewのカスタムスキーム(mockup:// pagechange)に変更されると、インテントフィルタはアプリケーションの意図を正しくフィルタリングし、自分のアクティビティの新しいインスタンスを起動します。しかし、私が実際にやりたいことは、新しいアクティビティを起動するのではなく、インテントフィルタが既存のアクティビティ内でコードを実行することです。これは可能ですか?もしそうなら、どうすれば設定できますか?そうでない場合は、WebViewのURLが 'mockup'で始まるものに変更されたときにコードを実行するタスクを達成するための他のアイデアはありますか?新しいアクティビティを起動せずにURLを変更(カスタムスキーム)するコードを実行しています

私はインテントフィルタで他のアクションを使用しようとしましたが、URLが変更されたときに私のWebViewに表示されている "Webページを利用できません"というページが表示されました(RUNとATTACH_DATA)。また、私がここで見つけたインテント・フィルター/カスタム・スキームの質問は、カスタム・スキームでURLを使って新しいアクティビティーを開始する方法を理解することで対処するのが難しくなります。

ありがとうございます!

答えて

1

私はインテントフィルタパターンから離れるようになりました。WebViewでWebViewクライアントのWebViewClientを設定していましたので、WebViewで外部リンクのロードを処理していました。私が探しているカスタムスキームが含まれているロードされている:

WebView wv = (WebView) findViewById(R.id.app_container); 
// [other setup] 
wv.setWebViewClient(new WebViewClient() { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) 
     { 
      if(!url.contains("mockup://")) 
       view.loadUrl(url); 
      else { 
       // run "mockup"-specific code 
      } 
      return true; 
     } 
    }); 
1

まず、マニフェストにandroid:launchMode="singleTop"アクティビティ宣言を追加します。あなたの意思で、フラグFLAG_ACTIVITY_CLEAR_TOPを使用してください。 onNewIntent()コールバックで目的を取得します。

onNewIntent()で配信されるインテントは、getIntent()で返されるインテントと同じではないことに注意してください。コードの他の部分でgetIntent()を使用する場合は、onNewIntent()のインテントに対してsetIntentを使用します。

+0

launchModeオプションは確かに私が何をしたいかのように思える(活動の新しいインスタンスを起動しますが、単にメソッドを呼び出していない - onNewIntent()でこの場合)。しかし、どこでフラグを設定するのですか?私は明示的に新しいアクティビティを作成しているわけではありません.WebViewのURL変更のアクションをカスタムスキームにキャッチしようとしています。実際にはコード内にインテントオブジェクトを設定することはありません。 –

+0

もちろん、もちろんそうです。他の活動を開始することだけを目的とする新しい活動を作成してください。したがって、新しいアクティビティでは、UIを表示しないで、インテントを処理した後にstartActivityを呼び出して、トップアクティビティに転送してください。 – dhaag23

関連する問題