Androidインターフェースコール:URL Scheme
6402 ワード
Android開発では、異なるActivity間のジャンプと切り替えが一般的であり、アプリの内容がより豊富になり、機能が多様になるが、1つのアプリケーションに含まれる機能は限られており、アプリケーションで微信決済のページにジャンプしたり、サードパーティのアカウントでログインしたりする際にQQログインにジャンプしたりするなど、多くのシーンでアプリケーション間呼び出しが必要である.このような場合、スキップするActivityまたはApplicationはサードパーティが開発したものであり、どのActivityに具体的にスキップするか、または直接スキップするかは安全ではない可能性が高い.これらの問題は、アプリケーション間呼び出し時に周到に考慮される必要がある.この問題をよりよく解決するために、AndroidのURL Schemeプロトコルについてご紹介します
URL Schemeの概要
AndroidのカスタムURL Schemeは、ページ内ジャンププロトコルであり、URLRouterとも呼ばれ、明示的なIntent方式で直接ジャンプするのではなく、ページを開くようにルーティングを通じてActivityを開くことです.このような暗黙的なintentの方法のジャンプのメリットは以下の通りです.結合性を低下させる:具体的にどのインタフェースをジャンプするかを知る必要はなく、需要に応じて、約束されたURLルーティングプロトコルに従ってIntentを送信すればよい. より安全:Intentジャンプを表示せず、プロトコルに合致するIntentであれば対応するActivityがマッチングし、表示されないページにジャンプすることを避ける. より柔軟:より広範な応用シーンがあり、シーンの中でURL Scheme を使用することができます.サーバはジャンプパスを発行し、クライアントはサーバのジャンプパスに従って対応するページ をジャンプする. H 5ページアンカーポイントをクリックし、アンカーポイントの具体的なジャンプパスAPP端に基づいて具体的なページ をジャンプする. APP側はサーバ側から送信されたPUSH通知欄のメッセージを受け取り、メッセージのクリックジャンプ経路に従って関連ページ をジャンプする. APPはURLに従って別のAPP指定ページ にジャンプする.
URL Schemeプロトコルフォーマット
前述したように、URL Schemeは、ウェブページを開くようにルーティングを通じてActivityを開き、そのプロトコルフォーマットは私たちがウェブページを開いて入力したウェブサイトと似ています.
完全な完全なURL Schemeプロトコルフォーマットは、scheme、host、port、path、queryから構成され、以下のように構成されています.
://:/?
このうちschemeはAndroidでよく見られるプロトコルでも、カスタマイズされたプロトコルでもあります.Androidでよく見られるプロトコルにはcontentプロトコル、httpプロトコル、fileプロトコルなどがあり、カスタムプロトコルはカスタム文字列を使用することができ、サードパーティのアプリケーションを起動するときにカスタムプロトコルを使用することが多い.
以下にカスタムプロトコルのURIを示します.
xl://goods:8888/goodsDetail?goodsId=10011002
上のパスでScheme、Host、port、path、queryをすべて含みます. xl、すなわちSchemeであり、このSchemeプロトコル名 を表す goods、すなわちHostは、Schemeがどのアドレスドメインに作用するかを表す である. 8888、すなわちportであり、この経路を表すポート番号 である. goodsDetail、すなわちpathであり、Schemeが指定したページ を表す goodsId、すなわちqueryであり、伝達されたパラメータ を表す
URL Schemeの使い方
URL Schemeの使用方法は簡単に言えば、まずmanifestにScheme方式の起動を受け入れるactivityを配置することである.呼び出しが必要な場合は、SchemeプロトコルのURiをデータとしてIntentに追加し、activityを暗黙的に呼び出します.
1). AndroidManifestでxmlでのラベル追加設定Scheme
上記の設定では、MainActivityには複数の設定が含まれています.最初は通常の起動、つまりアプリケーションリストで起動します.2つ目はURL Scheme方式で起動し、それ自体も暗黙的なIntent呼び出しの一種であり、属性を追加し、その受け入れURL Schemeプロトコルフォーマットをuと定義するのとは異なる.rlschemel://auth_activity
ここで説明する必要があるのは、URL Schemeプロトコルフォーマットでは、URIを構成するこれらの属性はラベルではオプションであるが、以下の依存関係がある. schemeが指定されていない場合、hostパラメータは 無視されます. hostが指定されていない場合、portパラメータは 無視されます. schemeとhostが指定されていない場合、pathパラメータは 無視されます.
intentオブジェクトのUriパラメータをintent-filterのラベルで指定されたURI形式と比較すると、intent-filterのラベルで指定された部分のみを比較します.たとえば、次のようにします. intent-filterでschemeのみが指定されている場合、sheme付きURIはすべてintent-filterに一致します. intent-filterでschemeとauthority(authorityはhostとportの2つの部分を含む)のみが指定されてpathが指定されていない場合、pathの値を考慮することなく、同じschemeとauthorityを持つURIすべてがintent-filterに一致する. intent-filterでscheme、authority、pathが同時に指定されている場合、intent-filterに一致するのは、同じscheme、authority、pathを持つURIのみです.
注意すべきは、intent-filterのラベルがpathの値を指定するときに、ワイルドカード*を使用して部分的に一致する効果を果たすことです.
2). URLを使用してActivityを起動
もちろんWebページで呼び出すことができます
あるいはJSで呼び出す
3.)URL Schemeが有効かどうかをどう判断するか
Home LauncherでサブAPPを非表示にする
いくつかの補助的で独立したAPPをHome Launcherに隠す必要があり、特定のAPP呼び出しのみを許可する場合があります.このとき、URL Schemeプロトコルを利用してAndroidManifestを設定することができます.xmlのラベルは次のとおりです.
Home LauncherにリストされているアプリケーションアイコンはActivityと同時に満たす必要があるため
上記の構成では余分なcategoryとdata制限が存在するため、一致せず、Home Launcherには現れませんが、URL Schemeを使用して起動できます.
これにより、一連のAPPに統一的なエントリを設定し、実際のニーズに応じて異なるサブAPPを呼び出すことができます.いわゆるAPP業務のコンポーネント化であり、URL Schemeはその中で重要な役割を果たしています.
参考文献:http://blog.csdn.net/iispring/article/details/48481793 http://blog.csdn.net/hb707934728/article/details/53196419 http://www.cnblogs.com/whoislcj/p/5825333.html
URL Schemeの概要
AndroidのカスタムURL Schemeは、ページ内ジャンププロトコルであり、URLRouterとも呼ばれ、明示的なIntent方式で直接ジャンプするのではなく、ページを開くようにルーティングを通じてActivityを開くことです.このような暗黙的なintentの方法のジャンプのメリットは以下の通りです.
URL Schemeプロトコルフォーマット
前述したように、URL Schemeは、ウェブページを開くようにルーティングを通じてActivityを開き、そのプロトコルフォーマットは私たちがウェブページを開いて入力したウェブサイトと似ています.
完全な完全なURL Schemeプロトコルフォーマットは、scheme、host、port、path、queryから構成され、以下のように構成されています.
://:/?
このうちschemeはAndroidでよく見られるプロトコルでも、カスタマイズされたプロトコルでもあります.Androidでよく見られるプロトコルにはcontentプロトコル、httpプロトコル、fileプロトコルなどがあり、カスタムプロトコルはカスタム文字列を使用することができ、サードパーティのアプリケーションを起動するときにカスタムプロトコルを使用することが多い.
以下にカスタムプロトコルのURIを示します.
xl://goods:8888/goodsDetail?goodsId=10011002
上のパスでScheme、Host、port、path、queryをすべて含みます.
URL Schemeの使い方
URL Schemeの使用方法は簡単に言えば、まずmanifestにScheme方式の起動を受け入れるactivityを配置することである.呼び出しが必要な場合は、SchemeプロトコルのURiをデータとしてIntentに追加し、activityを暗黙的に呼び出します.
1). AndroidManifestでxmlでのラベル追加設定Scheme
上記の設定では、MainActivityには複数の設定が含まれています.最初は通常の起動、つまりアプリケーションリストで起動します.2つ目はURL Scheme方式で起動し、それ自体も暗黙的なIntent呼び出しの一種であり、属性を追加し、その受け入れURL Schemeプロトコルフォーマットをuと定義するのとは異なる.rlschemel://auth_activity
ここで説明する必要があるのは、URL Schemeプロトコルフォーマットでは、URIを構成するこれらの属性はラベルではオプションであるが、以下の依存関係がある.
intentオブジェクトのUriパラメータをintent-filterのラベルで指定されたURI形式と比較すると、intent-filterのラベルで指定された部分のみを比較します.たとえば、次のようにします.
注意すべきは、intent-filterのラベルがpathの値を指定するときに、ワイルドカード*を使用して部分的に一致する効果を果たすことです.
2). URLを使用してActivityを起動
Uri data = Uri.parse("urlschemel://auth_activity");
Intent intent = new Intent(Intent.ACTION_VIEW,data);
// APP , APP APP
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
try {
startActivityForResult(intent, RESULT_OK);
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(MainActivity.this, " APP, ",Toast.LENGTH_SHORT).show();
}
もちろんWebページで呼び出すことができます
しいアプリケーションを く
あるいはJSで呼び出す
window.location = "urlschemel://auth_activity";
3.)URL Schemeが有効かどうかをどう判断するか
boolean checkUrlScheme(Intent intent){
PackageManager packageManager = getPackageManager();
List activities = packageManager.queryIntentActivities(intent, 0);
return !activities.isEmpty();
}
Home LauncherでサブAPPを非表示にする
いくつかの補助的で独立したAPPをHome Launcherに隠す必要があり、特定のAPP呼び出しのみを許可する場合があります.このとき、URL Schemeプロトコルを利用してAndroidManifestを設定することができます.xmlのラベルは次のとおりです.
Home LauncherにリストされているアプリケーションアイコンはActivityと同時に満たす必要があるため
上記の構成では余分なcategoryとdata制限が存在するため、一致せず、Home Launcherには現れませんが、URL Schemeを使用して起動できます.
Uri data = Uri.parse("urlschemel://auth_activity");
Intent intent = new Intent(Intent.ACTION_MAIN,data);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
これにより、一連のAPPに統一的なエントリを設定し、実際のニーズに応じて異なるサブAPPを呼び出すことができます.いわゆるAPP業務のコンポーネント化であり、URL Schemeはその中で重要な役割を果たしています.
参考文献:http://blog.csdn.net/iispring/article/details/48481793 http://blog.csdn.net/hb707934728/article/details/53196419 http://www.cnblogs.com/whoislcj/p/5825333.html