Archives

You are currently viewing archive for November 2010
カテゴリ: Android SDK
投稿者: terada
startActivityForResultを使ってBluetoothAdapter.ACTION_REQUEST_DISCOVERABLEを呼び出す際のonActivityResult内での判定の仕方が特殊だったのでメモ。

private static final int REQUEST_DISCOVERABLE = 1;
private static final int DURATION = 300; // 持続期間

Intent discoverableIntent =
new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, DURATION);
startActivityForResult(discoverableIntent,REQUEST_DISCOVERABLE);

public void onActivityResult(int requestCode, int resultCode, Intent data)
{
switch (requestCode)
{
case REQUEST_DISCOVERABLE:
//成功時のresultCodeは「Activity.RESULT_OK」ではなく、持続期間の秒数になる。
//拒否された場合は0になる。

if (resultCode==DURATION)
{
// result ok ...
}
else
{
// result cancel ....
}
break;
default :
break;
}
}

2010/11/17: Cursorの走査

カテゴリ: Android SDK
投稿者: terada
初歩的で申し訳ありませんが、Cursorオブジェクトの中身を全部走査する方法。
他にも考えられるけど、実行速度的にはこの二つが速い様子。(paternAの方が若干速いかも??)

// paternA 
Cursor curA = getCursor();
int a = 0;
for(int i=0; i<curA.getCount();i++)
{
curA.moveToPosition(i);
a++;
}
if(curA!=null) curA.close();

// paternB
Cursor curB = getCursor();
int b = 0;
// curB.moveToNext(); // ←あってもなくても一緒みたい
while(curB.moveToNext())
{
b++;
}
if(curB!=null) curB.close();


以上。
カテゴリ: Device
投稿者: terada
結局解決していない問題ですが、備忘録として。

HTC Desire(OS2.2)でアプリアップデートの際に起動アクティビティを変更するとランチャーから起動できなくなる現象に遭遇しました。

状況としては、

以下のようなマニフェストXMLのアプリを一旦端末にインストールする。
<activity android:name=".ActivityA"> 
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ActivityB">
</activity>

次に、起動時のアクティビティを変更すべくマニフェストXMLを下記のように変更しインストール。
<activity android:name=".ActivityA"> 
</activity>
<activity android:name=".ActivityB">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

すると、ホーム画面やアプリ一覧画面上のランチャー(アプリのアイコン)から起動できなくなる。
(「リンクしたプログラムは電話にインストールされていません」というメッセージが表示される)

開発中のアプリであれば、一度アンインストールすれば良いのですが、公開中のアプリでDBをつかっているなど、アンインストールされるとまずい場合に厄介です。

もちろん、ホーム画面のリンクが切れるのは納得いくのですが(これは単に静的なエイリアスだと思うので)、アプリ一覧の中のランチャーが更新されていないのが解せません。android.intent.action.MAINできちんと呼ばれていないのか??

※ 下記の端末では、問題なくランチャーも更新されていました。
Motorola Milestone XT720(OS2.1update1)
Sonny Ericsson Xperia X10(OS2.1update1)
Google NexusOne(OS2.2)
※ マーケットからやるとどうなるかは試していません。
※ versionCodeを増やしてもだめでした。
カテゴリ: Android SDK
投稿者: terada
例えば、スタイルを定義するときなどにハードコーディングするよりもXMLをいじった方が、デザインとコードが分離できて良いのですが、ネット上ではどちらかというとハードコーディングしちゃうリソースの方が多くて、XMLで定義する際の情報が少ない印象です。なので、お恥ずかしながらXML要素に何が使えるのかなど毎回手探りでした・・・。どこかにまとまってるはずと思っていたのですが、ようやくリファレンス内の該当部分が見つかったので、メモ。

Resource Types

例えば、どこかで見つけたサンプルのgradientを単純な塗りつぶしにしたいときは、下記の部分を見れば、gradient要素を削除して、solid要素を追加してあげればいいなんてことがすぐに分かります。

Resource Types > Drawable Resources > Shape Drawable

これでもう安心。
カテゴリ: Eclipse
投稿者: terada
Eclipseは高性能で素晴らしい開発環境なのですが、致命的に重いです。重さの原因はオートビルド機能にあるようで、これをオフにすればだいぶ快適になるのですが、コードを書いてるそばからビルドチェックしてくれるのはとても便利なので、できればオンのまま開発したい。
auto build
いろいろ手だてはあるのかも知れないですが、
ひとつ発見したのは、「Eclipse自体のヒープを監視して必要に応じてGCを実行してやると、いいかも?」です。

Eclipse自体のヒープを監視するためには、環境設定 > General で下記のように「Show heap status」というチェックボックスにチェックを入れます。
preference
すると、IDEの右下の部分に現在使用中のヒープ容量が表示され、右側のゴミ箱マークをクリックするとGCが実行されるようです。
heap
なんか重くなって来たと思ったら、ここのゴミ箱を押す。
これで、少しだけストレスなくなりました。