Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

最近の作業部屋活動履歴

2018-10-07

最近のWikiの更新 (Recent Changes)

2014-04-18
2014-04-06

Wikiガイド(Guide)

サイドバー (Side Bar)

DA 技術情報

DA(Desk Accessory)とは、Lesser PadDA Launcher から起動できる小さいアプリです。呼び出し元から文字列を受け取って何らかの処理をして返却したり、単に何らかの情報を表示したりできます。開発者は、自分のアプリに DA を呼び出す機能を組み込むこともできます。ここでは、DA の実装について解説します。

DA の呼び出し

呼び出し元では、まずインテント・アクション "org.pulpdust.da.action.LAUNCH" を受け取るコンポーネントが存在するかどうか(つまり DA がインストールされているかどうか)を確認します。例:

  1. //(...)
  2. final String DA_LAUNCH = "org.pulpdust.da.action.LAUNCH";
  3. //(...)
  4. public boolean isIntentAvailable(Context context, String action) {
  5. final PackageManager packageManager = context.getPackageManager();
  6. final Intent intent = new Intent(action);
  7. List<ResolveInfo> list =
  8. packageManager.queryIntentActivities(intent,
  9. PackageManager.MATCH_DEFAULT_ONLY);
  10. return list.size() > 0;
  11. }
  12. //(...)
  13. if (isIntentAvailable(this, DA_LAUNCH)){
  14. //If DA exist.
  15. } else {
  16. //If DA not exist.
  17. }
  18. //(...)

DA の呼び出しでは、返却された値を受け取るために startActivityForResult() を使用してインテントを発行します。例:

  1. //(...)
  2. final String DA_LAUNCH = "org.pulpdust.da.action.LAUNCH";
  3. final String DA_EX_TEXT = "org.pulpdust.da.extra.TEXT";
  4. final String DA_EX_THEME = "org.pulpdust.da.extra.THEME";
  5. final int REQUEST_DA = 1
  6. //(...)
  7. Intent daLaunch = new Intent(DA_LAUNCH);
  8. daLaunch.putExtra(DA_EX_TEXT, "Example string");
  9. daLaunch.putExtra(DA_EX_THEME, 0);
  10. startActivityForResult(Intent.createChooser(daLaunch, "Select DA"), REQUEST_DA);
  11. //(...)

エクストラ・データ

DA の呼び出し元からは、二つのエクストラ・データを渡します。

"org.pulpdust.da.extra.TEXT" は、DA に処理を依頼する String です。DA はこれを処理してもしなくても良いです。

"org.pulpdust.da.extra.THEME" は、外観のテーマを指定する int で、0 または 1 です。DA はこの値に従ってテーマを設定することで、利用者に統一された外観を提供することができます。それぞれの意味は下の表に示します。

2.3 まで3.*4.0 以上
0ThemeTheme.HoloTheme.DeviceDefault
1Theme.LightTheme.Holo.LightTheme.DeviceDefault.Light

device-2014-04-06-125945.png device-2014-04-06-130041.png

DA のインテント・フィルタ

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 による値の処理と返却

呼び出された DA は、"org.pulpdust.da.extra.TEXT" に何らかの処理を加えて返却することができます。しかし、単に渡されたものを無視して、何らかの情報(時計のような)を表示するだけでも良いです。以下は SampleDA のソースコードです。

  1. package org.pulpdust.da.sample;
  2. import android.content.Intent;
  3. import android.os.Bundle;
  4. import android.support.v4.app.FragmentActivity;
  5. import android.widget.Button;
  6. import android.widget.EditText;
  7. import android.view.View;
  8. import android.view.View.OnClickListener;
  9. public class SampleDaActivity extends FragmentActivity {
  10. final static String TAG = "SampleDA Main";
  11. final static String DA_EX_TEXT = "org.pulpdust.da.extra.TEXT";
  12. final static String DA_EX_THEME = "org.pulpdust.da.extra.THEME";
  13. final static String DA_EX_RETURN = "org.pulpdust.da.extra.RETURN";
  14. String sbj;
  15. EditText et;
  16. Button ok;
  17. Button nullpo;
  18. @Override
  19. public void onCreate(Bundle savedInstanceState) {
  20. int cs = getIntent().getIntExtra(DA_EX_THEME, 0);
  21. if (cs >= 1){
  22. setTheme(R.style.AppTheme_Dark);
  23. } else {
  24. setTheme(R.style.AppTheme);
  25. }
  26. super.onCreate(savedInstanceState);
  27. setContentView(R.layout.activity_sampleda);
  28. et = (EditText) findViewById(R.id.editText1);
  29. ok = (Button) findViewById(R.id.button1);
  30. nullpo = (Button) findViewById(R.id.button2);
  31. if (getIntent().getStringExtra(DA_EX_TEXT) != null){
  32. sbj = getIntent().getStringExtra(DA_EX_TEXT);
  33. } else {
  34. sbj = "";
  35. }
  36. et.setText(sbj);
  37. ok.setOnClickListener(new OnClickListener(){
  38. @Override
  39. public void onClick(View v) {
  40. Intent ret = new Intent();
  41. ret.putExtra(DA_EX_RETURN, et.getText().toString());
  42. setResult(RESULT_OK, ret);
  43. finish();
  44. }
  45. });
  46. nullpo.setOnClickListener(new OnClickListener(){
  47. @Override
  48. public void onClick(View v){
  49. Intent ret = new Intent();
  50. setResult(RESULT_OK, ret);
  51. finish();
  52. }
  53. });
  54. }
  55. }

SampleDA は一つのテキストボックスと二つのボタン[OK]と[NULL]を持っています。テキストボックスには渡された文字列が入り、ユーザはここで編集を加えることができます。[OK]を押すとテキストボックスの文字列を "org.pulpdust.da.extra.RETURN" に入れて呼び出し元へ返却して終了します。[NULL]を押した場合は RESULT_OK は返しますが "org.pulpdust.da.extra.RETURN" は null です。

DA 終了後の処理

呼び出し元は 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" で置き換えるような)を行います。

  1. //(...)
  2. @Override
  3. protected void onActivityResult(int requestCode, int resultCode, Intent data){
  4. switch (requestCode){
  5. //(...)
  6. case 1:
  7. if (resultCode == RESULT_OK && data.getStringExtra(DA_EX_RETURN) != null){
  8. //Some processing.
  9. }
  10. //(...)
  11. }
  12. }
  13. //(...)