tasker_icon

日本語版 Tasker ユーザーガイド : Java

~ ジャバ ~

Taskerでは、Androidが提供するAPIを直接呼び出して利用することが出来ます。

これは上級者向けの機能です。

Introduction (導入)

Androidには、アプリが利用できる数十万もの関数が有ります。これらすべてをTaskerが提供するのは不可能なので、Taskerでは上級ユーザー向けにこれらのJava関数を直接呼び出してJavaオブジェクトが使えるようにしています。

これによってJavaのコードが書けると言う訳ではありませんが、Taskerのロジックとフロー制御を組み合わせてAndroidのAPIを直接呼び出すことで、多くの機能を自動化できます。

ここでは、Javaの特徴であるオブジェクトやクラスの基本を理解しているものとして話を進めます。

AndroidのAPIに関する開発者向け情報はGoogle開発者向け情報にあります。

Example (例)

  1. Variable Set, %service, wifi
  2. Java Function, wiman = CONTEXT.getSystemService( %service )
  3. Java Function, %enabled = wiman.isWifiEnabled()
  4. Java Function, wiman.setEnabled( true ), If %enabled eq false

この例では、Wifi接続が有効になっていない場合にWifiをオンにしています。

アクション2では、Taskerの変数がJavaの関数呼び出しの中で使えることを示しています。wimanは関数呼び出しの結果返されるJavaオブジェクトで、Taskerが保持してその後のアクションで利用できます。 CONTEXTも同様に変数ですが、あらかじめ組み込まれていて、いつでもJava関数から利用できます。

アクション3では、Java関数を実行した結果も同様にTaskerの変数に格納できることを示しています。Taskerの変数の値は全て文字列なので、Java関数の戻り値によっては何かしらの変換が必要になります。この場合、戻り値は真偽値なので%enabledにはtrueまたは、falseが入ります。

アクション4では、その前のJava関数の実行結果をもとに条件判定をしています。

The Java Function Action
(Java Functionアクション)

Using The Action (アクションを使う)

  1. 最初のパラメーターにオブジェクトまたはクラスを指定します。(スタティック関数を利用できるようになります。)

    虫眼鏡アイコンをタップすると、最後のアップデート時点で最新のAndroid APIの一覧が表示されます。赤文字で表されるクラスは全てのデバイスで利用できるわけではないことを示しています。

    コーヒーカップアイコンは既知のJavaオブジェクトの一覧を表示します。

    クエスチョンマークアイコンは、オブジェクトやクラスに関連するAndroidリファレンスページへのリンクです。

  2. Functionパラメーターの隣の虫眼鏡アイコンをタップして、1.で選択したクラスやオブジェクトに対して実行される関数を選択します。

    多くの場合、Taskerはオブジェクトのクラスを自動的に判別してどの関数が利用可能かを判断しますが、もしそうでない場合はこちらをご覧ください。

    赤文字で示された関数はプライベートです。よって制作者以外は利用できません。

  3. 関数に戻り値が有る場合、それを受け取るJavaオブジェクトの名前か、Taskerの変数を指定することが出来ます。こちらをご覧ください。
  4. 関数に必要なパラメーターを指定します。関数が必要とするオブジェクトの型は入力フィールドの上に表示されます。虫眼鏡アイコンは現在の入力フィールドの内容に基づいて、関連するフィールドを表示します。

Parameters (パラメーター)

パラメーターを指定しなかった場合、関数の実行時にはそのパラメーターの値としてnull値が使われます。

パラメーターとして変数配列名が指定された場合、Taskerは関数の定義に応じてこれらを配列やコレクションオブジェクトに変換します。

その他のTaskerの変数は通常通りの方法で置き換えられます。

また、Javaオブジェクトを指定することも出来ます。これは、組み込みのオブジェクトまたは事前のJava関数の実行によって生成されたオブジェクトです。(wiman や arr[0].length のように指定します。)

Return Values (戻り値)

Java関数が戻り値を返した場合、Taskerの変数またはJavaオブジェクトに格納されるか、または単に無視されます。

Taskerの変数に格納された戻り値はテキストデータに変換され、オブジェクトそのものは破棄されるため再びこのオブジェクトにアクセスすることはできなくなります。変数配列の形式に従って複数の変数に分割されることに注意してください。(例 %val1, %val2...)

戻り値がJavaオブジェクトに格納された場合、他のJava関数やTaskerのアクション(次項参照)からそのオブジェクトを利用できます。

戻り値のクラスは実行された関数によって変化するので、オブジェクトのクラス名は場合によって異なります。しかしながら、このようなクラス名を参照することはお勧めできません。

Objects (オブジェクト)

Creating An Object (オブジェクトの作成)

新規オブジェクトのほとんどは、クラス名を指定して、関数一覧からnewという関数を選択することで作成されます。

Android APIのうち、getInstanceなどといったオブジェクト生成用の特別なスタティック関数を持っているものについてはこの限りではありません。

配列(多次元配列も含め)を作成する場合は、クラス名に[]を付けます。(多次元配列の場合、[][]のようになります。)

次に、3×5 の文字配列を作る例を示します。

  1. Java Function, arr = new String[][]( 3 )
  2. For, %rowno, 0:2
  3.    Java Function, arr[%rowno] = new String[]( 5 )

