DA(Desk Accessory)とは、Lesser Pad や DA Launcher から起動できる小さいアプリです。呼び出し元から文字列を受け取って何らかの処理をして返却したり、単に何らかの情報を表示したりできます。開発者は、自分のアプリに DA を呼び出す機能を組み込むこともできます。ここでは、DA の実装について解説します。
呼び出し元では、まずインテント・アクション "org.pulpdust.da.action.LAUNCH" を受け取るコンポーネントが存在するかどうか(つまり DA がインストールされているかどうか)を確認します。例:
- //(...)
- final String DA_LAUNCH = "org.pulpdust.da.action.LAUNCH";
- //(...)
- public boolean isIntentAvailable(Context context, String action) {
- final PackageManager packageManager = context.getPackageManager();
- final Intent intent = new Intent(action);
- List<ResolveInfo> list =
- packageManager.queryIntentActivities(intent,
- PackageManager.MATCH_DEFAULT_ONLY);
- return list.size() > 0;
- }
- //(...)
- if (isIntentAvailable(this, DA_LAUNCH)){
- //If DA exist.
- } else {
- //If DA not exist.
- }
- //(...)
DA の呼び出しでは、返却された値を受け取るために startActivityForResult() を使用してインテントを発行します。例:
- //(...)
- final String DA_LAUNCH = "org.pulpdust.da.action.LAUNCH";
- final String DA_EX_TEXT = "org.pulpdust.da.extra.TEXT";
- final String DA_EX_THEME = "org.pulpdust.da.extra.THEME";
- final int REQUEST_DA = 1
- //(...)
- Intent daLaunch = new Intent(DA_LAUNCH);
- daLaunch.putExtra(DA_EX_TEXT, "Example string");
- daLaunch.putExtra(DA_EX_THEME, 0);
- startActivityForResult(Intent.createChooser(daLaunch, "Select DA"), REQUEST_DA);
- //(...)
DA の呼び出し元からは、二つのエクストラ・データを渡します。
"org.pulpdust.da.extra.TEXT" は、DA に処理を依頼する String です。DA はこれを処理してもしなくても良いです。
"org.pulpdust.da.extra.THEME" は、外観のテーマを指定する int で、0 または 1 です。DA はこの値に従ってテーマを設定することで、利用者に統一された外観を提供することができます。それぞれの意味は下の表に示します。
2.3 まで | 3.* | 4.0 以上 | |
0 | Theme | Theme.Holo | Theme.DeviceDefault |
1 | Theme.Light | Theme.Holo.Light | Theme.DeviceDefault.Light |
DA として呼び出されようとするコンポーネントは、インテント・フィルタで "org.pulpdust.da.action.LAUNCH" を受け取るように設定されている必要があります。
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.pulpdust.da.sample" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="19" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".SampleDaActivity" android:label="@string/app_name" > <intent-filter> <action android:name="org.pulpdust.da.action.LAUNCH" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> </application> </manifest>
呼び出された DA は、"org.pulpdust.da.extra.TEXT" に何らかの処理を加えて返却することができます。しかし、単に渡されたものを無視して、何らかの情報(時計のような)を表示するだけでも良いです。以下は SampleDA のソースコードです。
- package org.pulpdust.da.sample;
- import android.content.Intent;
- import android.os.Bundle;
- import android.support.v4.app.FragmentActivity;
- import android.widget.Button;
- import android.widget.EditText;
- import android.view.View;
- import android.view.View.OnClickListener;
- public class SampleDaActivity extends FragmentActivity {
- final static String TAG = "SampleDA Main";
- final static String DA_EX_TEXT = "org.pulpdust.da.extra.TEXT";
- final static String DA_EX_THEME = "org.pulpdust.da.extra.THEME";
- final static String DA_EX_RETURN = "org.pulpdust.da.extra.RETURN";
- String sbj;
- EditText et;
- Button ok;
- Button nullpo;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- int cs = getIntent().getIntExtra(DA_EX_THEME, 0);
- if (cs >= 1){
- setTheme(R.style.AppTheme_Dark);
- } else {
- setTheme(R.style.AppTheme);
- }
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_sampleda);
- et = (EditText) findViewById(R.id.editText1);
- ok = (Button) findViewById(R.id.button1);
- nullpo = (Button) findViewById(R.id.button2);
- if (getIntent().getStringExtra(DA_EX_TEXT) != null){
- sbj = getIntent().getStringExtra(DA_EX_TEXT);
- } else {
- sbj = "";
- }
- et.setText(sbj);
- ok.setOnClickListener(new OnClickListener(){
- @Override
- public void onClick(View v) {
- Intent ret = new Intent();
- ret.putExtra(DA_EX_RETURN, et.getText().toString());
- setResult(RESULT_OK, ret);
- finish();
- }
- });
- nullpo.setOnClickListener(new OnClickListener(){
- @Override
- public void onClick(View v){
- Intent ret = new Intent();
- setResult(RESULT_OK, ret);
- finish();
- }
- });
- }
- }
SampleDA は一つのテキストボックスと二つのボタン[OK]と[NULL]を持っています。テキストボックスには渡された文字列が入り、ユーザはここで編集を加えることができます。[OK]を押すとテキストボックスの文字列を "org.pulpdust.da.extra.RETURN" に入れて呼び出し元へ返却して終了します。[NULL]を押した場合は RESULT_OK は返しますが "org.pulpdust.da.extra.RETURN" は null です。
呼び出し元は onActivityResult() をオーバーライドして DA からの結果を受け取ります。リザルト・コードが RESULT_OK でかつ "org.pulpdust.da.extra.RETURN" が null ではない場合だけ、"org.pulpdust.da.extra.RETURN" の内容を元に何らかの処理("org.pulpdust.da.extra.TEXT" で渡した文字列を "org.pulpdust.da.extra.RETURN" で置き換えるような)を行います。