Androidの明示的なアクティビティ呼び出しと暗黙的なアクティビティ呼び出しの違いは何ですか?簡単な例で答えを説明すると良いでしょう。
例えば:
暗黙のアクティビティ呼び出し
インテントフィルターでは、アクティビティのアクションを作成します。これにより、他のアプリはこのアクションを介して次のようにアクティビティを呼び出すことができます。
<activity Android:name=".BrowserActivitiy" Android:label="@string/app_name">
<intent-filter>
<action Android:name="Android.intent.action.VIEW" />
<category Android:name="Android.intent.category.DEFAULT" />
<data Android:scheme="http"/>
</intent-filter>
</activity>
暗黙的なインテントを呼び出すもう1つの方法は次のとおりです。
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.example.com"));
startActivity(intent);
明示的なアクティビティ呼び出し
どのアクティビティクラスを正確に示す呼び出しを行います。
Intent intent = new Intent(this, ActivityABC.class);
i.putExtra("Value", "This value for ActivityABC");
startActivity(intent);
これが、Androidでの明示的および暗黙的なアクティビティ呼び出しの詳細を理解するのに役立つことを願っています。
Android Intent here の詳細を取得できます
明示的なインテントは、その内容に関係なく、常にターゲットに配信されます。フィルターは調べられません。ただし、コンポーネントのフィルターの1つを通過できる場合にのみ、暗黙的なインテントがコンポーネントに配信されます
明示的な意図:要求を処理できるコンポーネントがわかっている場合。そのため、そのコンポーネント名をインテントに明示的に記載します。
Intent i = new Intent(context,DetailActivity.class); // DetailActivity.class is the component name
startActivity(i);
暗黙の意図:どのアプリケーションがリクエストを処理できるかわからない場合は、アクションに言及します意図的に、どのアプリケーションがタスクに適しているかをOSに決定させます。
例:音楽を再生する
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(file);
startActivity(intent);
インテントで暗黙的な呼び出しがある場合、OSはアクションを実行し、PackageManagerを使用してすべてのアプリケーションのすべての登録済みアクティビティのすべてのインテントフィルターと一致し、結果をリストとして取り込みます。 意図的解決 と呼ばれます
したがって、リクエストを処理できるアプリケーションがデバイスで使用できない可能性があります。その場合、NullPointer Exceptionが発生します。
暗黙のインテントを呼び出すより安全な方法はこれです
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(file);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
ここで意図の解決を参照してください
http://developer.Android.com/guide/topics/intents/intents-filters.html
明示的なインテント(アクティビティ)は特定のクラスを参照し、一般に、パッケージでのみ使用できます。暗黙的インテントとは、アプリが特定の種類のデータを処理できる、または特定のサービスを提供できることをアプリが公開するインテントフィルターのことです。メールを送る。暗黙的なインテントを使用すると、ユーザーはインテントの処理に使用するアクティビティ(通常はパッケージ)を選択するか、デフォルトのハンドラーが設定されている場合は起動されます。
いずれかのインタビューで、これらの間で混乱するたびに。だから、私はこの違いを心に留めておくのに役立つかもしれません、このように要約しました。
概要:
ImplicitIntentsでは、ユーザーimplicitlyはシステムに指示します[〜#〜] what [〜#〜]は、誰を行うべきかを指定せずに行う必要があります。
ExplicitIntentsでは、ユーザーexplicitlyはシステムに指示します[〜#〜] whom [〜#〜]作品が何であれトリガーされます。
インテントには2つのタイプがあります。
明示的な意図:
インテントオブジェクトを作成する際、インテントでターゲットコンポーネント名を明示的に指定して渡しますが、これは明示的なインテントです。
暗黙的意図:
この場合、登録済みコンポーネントを評価するタスクを委任します(登録は通常、後で説明するインテントフィルターを使用して行われます)。インテントデータと目的のアクション(送信など)に基づいてAndroid電子メール、写真のキャプチャ、地図上のピン位置など)を通過します。そのためAndroidは同じアプリまたはインテントを処理できる他のアプリからコンポーネントを自動的に起動しますmessage/job。この場合のアイデアは、地図上の場所を固定する必要があるとしましょう。そのため、それを処理するために独自のアクティビティをコーディングする必要はありません。 Googleマップなどのアプリに位置データを渡すだけで、アプリの代わりに仕事をすることができます。