配列はArrayクラスのnewInstance関数を使って生成することも出来ます。

Javaオブジェクトが利用できる状況であれば、配列についても通常のJava同様に(arr[0][1]のように)アクセスが可能です。

Object Naming, Local and Global
(オブジェクトの名前とローカル・グローバルの違い)

オブジェクト名は、大文字または小文字およびアンダースコアの組み合わせて指定することが出来ますが、Taskerの変数名と異なり、アンダースコアから始めることはできません。最初の文字に大文字を使うことはできません。これはクラス名と区別するためです。

Taskerの変数名と同様に、Javaオブジェクトも全て小文字の名前のものはローカル、名前に大文字を含むものはグローバル(他のタスクから利用可能)なオブジェクトとして扱われます。全て大文字の名前を持つオブジェクトは、変更不可能なファイナル(フィクスド)オブジェクトとして扱われます。

次に、グローバルなJavaオブジェクトについて覚えておくべき重要なポイントを3つ挙げておきます。

  • メモリーの節約のために使わないオブジェクトは削除してください。
  • Taskerのグローバル変数とは違い、デバイスのリスタートなどでTaskerが終了するとオブジェクトは失われます。
  • 名前に使える文字は大文字、小文字とアンダースコアのみです。

Built-in Objects (組み込みオブジェクト)

  • Android Contextオブジェクト (Contextクラス)
    CONTEXT
    Androidの多くの関数でコンテキストオブジェクトを必要とします。ここでは、Taskerアプリケーションコンテキストオブジェクトがそれです。
  • Image Bufferオブジェクト (Bitmapクラス)
    IBUFFER TaskerのImageカテゴリーのアクション内の関数で使われるオブジェクトです。

Assigning Values (値の設定)

Javaのコードを書いていると、次のように複数の名前で1つのオブジェクトを参照する場合がありますが、

String a = "hello";
String b = a;

(これで、aとbは同じオブジェクトを参照することになります。)

これと同じことをTaskerでするには、特別な参照用関数を参照するオブジェクトの後に指定します。

Java Function, a, "hello", assign (または、 a = "hello".assign())
Java Function, b, a, assign (または、 b = a.assign())

Other Actions Supporting Objects
(オブジェクトを使えるその他のアクション)

Ifアクション

条件式から直接オブジェクトを参照できます。例えば、

If, arr[0][0] eq 45
If, arr[0][0].length > 3

のようにしますが、str.charAt( 5 ) のように関数を呼び出すことはできません。

Forアクション

ForアクションのValueパラメーターにはIfアクション同様にJavaオブジェクトを参照できます。

For, %value, arr

のようにすると、arr配列内の各要素を巡回します。この方法は文字列のリストやboolean(真偽値)オブジェクトなどの単純なオブジェクトに対しても機能します。

Other Topics (その他のトピックス)

Casting (型のキャスト)

TaskerにおけるCasting(型のキャスト)は、単に特定のオブジェクトがどの型かをTaskerに知らせるだけです。これによって、Taskerはそのオブジェクトに対して呼び出し可能な関数を一覧表示することが出来ます。

このページの最初に出てきた例では、getSystemService関数がオブジェクトを返しています。

Java Function, wiman = CONTEXT.getSystemService( %service )

ここで、戻り値となるオブジェクトは多くのマネージャーのうちのいずれかなので、Taskerはタスク内の次のJava Functionアクションで使うために、選択肢としてWifiマネージャー関数を一覧に加えることが出来ません。

そこで、次のようにオブジェクト名の前にカッコでくくって特定の型を指定することでTaskerに戻り値の型を指定してやる必要があります。

Java Function, (WifiManager) wiman = CONTEXT.getSystemService( %service )

Constants (定数)

Taskerでは、Javaの定数に関して、通常の命名規則を適用します。

  • L:長整数。例 300L
  • F:浮動小数点数。例 45.6D
  • D:倍精度浮動小数点数。例 45.6D
  • ダブルクォート:文字列。例、 "hello"。通常、Taskerでは値を文字列として扱います。
  • シングルクォート:単一文字。例 'x'

型を示す文字が付加されていない数値に関して、Taskerは次の順で変換を試みます。int, long, float, double.

Generic Classes (ジェネリッククラス)

Taskerでは、次に示すジェネリッククラスについてのみ完全なサポートをしています。

  • ArrayList<String>
  • ArrayList<View>
  • ArrayList<Bundle>
  • ArrayList<Integer>
  • ArrayList<Long>
  • ArrayList<Double>
  • ArrayList<Float>

これらの生成には、クラス一覧から該当のクラスを選択した後、関数一覧からnew関数を選びます。

配列を含むジェネリッククラスをTaskerで扱うことはできませんが、そのようなオブジェクトを関数間で受け渡すことは可能です。

Service Thread (サービススレッド)

JavaのコードはUIを持たないサービスとして実行することが出来ます。

関連事項:

  • ダイアログの表示など、ユーザーによる操作を必要とする事柄は機能しません。
  • インテントの設定には場合によって、Intent.FLAG_FROM_BACKGROUND あるいは、 Intent.FLAG_ACTIVITY_NEW_TASK などのフラグを指定してやる必要があります。