0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Kotlin研修11日目】暗黙的インテントを用いたアプリケーション間の連携

Last updated at Posted at 2021-06-18

アプリケーション間の連携

参考1: 他のアプリからのアクティビティの開始を許可する
参考2: 研修3日目
参考3: 研修6日目
参考4: 研修11日目
アプリケーション内部でのアクティビティフラグメントサービス間の連携(=画面遷移)はインテントを利用するが、アプリケーション間の連携においてもインテントを利用する。

インテント

アクティビティフラグメントサービス間の橋渡し役を担うクラス。
遷移元遷移先の情報をもつ。

Intentオブジェクトは、アクティビティフラグメントサービスの起動を行う。

ただし、アプリケーション内部の場合とアプリケーション間の場合ではインテントの宣言方法が変わる。

条件 インテント
アプリケーション内部 明示的インテント
アプリケーション 暗黙的インテント

明示的インテント

アプリケーション内部で、起動するアクティビティ等のクラス名を明示的に宣言するインテント

暗黙的インテント

アプリケーション内部から見て、起動するアクティビティ等のクラス名が不明である場合に、URIを指定することでOSに起動先を委ねるインテント

なお、アクティビティの起動に関しては、指定されたURIで一つのアプリケーションに絞れない場合は、OSアプリチューザを表示することで起動するアプリケーションユーザに指定させる。

暗黙的インテント.png
出典: インテントとインテントフィルタ(図1)

URI

参考: URI
Web上での住所を表すURLWeb上での固有IDを表すURNの総称。
Uriクラスで定義される。

アプリチューザ

OSが指定されたURIで起動するアプリケーションを1つに限定できない場合に、ユーザに対して起動先アプリケーションの選択を迫るために表示されるチューザダイアログ

アプリチューザ.png

定義

明示的インテントと暗黙的インテント
// 明示的インテント
Intent(packageContext: Context!, cls: Class<*>!)
// パラメータ
// packageContext: 起動元コンテキスト
// cls: Javaクラス化した起動先コンテキスト
// -> KotlinのクラスをJavaに変換する場合は、"<Kotlinクラス名>::class.java"と記述

// 暗黙的インテント
Intent(action: String!, uri: Uri!)
// パラメータ
// action: インテントが実行するアクションを表すIntentクラス定数
// uri: 起動先コンテキストのURI

アクションを表すIntentクラス定数

参考: インテント

定数名 内容
ACTION_VIEW 画面の表示
ACTION_CALL 電話の発信
ACTION_SEND メールの送信

Uriオブジェクトの生成

半角英数字一部の半角記号(=ハイフン-ピリオド.アンダースコア_チルド~など)以外のString型の文字列をUri型に変換する場合は、事前にURLエンコーディングを行う必要がある。

URLエンコーディング

URLとして使用できない文字を16進数のコードに変換(=エンコード)して使えるようにすること。

URLエンコーディングを行う場合、URLEncoderクラスのencode()メソッドを利用する。

定義
// 文字エンコードを指定したURLエンコーディング
URLEncoder.encode(s: String, enc: String): String
// s: String型文字列
// enc: 文字エンコード

String型 → Uri型への変換

参考: 研修10日目
String型をUri型に変換(=パース; 解析)する場合、Uriクラスのparse()メソッドを利用する。

// エンコード済みのString型URIをUri型に変換
Uri.parse(uriString: String!): Uri!
// パラメータ
// uriString: Uri型に変換するString型URI

サンプルコード

MainActivity.kt
// EditTextに入力されたString型文字列
var searchWord = etSearchWord.text.toString()

// 文字エンコードを指定したURLエンコーディング
searchWord = URLEncoder.encode(searchWord, "UTF-8")

// 指定した文字列で検索した地図アプリのString型URI
// -> "geo:<緯度>,<経度>?q=<検索文字列>" で表現
val uriStr = "geo:0,0?q=${searchWord}"

// String型 → Uri型 への変換
val uri = Uri.parse(uriStr)

// 暗黙的インテント(=Intentオブジェクト)の生成
val intent = Intent(Intent.ACTION_VIEW, uri)

// アクティビティの起動
startActivity(intent)
// <- Context.startActivity(intent: Intent!): Unit
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?