Androidテント
12751 ワード
テント
Androidアプリケーションは4つのコンポーネント(アクティブ、ブロードキャストトランシーバ、サービス、コンテンツジェネレータ)を使用して開発され、コアクラスはIntentです.コンテンツは、「コンポーネントを実行するためにシステムに渡されるメッセージ」として定義できます.これは、実行機能の関数を提供するクラスではなく、データを含むクラスです.このデータは、実行構成部品の情報です.この情報を含むコンテンツ・オブジェクトをシステムに渡すと、構成部品が実行されます.
Activity Aが実行されると、Activity Bが実行されると、AからBに切り替わると、Activity Bクラスを作成して実行できます.ただし、アクティビティは開発者がランダムに作成して実行するのではなく、システムによって作成されて実行されるコンポーネントクラスです.
最終的に、Activity AクラスでActivity Bクラスを実行するには、システムに「そうしたい」と表示されていることで通知する必要があります.その後、intentの情報を分析し、対応する素子を実行する.
このようなコンテンツの仲介作用は,同じアプリケーションのコンポーネントだけでなく,外部アプリケーションのコンポーネントとバインドする場合にも同様である.すなわち、アプリケーションのコンポーネントからシステムにコンテンツを渡すことができ、システムはその情報を分析してBアプリケーションのコンポーネントを実行することができる.
コードでIntentを作成し、startActivvtのパラメータとして渡します.val intent: Intent = Intent(this, ActivityB::class.java)
startActivity(intent)
構成部品とManifestファイル
システムは、実行時にメニペストファイルに登録されている構成部品情報を読み込みます.このとき,把握した情報により,アプリケーションのコンポーネントがintentとしてコンポーネントを要求すると,システムが実行できる.したがって、構成部品を作成するときは、Manifestファイルに登録する必要があります.<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.ch12practice">
<application ...>
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
エンティティテンプレートを作成すると、MainActivityというアクティビティがManifestに登録されていることがわかります.
テンポラリデータ
Activity AでActivity Bを実行する必要があるが、追加のデータを渡す必要がある場合はどうすればいいですか?開発者はコンポーネントオブジェクトに直接アクセスできないため、システムにデータを渡す方法を使用する必要があります.
要求された構成部品を内部に実行する場合、データを内部に一緒に転送するには、外部データを使用する必要があります.臨時データはテントに入った付加情報です.この場合、Intentクラスで定義されているputExtra関数を使用できます.val intent: Intent = Intent(this, ActivityB::class.java)
intent.putExtra("data1", "HelloWolrd~")
intent.putExtra("data2", 10)
intent.putExtra("data3", 11.1)
startActivity(intent)
1番目のパラメータはデータ識別子で、2番目のパラメータはデータです.このように外部データ実行を受信した素子は、外部データを取得するために、自身を実行するintentオブジェクトを取得する必要がある. override fun onCreate(savedInstanceState: Bundle?) {
val intent = intent
val data1 = intent.getStringExtra("data1")
// getIntExtra(name: String, defaultValue: Int)
val data2 = intent.getIntExtra("data2", 0)
val data3 = intent.getDoubleExtra("data3", 0.0)
...
}
ないぶフィルタ val intent: Intent = Intent(this, ActivityB::class.java)
コンテンツを作成するときに、実行するターゲット構成部品をクラスタイプリファレンスとして作成します.同じアプリケーションのコンポーネントの場合は、クラスタイプの規則に設定できますが、外部アプリケーションのコンポーネントは実行できません.
以上のように、類型参考情報を用いて作られたテントを「明確なテント」と呼び、今回紹介したテントを用いて情報をフィルタリングして作られたテントを「暗示のテント」と呼ぶ.外部アプリケーションのコンポーネントは、暗示的なテントで作られています.
暗示的なテントはマンニペスト・パイレンが宣言したテントフィルターで作られた.<activity android:name=".OneActivity"/>
<activity android:name=".TwoActivity"
android:exported="true">
<intent-filter>
<action android:name="ACTION_EDIT"/>
</intent-filter>
</activity>
Androidシステムは、Manifestファイルの内容を参照してアプリケーションを実行します.ただし,開発者のようにActivityのクラス名のみを設定すると,システムは名前のみを登録する.したがって、このように登録されたアクティブな設備は、明確なテントにしか使用できません.アプリケーション内でのみ使用されるコンポーネントの場合は、android:nameプロパティを指定するだけです.
ただし、アプリケーションの外部でもintentを実行する必要がある場合は、コンポーネントを含むアプリケーションのプライマリファイルで暗黙的なテントとして実行するためにintent-peterを設定する必要があります.
コンテンツ・フィルタのプロパティ・フィールド
intent-filterはactiviy、service、receiverなどのコンポーネント登録ラベルサブアイテムに作成できます.コンテンツフィルタサブアイテムは、action、category、dataタグ設定情報を使用できます.どんな情報を設定するかは開発者の選択です.actionのみを宣言したり、データを同時に宣言したりすることができます.各ラベルに設定した値には、次のような意味があります.
val intent: Intent = Intent(this, ActivityB::class.java)
startActivity(intent)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.ch12practice">
<application ...>
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
val intent: Intent = Intent(this, ActivityB::class.java)
intent.putExtra("data1", "HelloWolrd~")
intent.putExtra("data2", 10)
intent.putExtra("data3", 11.1)
startActivity(intent)
override fun onCreate(savedInstanceState: Bundle?) {
val intent = intent
val data1 = intent.getStringExtra("data1")
// getIntExtra(name: String, defaultValue: Int)
val data2 = intent.getIntExtra("data2", 0)
val data3 = intent.getDoubleExtra("data3", 0.0)
...
}
val intent: Intent = Intent(this, ActivityB::class.java)
コンテンツを作成するときに、実行するターゲット構成部品をクラスタイプリファレンスとして作成します.同じアプリケーションのコンポーネントの場合は、クラスタイプの規則に設定できますが、外部アプリケーションのコンポーネントは実行できません.以上のように、類型参考情報を用いて作られたテントを「明確なテント」と呼び、今回紹介したテントを用いて情報をフィルタリングして作られたテントを「暗示のテント」と呼ぶ.外部アプリケーションのコンポーネントは、暗示的なテントで作られています.
暗示的なテントはマンニペスト・パイレンが宣言したテントフィルターで作られた.
<activity android:name=".OneActivity"/>
<activity android:name=".TwoActivity"
android:exported="true">
<intent-filter>
<action android:name="ACTION_EDIT"/>
</intent-filter>
</activity>
Androidシステムは、Manifestファイルの内容を参照してアプリケーションを実行します.ただし,開発者のようにActivityのクラス名のみを設定すると,システムは名前のみを登録する.したがって、このように登録されたアクティブな設備は、明確なテントにしか使用できません.アプリケーション内でのみ使用されるコンポーネントの場合は、android:nameプロパティを指定するだけです.ただし、アプリケーションの外部でもintentを実行する必要がある場合は、コンポーネントを含むアプリケーションのプライマリファイルで暗黙的なテントとして実行するためにintent-peterを設定する必要があります.
コンテンツ・フィルタのプロパティ・フィールド
intent-filterはactiviy、service、receiverなどのコンポーネント登録ラベルサブアイテムに作成できます.コンテンツフィルタサブアイテムは、action、category、dataタグ設定情報を使用できます.どんな情報を設定するかは開発者の選択です.actionのみを宣言したり、データを同時に宣言したりすることができます.各ラベルに設定した値には、次のような意味があります.
データはURL形式で表され、actionやcategoryのように文字列として宣言されるのではなく、android:scheme、android:host、android:port、android:mimetypeなどの属性を使用します.
Reference
この問題について(Androidテント), 我々は、より多くの情報をここで見つけました https://velog.io/@tjeong/Android-인텐트テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol