Map2Geoでは地理情報の送信インテントについて、ユーザー独自のフォーマットを定義できます(Ver4.00以降)。
定義ファイル “intents.ini” を用意することで、Map2Geoが標準でサポートしている送信対象アプリ以外に対して独自にサポートを追加することが可能となります。
ユーザー独自の追加フォーマットの定義ファイル。
<端末内部ストレージ>/map2geo/intents.ini
テキストファイル
改行コード :CR | LF | CRLF
エンコード :UTF-8を推奨
キー=値 のエントリの羅列で構成される
[セクション名]でアプリ毎の定義を分ける
行頭、行末のスペース、タブは無視される
“;”(セミコロン)で始まる行はコメント行として無視される
行頭以外ではコメントとみなされない
[セクション名1] ;コメント キー=値 : : [セクション名2] ;コメント キー=値 : :
送信対象アプリ毎にセクションを設ける
最初のセクションの前に書かれたエントリはセクション名””(空文字列)のエントリとして扱われる
セクション名が重複する場合、同一セクションとして結合される
セクション名は任意の文字列
キーは既定された文字列(後述)
値は任意の文字列
[0] ;Googleマップを常にズームレベル20で、地名をExampleとして起動する data=geo:{lat},{lng}?q={lat},{lng}(Example)&z=20 package=com.google.android.apps.maps
上記の内容をテキストファイルにコピペして、端末内部ストレージ/map2geo/intents.ini として置くことで試すことができる。
次のルールで解釈される:
セクションの出現順に解釈される
セクション毎のdataエントリで示されるURIを受け付けるアプリの存在が検査され、存在するなら送信対象アプリとされる
identifier,package,class の各エントリが副次条件として評価される在がリストアップされる
送信対象アプリの検出有無にかかわらず、全てのセクションが順に解釈される
すでにリストアップ済みのアプリは重複してリストアップされない
同一パッケージかつ検出に用いられたclass、iconactivityエントリの内容が同一なら重複と判断される
この intents.ini の解釈の後でMap2Geoの標準対象アプリ定義が解釈される
つまりこのファイルで標準の動作をオーバーライドできる
大文字小文字は区別される
キー,=,値の間にスペースを入れてはならない
値をダブルクォーテーションなどで囲ってはならない
キーの一覧は次の通り:
ここで定義されたURIテンプレートに座標値などを当てはめたものが送信先アプリに送られる
また、この値を元に送信可能なアプリが検索される
packageが指定されている場合はそちらが優先される
構文詳細は後述。
送信対象アプリを特定したい場合はこのエントリでパッケージ名を指定する
このエントリがない場合はdata(あるいはidentifier)に基づくURIに反応するアプリ(複数)が送信対象としてリストアップされる
送信対象アプリのアクティビティまでを特定したい場合は、このエントリでアクティビティのクラス名を指定する
packageの指定がない場合は無効となる
送信対象アプリを検索するために用いるURIのテンプレート
実際に送信されるデータと異なるURIで対象アプリを検索したい場合に用いる
具体的には、データ送信をandroid.intent.action.SENDで行う(=送信データがURIではない)場合に利用する
送信先一覧として表示されるアイコンとラベルに特定のアクティビティのものを利用したい場合に用いる
アクティビティは送信先アプリのパッケージに含まれるものでなければならない
アクティビティが存在しない場合はデフォルトのアイコンとラベルが使用される
インテントのアクションを標準(android.intent.action.VIEW)以外にしたい場合に指定する
具体的には、データ送信をandroid.intent.action.SEND(テキストの送信)で行う場合に利用する
送信先アプリの表示名を指定する
labelが異なる送信先は同一アプリでも別の転送先とみなされる
例えばChromeでWebページを開くような送信先を複数設けたい場合には、それぞれに別のlabelを与えることで実現できる
intents.ini の data,identifierエントリの構文は次の通り:
文字列、値、条件句の連結で構成される
条件句はネストできる
1行で完結しなければならない。複数行に分割はできない
ただし{\n}を記述すると改行に展開されるので、複数行形式の結果を得ることは可能
テンプレートの要素は次の通り:
例:
geo:{lat},{lng}[zoom:&z={zoom}]
値の一覧は次の通り:
“[条件:” または “[条件!” で始まり “]” で終わる部分文字列。
“[“,条件,”:” “!” の間にはスペースを挟んではならない。
条件の評価が真の場合に条件句は有効となり、無効の場合は条件句は破棄される
条件句の開始トークン末尾の文字で条件の真偽を逆転できる:
“:” コロン :条件が真の場合に真
“!” びっくらメーション :条件が偽の場合に真
条件句には文字列、値を含むことができ、別の条件句を入れ子で含むことができる
例:
[zoom:zoom exists] :ズームレベルが存在する場合は文字列”zoom exists” 、存在しない場合は空文字列に評価される
[zoom!zoom not exists] :ズームレベルが存在しない場合は文字列”zoom not exists” 、存在する場合は空文字列に評価される
[zoom:[label:zoom and label exist]] ズームレベルとラベルが存在する場合は”zoom and label exist”、それ以外は空文字列に評価される
条件の一覧は次の通り:
geo:{lat},{lng}
geo:35.660411,139.729265 のように展開される
geo:{lat},{lng}[zoom:?z=zoom]
geo:35.660411,139.729265 または geo:35.660411,139.729265?z=18.0 のように展開される
geo:{lat},{lng}[label:?q={lat},{lng}({label})[zoom:&z={zoom}]][label![zoom:?z={zoom}]]
次のように展開される:
geo:35.660411,139.729265
geo:35.660411,139.729265?q=35.660411,139.729265(google)
geo:35.660411,139.729265?q=35.660411,139.729265(google)&z=18.0
geo:35.660411,139.729265?z=18.0
Map2Geoのルート転送機能はこの定義ファイルでは取り扱えない。
ルートの転送処理においてこの定義ファイルは参照されない。
Ver4.00時点では次の通り:
geo:{lat},{lng}[?z={zoomint}]
~Ver3.12まではz=… が付与されない
送信先アプリに応じて変更される場合がある
発行できるインテントはgeoインテントに限定されない。
例えば次の定義でブラウザのGoogleマップが開く:
data=https://www.google.com/maps/@{lat},{lng},{zoom}z
この一行をテキストファイルにして、端末内部ストレージ/map2geo/intents.ini として置くことで試すことができる。
セクションの記述は不要(名前が空文字列のセクションとして解釈される)。
action=android.intent.action.SEND を指定することでメモアプリなどへのテキストを転送することも可能。
Map2Geoは action=android.intent.action.SEND の場合、dataで生成された文字列を Intent.EXTRA_TEXT のExtraに詰めて type=”text/plain” でインテントを生成して送出する。
data={label}{\n}https://www.google.com/maps/@{lat},{lng},{zoom}z action=android.intent.action.SEND
上記の定義で
https://www.google.com/maps/@35.660411,139.729265,16.0z
というようなテキストがメーラーなどに共有される。
ただしこの例だとすべてのandroid.intent.action.SEND対応アプリがリストアップされ、以降のandroid.intent.action.SENDを使用するセクションがマスクされてしまう。
package=com.google.android.gmのように追記して特定のアプリを指定することが望ましい。