web-dev-qa-db-ja.com

カスタムの起動Android Android browser / Chrome

まず、私の質問は thisthis 、および this に非常に似ています。 Android私が達成しようとしているドキュメントは here です。これらのリソースを使用してこれを機能させることができなかったので、重複としてマークしないでください。そうではありません。

WebサイトとAndroidアプリケーションがあります。ユーザーは http://mywebsite.com/map/ のようなリンクを含むQRコードをスキャンできます。ユーザーがこのリンクを開こうとすると、Androidを選択して、アプリケーションを使用してそのリンクを開くことを選択できる選択ダイアログを表示します。アプリケーションがインストールされていない場合は、指定されたウェブサイト。

Chromeは、ユーザーがそのアドレスに移動したときに選択ダイアログを開くことでこれを許可します。たとえば、Chromeで Stack Exchangeアプリ をダウンロードしてこの質問に移動してみてくださいこれは次のように表示されます。

Screenshot of chooser dialog.

上記の回答の提案に従って、AndroidManifest.xmlに次のコードを追加しました。

<intent-filter>
    <action Android:name="Android.intent.action.VIEW" />
    <action Android:name="Android.intent.action.SEND" />

    <category Android:name="Android.intent.category.DEFAULT" />
    <category Android:name="Android.intent.category.BROWSABLE" />

    <data
        Android:Host="mywebsite.com"
        Android:path="/map"
        Android:scheme="http" />
    <data
        Android:Host="mywebsite.com"
        Android:path="/animals"
        Android:scheme="http" />
    <data
        Android:Host="mywebsite.com"
        Android:path="/articles"
        Android:scheme="http" />
</intent-filter>

また、Android:mimeType = "text/plain"をデータに追加しようとしましたが、役に立ちませんでした。

問題は、 http://mywebsite.com/map または http://mywebsite.com/map/ にアクセスすると= Chromeは、選択ダイアログを表示せずにWebページを開くだけです。

言及したいと思います:

  • Androidドキュメンテーションに続いて、AndroidManifest.xmlのアクティビティ構造の1つにこのコードを追加しました。これを追加するのに最適な場所かどうかわからないので、追加しようとしましたアプリケーション構造の外側で、アプリケーション構造の直接内部にありますが、機能しませんでした
  • これが機能するために実装した唯一のコードです。他に何かが必要な場合はお知らせください。私が理解していることから、カスタムスキーマを使用する場合にのみ、ウェブページにhrefを追加する必要があります
  • これを達成するためにカスタムスキーマを使用したくない
  • Nexus 4で開発中ですAndroid 4.4.2(最新)
28

次のように設定する必要があります。

<intent-filter>
        <action Android:name="Android.intent.action.VIEW" />

        <category Android:name="Android.intent.category.DEFAULT" />
        <category Android:name="Android.intent.category.BROWSABLE" />

        <data
            Android:Host="example.com"
            Android:pathPrefix="/someresource/"
            Android:scheme="http" />
        <data
            Android:Host="www.example.com"
            Android:pathPrefix="/someresource/"
            Android:scheme="http" />
    </intent-filter>

あなたの場合、Android:pathの代わりにAndroid:pathPrefixを使用する必要があることに注意してください。

61
AndroidGecko

念のため、誤って選択ダイアログを表示するのではなく、常にchromeでリンクを開くように設定した場合に備えて、アプリの設定をリセットする必要があります。一致するuriを開くと、セレクタは表示されません。

次に、インテントフィルターに必要な数のデータ要素を含めることができますが、情報を繰り返す必要はありません。次のような同じことを行うことができます。

<data Android:Host="mywebsite.com"/>
<data Android:scheme="http"/>
<data Android:path="/map"/>
<data Android:path="/animals"/>
<data Android:path="/articles"/>

ただし、パスにはワイルドカードを使用できます

<data Android:path="/.*"/>

追加することを検討してください

<data Android:Host="www.mywebsite.com"/>

最後に、選択ダイアログを表示せずに、特定のアプリのインテント/アクティビティを直接開きたい場合があります。ウェブサイトでAndroidユーザーエージェントを検出した場合、次の方法でリンクURLを作成できます。

<a href="intent://mywebsite.com/articles#Intent;package=com.myapp;scheme=http;end;"/>

詳細についてはこちらをご覧ください AndroidでWebブラウザー(Chrome)からアプリを開くにはどうすればよいですか? A Hrefリンクで何をしなければなりませんか?

この方法では、アプリがインストールされていない場合、ユーザーは指定されたアプリパッケージのGoogle Playストアに移動します。

それでも問題が解決しない場合は、意図フィルターの優先順位を確認してください。 http://developer.Android.com/guide/topics/manifest/intent-filter-element.html

6
Eric Woodruff

私の場合、サイトのURLは次のとおりです:http://www.example.org/mobile/

これらのコードをAndroidManifest.xml内のactivityに入れます

            <intent-filter>
                <action Android:name="Android.intent.action.VIEW" />

                <category Android:name="Android.intent.category.DEFAULT" />
                <category Android:name="Android.intent.category.BROWSABLE" />

                <data
                    Android:Host="www.example.org"
                    Android:pathPrefix="/mobile/"
                    Android:scheme="http" />
            </intent-filter>

ここに、

scheme->特定のサイトのプロトコル

Host->[〜#〜] www [〜#〜]を含む正確なサイトURL

pathprefix->利用可能な場合、サイトのサブパス

さて、

chrome/etc Android browser'search box likeexampleを選択し、選択したダイアログを開きます.. !!

3
Dhruv Raval