Android を使って作業していると、ほとんどの場合、暗黙のインテントは柔軟性があるため、適切な選択であることがわかりました。しかし、明示的な意図についてはどうでしょうか? それらを使用する利点は何ですか?それらを使用するのが良い習慣である一般的なケースは何ですか?
9 に答える
Implicit Intentsは、呼び出す必要のあるAndroidコンポーネントを直接指定するのではなく、実行するアクションを指定するだけです。Uriは、データ型を指定するための暗黙的なインテントで使用できます。
例えば
Intent intent = new Intent(ACTION_VIEW,Uri.parse("http://www.google.com"));
これにより、WebブラウザがWebページを開きます。Androidシステムは、特定のアクションとデータ型について登録されているすべてのコンポーネントを検索します。多くのコンポーネントが見つかった場合、ユーザーは使用するコンポーネントを選択できます。
明示的なインテントは、アプリケーション自体で使用され、1つのアクティビティを他のアクティビティに切り替えることができます...例Intent intent = new Intent(this,Target.class);
これにより、アクティビティが現在のコンテキストからターゲットアクティビティに切り替わります。明示的インテントを使用して、putExtra
メソッドを使用して他のアクティビティにデータを渡し、メソッドによってターゲットアクティビティによって取得することもできgetIntent().getExtras()
ます。
これがお役に立てば幸いです。
通常、独自のアプリケーション内でアクティビティを開始するために明示的なインテントを使用します。その時点で、開始するアクティビティが正確にわかっているので、暗黙のインテントを設定するという余分な作業を行う理由はありません。
KEY: 知っているときと知らないとき
明示的な意図:
Activity
どちらがリクエストを処理できる かが正確にわかっている場合は、明示的インテントを使用します。
例: リスト アクティビティがあり、リスト内の項目をクリックすると、詳細アクティビティが開きます。この場合、アイテムの詳細をアプリケーションで表示または処理できることがわかりDetailActivity.class
ます。したがって、このアクションを実行するには、クラス名を明示的に指定して Intent を作成します。
Intent showDeatil = new Intent(this,DetaiActivy.class);
startActivity(showDeatil);
暗黙の意図:
どのアプリケーションのどのアクティビティがリクエストを処理できるかわからない場合は、暗黙的インテントを使用します。
例: リンクがあります。リンクをクリックすると、一部のブラウザーで Web ページが開きます。どのアプリケーションでどのアクティビティがリクエストを処理できるか正確にはわかりません。Webページのリンクであるため、誰かがWebページを開いたときにブラウザーでWebページを開く必要があるという漠然とした考えがあります。この場合、ACTION を指定するだけで、あとは OS が処理します。
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
ボーナス:
OSはどのように決定しますか?
それには用語があります。それは意図解決と呼ばれます。
インテント解決。
OS は、インテントで指定された ACTION を取り出します。
PackageManager に入り、デバイスにインストールされているすべてのアプリケーションと一致する ACTION を持つすべての登録済みアクティビティを検索します。
一致するすべてのアプリケーションのリストをポップアップで表示します。
暗黙のインテントを記述するより安全な方法。
ACTION に一致するアクティビティがない場合もあります。この場合、NullPointerException が発生します。したがって、より好ましい方法はこれです
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
アプリケーションをそのポップアップ リスト内に入れる方法は?
ブラウザ アプリケーションを作成したとします。誰かがリンクを開いたときにアプリケーションがポップアップ リストに表示されるようにする場合。次に、インテント フィルターの AndroidManifest.xml ファイルを使用して、アクティビティをアクションに登録する必要があります。このような。
<application
..... >
......
<activity android:name=".YourBrowserActivity">
<action android:name="android.intent.action.VIEW" />
<data android:scheme="http" android:host="www.example.com" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity>
.....
</application>
Common Intent ACTIONS とその Intent-Filter リストを参照
Intent フィルターと Intent 解決の詳細
1) Explicit Intent: コンポーネント名の開発者が知っているので、Intent で指定された名前。
2) Implicit Intent: Intent でコンポーネントを指定しない。
- 暗黙のインテント - 特定のタスクを実行するインテントを通じてシステム コンポーネントを呼び出したいが、使用するコンポーネントの名前がよくわからない場合、Android システムは、タスクを実行するアプリケーションの目的のリストを表示します。
- 明示的インテント - アクティビティの完全修飾名を使用して別のアクティビティを呼び出したい場合、もちろんアクティビティの名前はわかっています。