質問

Androidを使用して、ほとんどの場合、暗黙の意図が柔軟性のために良い選択であることに気付きました。しかし、明示的な意図は何ですか?それらを使用することの利点は何ですか?それらを使用することが良い習慣である場合、一般的なケースは何ですか?

役に立ちましたか?

解決

暗黙の意図は、呼び出されるべきAndroidコンポーネントを直接指定するのではなく、実行するアクションのみを指定します。 URIは、データ型を指定するための暗黙の意図で使用できます。

例えば

Intent intent = new Intent(ACTION_VIEW,Uri.parse("http://www.google.com"));

これにより、WebブラウザはWebページを開きます。 Androidシステムは、特定のアクションとデータ型に登録されているすべてのコンポーネントを検索します。多くのコンポーネントが見つかった場合、ユーザーは使用するコンポーネントを選択できます。

明示的な意図は、あるアクティビティが他のアクティビティに切り替えることができるアプリケーション自体で使用されます...例 Intent intent = new Intent(this,Target.class); これにより、現在のコンテキストからターゲットアクティビティへのアクティビティの切り替えが発生します。明示的な意図を使用して、データを他のアクティビティに渡すこともできます putExtra メソッドとターゲットアクティビティによって取得されました getIntent().getExtras() 方法。

これが役立ったことを願っています。

他のヒント

通常、独自のアプリケーション内でアクティビティを開始するために明示的な意図を使用します。その時点で、どのアクティビティを開始したいかを正確に知っているので、暗黙の意図を設定する余分な作業を経験する理由はありません。

  1. 明示的な意図は、特定のコンポーネントを呼び出すために使用されます。どのコンポーネントを起動するかを知っていて、使用するコンポーネントをユーザーに無料制御に提供したくない場合。たとえば、2つのアクティビティがあるアプリケーションがあります。アクティビティAおよびアクティビティB。アクティビティAからアクティビティBを起動したいA。この場合、ActivityBをターゲットとする明示的な意図を定義し、それを使用して直接呼び出します。

  2. 暗黙の意図は、あなたが何をしたいのかを知っているときに使用されますが、どのコンポーネントを起動すべきかわかりません。または、使用するコンポーネントのリストを選択するオプションをユーザーに提供する場合。これらの意図がAndroidシステムに送信される場合、特定のアクションとデータ型に登録されているすべてのコンポーネントを検索します。 1つのコンポーネントのみが見つかった場合、Androidはコンポーネントを直接起動します。たとえば、カメラを使用して写真を撮るアプリケーションがあります。アプリケーションの機能の1つは、ユーザーが撮影した写真を送信する可能性をユーザーに提供することです。ユーザーが写真を送信できるアプリケーションの種類を知りません。また、ユーザーが複数の場合に使用する外部アプリケーションを選択するオプションを提供したいと考えています。この場合、明示的な意図は使用しません。代わりに、Action_Sendにアクションが設定されている暗黙の意図と、写真のURIに追加されたデータを使用する必要があります。

    明示的な意図は、何が含まれていても、常にターゲットに配信されます。フィルターは相談されません。しかし、暗黙の意図はコンポーネントの1つを通過できる場合にのみコンポーネントに配信されます

1)明示的な意図:コンポーネント名開発者は、意図で指定された名前を知っています。

2)暗黙的な意図:意図のコンポーネントを指定していません。

キー:あなたが知っていて、あなたが知らないとき

明示的な意図:

どちらを正確に知っている場合は、明示的な意図を使用します Activity リクエストを処理できます。

例:リストアクティビティがあり、リスト内のアイテムをクリックすると、詳細アクティビティが開きます。この場合、あなた 知る アイテムの詳細がによって表示または処理できること DetailActivity.class あなたのアプリケーションの。したがって、このアクションを実行するには、クラス名を明示的に指定することにより、意図を作成します。

Intent showDeatil = new Intent(this,DetaiActivy.class);  
startActivity(showDeatil);

暗黙の意図:

どのアプリケーションがリクエストを処理できるかがわからない場合は、暗黙の意図を使用してください。

