Android上で私の非常に自身のURIスキームを実装する方法
-
20-09-2019 - |
質問
私のようなそのURIを定義したいと言います
myapp://path/to/what/i/want?d=This%20is%20a%20test
私自身のアプリケーション、またはサービスによって処理されなければなりません。スキームは"myapp"
ない"http"
、または"ftp"
であることに注意してください。 AndroidのOSのために世界的に私自身のURIスキーマを定義するには:それは私が意図するものを正確にです。これは可能でしょうか?
このようなスカイプ(skype://
)として、例えば、Windowsシステム、または任意のTorrentダウンローダプログラム(torrent://
)、いくつかのプログラムは、すでに上の何にやや似てます。
解決
これは非常に可能性があります。あなたは <data>
要素。あなたのセットアップ<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として、ここで私は(それは何でもかまいませんが)アクションとしてVIEWを選んだ、と(これは、すべての暗黙の意図のために必要とされるような)DEFAULTカテゴリを追加することを確認しました。また、私はBROWSABLEカテゴリを追加する方法に気づく - 。これは必要ありませんが、それはあなたのURIは、ブラウザ(気の利いた機能)から開放可能できるようになります。
他のヒント
href="https://stackoverflow.com/questions/2448213/how-to-implement-my-very-own-uri-scheme-on-android/2448531#2448531"> @DanielLew <答えは、あなたがこれをしなければならないparameteresの値を取得します:
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標準に反します。あなたがウェブサイト上であなたのスキームへのリンクを入れたら、あなたは全体のインターネット全体の名前空間に少し名入れていること、およびそれらの基準を次のようする必要があります。
あなたは自分自身のアプリへのリンクを持つことができるようにしたい場合は、私はあなたが私がここで説明したアプローチに従うことをお勧めします。
<のhref = "https://stackoverflow.com/questions/2430045/how-to-register-some-url-namespace-myapp-app-start-for-accessing-your-progra/2430468#2430468" >どのようにいくつかのURL名前空間(myappの://app.start/)を登録するには?AndroidのOS、ブラウザでURLを呼び出すことによって、あなたのプログラムにアクセスするためのの
ディエゴのための別の代替的なアプローチは、ライブラリを使用することです。
https://github.com/airbnb/DeepLinkDispatchする
あなたは簡単のように、あなたが扱うしたいURIとあなたが活動上の注釈を通じて抽出したいパラメータを宣言することができます
@DeepLink("path/to/what/i/want")
public class SomeActivity extends Activity {
...
}
プラスとして、クエリパラメータも同様にアクティビティに渡されます。
質問は年前に頼まれて、Androidは、このURIスキームに大きく進化していると。
オリジナルのURIスキームから、ディープリンク、そして今アンドロイドアプリのリンクへ。
Androidのは、今あなた自身のURIスキームを定義していない、HTTP URLを使用することを推奨しています。 Androidのアプリのリンクがありませんので、他のアプリがあなたのリンクを使用することはできません、あなたが所有するウェブサイトのドメインへリンクしているHTTP URLを使用しているため。あなたはここにの
からディープリンクとアンドロイドアプリリンクの比較を確認することができます今すぐ簡単にAndroidのメーカーオプションを使用して、URIスキームを追加することができます。[ツール]> [アプリケーションのリンクアシスタント。 https://developer.android:アンドロイド文書に詳細を参照してください。 COM /スタジオ/書き込み/アプリリンク-indexing.htmlする