次のようなURIを定義するとします。
myapp://path/to/what/i/want?d=This%20is%20a%20test
自分のアプリケーションまたはサービスで処理する必要があります。スキームは"myapp"
であり、"http"
や"ftp"
ではありません。それがまさに私が意図していることです:Android OSに対して独自のURIスキーマをグローバルに定義することです。これは可能ですか?
これは、Skype(skype://
)やトレントダウンローダープログラム(torrent://
)などのWindowsシステムなど、一部のプログラムが既に実行していることと多少似ています。
これは非常に可能です。 <data>
要素を使用して、AndroidManifest.xmlでURIスキームを定義します。 <data>
要素を入力してインテントフィルターをセットアップすると、独自のスキームを作成できます。 ( インテントフィルターとインテント解決の詳細はこちら 。)
以下に簡単な例を示します。
<activity Android:name=".MyUriActivity">
<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:scheme="myapp" Android:Host="path" />
</intent-filter>
</activity>
暗黙的なインテントがどのように機能するかによって、少なくとも1つのアクションと1つのカテゴリも定義する必要があります。ここでは、アクションとしてVIEWを選択し(何でも可能ですが)、DEFAULTカテゴリを追加するようにしました(これはすべての暗黙的なインテントに必要です)。カテゴリBROWSABLEを追加した方法にも注意してください。これは必須ではありませんが、ブラウザからURIを開くことができます(気の利いた機能)。
@ DanielLew 回答を補完して、パラメーターの値を取得するには、これを行う必要があります。
URIの例:myapp://path/to/what/i/want?keyOne=valueOne&keyTwo=valueTwo
あなたの活動で:
Intent intent = getIntent();
if (Intent.ACTION_VIEW.equals(intent.getAction())) {
Uri uri = intent.getData();
String valueOne = uri.getQueryParameter("keyOne");
String valueTwo = uri.getQueryParameter("keyTwo");
}
独自のスキームを定義しないことを強くお勧めします。これはURIスキームのWeb標準に反します。URIスキームは、異なるエンティティ間の名前の競合を避けるために、正当な理由でそれらの名前を厳密に制御しようとします。 Webサイトにスキームへのリンクを配置すると、その小さな名前がインターネットの名前空間全体に挿入され、それらの標準に従う必要があります。
独自のアプリへのリンクだけが必要な場合は、ここで説明したアプローチに従うことをお勧めします。
Android OSのブラウザーでURLを呼び出してプログラムにアクセスするためのURL名前空間(myapp://app.start/)を登録する方法
ディエゴの別の代替アプローチは、ライブラリを使用することです:
https://github.com/airbnb/DeepLinkDispatch
次のように、処理するURIと、アクティビティの注釈を通じて抽出するパラメーターを簡単に宣言できます。
@DeepLink("path/to/what/i/want")
public class SomeActivity extends Activity {
...
}
さらに、クエリパラメータもアクティビティに渡されます。
質問は何年も前に尋ねられているように、AndroidはこのURIスキームで大きく進化しています。
元のURIスキームからディープリンクまで、そして今Androidアプリリンク。
Androidは、独自のURIスキームを定義するのではなく、HTTP URLを使用することを推奨しています。 Androidアプリリンクは、所有するWebサイトドメインにリンクするHTTP URLを使用するため、他のアプリはリンクを使用できません。ディープリンクとAndroidアプリリンクの比較は here から確認できます
Android Studioオプション:[ツール]> [アプリリンクアシスタント]を使用して、URIスキームを簡単に追加できるようになりました。詳細はAndroidドキュメントを参照してください: https://developer.Android.com/studio/write/app-link-indexing.html