例:リンクがあります。リンクをクリックすると、一部のブラウザでWebページを開く必要があります。君 わからない アプリケーションがリクエストを処理できるアクティビティ。 Webページリンクであるという漠然とした考えがあるので、誰かが開いたときにあるブラウザでWebページを開く必要があります。この場合、アクションを指定するだけで、OSは残りの世話をします。

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);

ボーナス:

OSはどのように決定しますか?

それの用語があります。それは意図的な解像度と呼ばれています。
意図的な解決策。

  • OSは、意図で指定されたアクションを取り出します。

  • PackageManagerに参加し、デバイスにインストールされているすべてのアプリケーションが一致するアクションを使用して、登録されたすべてのアクティビティを探します。

  • ポップアップ内のすべてのマッチングアプリケーションのリストを表示します。

暗黙の意図を書くためのより安全な方法。

アクションと一致するアクティビティがない可能性があります。この場合、nullpointerexceptionを取得します。より好ましい方法はこれです

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
if (intent.resolveActivity(getPackageManager()) != null) {
    startActivity(intent);
}

アプリケーションをそのポップアップリスト内に入れるにはどうすればよいですか?

ブラウザアプリケーションを書いたとしましょう。誰かがリンクを開いたときに、アプリケーションをポップアップリストに表示したい場合。次に、Intent Filters 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>

参照
共通の意図アクションとその意図フィルターリスト
意図のフィルターと意図解像度の詳細

から ドキュメント:

意図には2つのタイプがあります。

  • 明示的な意図 名前(完全に適格なクラス名)で始めるためにコンポーネントを指定します。通常、明示的な意図を使用して、自分のアプリでコンポーネントを起動するために、開始したいアクティビティまたはサービスのクラス名を知っているためです。たとえば、ユーザーアクションに応じて新しいアクティビティを開始するか、バックグラウンドでファイルをダウンロードするサービスを開始できます。
  • 暗黙の意図 特定のコンポーネントに名前を付けるのではなく、代わりに実行する一般的なアクションを宣言します。これにより、別のアプリからコンポーネントが処理できます。たとえば、ユーザーにマップ上の場所を表示する場合は、暗黙の意図を使用して、別の有能なアプリにマップ上に指定された場所を表示するように要求できます。
  1. 暗黙的な意図 - 特定のタスクを実行する意図を通じてシステムコンポーネントを呼び出したい場合、使用するコンポーネントの名前が本当にわからない場合、Androidシステムには、タスクを実行するための目的のアプリケーションのリストが表示されます。
  2. 明示的な意図 - アクティビティの完全な名前を持つ別のアクティビティを呼び出したい場合、そしてもちろんアクティビティの名前を知っています。

単に、このような両方の意図を説明できます。

明示的な意図: それらは、単一のアプリケーションで2つのアクティビティ間の通信に使用されます。

例:2つのフィールド(ユーザー名とパスワードなど)で構成されるログインページを持つアプリケーションを検討してください。どちらもTrueの場合、以前に入力したユーザー名フィールドを表示するページに導かれます。この場合、明示的な意図を使用します。アクティビティを変更し、同じアプリケーションで1つのアクティビティから他のアクティビティ(ユーザー名フィールド)にデータを伝達する必要があります。

暗黙的な意図: これらは、異なるアプリケーションの2つのアクティビティ間の通信に使用されます。

例:事故のビデオが録音され、Facebookにアップロードされる事故について説明するニュースアプリを検討してください。ニュースアプリで指定されたリンクをクリックしている間、Facebookに導きます。この場合、ニュースアプリのアクティビティとFacebookアプリのアクティビティとの間にあります。この目的のために、暗黙の意図を使用します。

私はあなたが理解できることを願っています。

暗黙の意図

  • どのアプリケーションがプルアップするかを指定することなく、新しいアプリケーションを引き上げます。
  • 実行するアクションのみを指定し、Androidコンポーネントを直接指定しません。
  • URIは、データのタイプを指定するための暗黙の意図で使用できます。

明示的な意図

  • 特定のアプリケーションをプルアップし、コードの作成中に設定されます。
  • 1つのアクティビティが他のアクティビティに切り替えることができるアプリケーション自体で使用されます。
  • Put Extra Methodを使用してデータを他のアクティビティに渡すために使用され、ターゲットアクティビティGetIntent()によって取得されます。
  • 常にターゲットに配信されます。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top