!!リソース関連
!リソースからリソース参照
@string/app_name
とか
!IDを使ったリソース参照
android:id="@+id/imageview1"
のようにXMLに書いて、プログラムから
R.id.imageview1
で参照
!!エミュレータの電源などの設定を変える
telnet localhost 5554
等でtelnet でエミュレータに接続し、コマンドを流す。
例えば
power ac on
で電源の接続になる
!!versionCode と versionName
http://labs.karappo.net/mobiledev/index.php?itemid=209
versionCodeは、何回目のアップロードかを表す整数
versionNameは、自分で好きに決めたバージョン名を表す数字
です。なので、アップデートする際は少なくとも前回時よりもversionCodeが大きくなっていなければなりません。
!!スレッドに関する注意点
環境によっては、
*Thread#sleep
*Object#wait
等で、スレッドを止める処理を行うと復帰しないことがあるようだ。
特に3秒(3000ミリ秒)以上停止させると復帰しない現象が多発した。
CountDownTimerでも、countDownInterval を3秒以上にすると、
onFinishが呼ばれないことがあった。
長時間スレッドを止めるときは、1秒毎に復帰、スリープを繰り返した方が良いかもしれない。
CountDownTimerのcountDownInterval は 1000ミリ秒 以上の値は渡さない方が無難かも。
!!hndroidのHandlerとは何か?
http://www.adamrocker.com/blog/261/what-is-the-handler-in-android.html
AndroidでWeb APIを使う場合、マルチスレッドによるユーザビリティ向上を以前のエントリで説明しました。
AndroidアプリのUIはシングル・スレッド モデルです。
単純にマルチスレッドにしてUIの操作をしてしまうと、CalledFromWrongThreadExceptionでアプリがダウンしてしまいます。
これを回避する仕組みがHandlerです。
Handlerの仕組みを簡単に説明しようと思ったのですが、
またもや長くなってしまったので、先にまとめます。
* AndroidのUI操作はシングル・スレッド モデル
* ユーザビリティ向上の為にはマルチスレッドが必要
* Handlerで実現
* Handlerを使わない場合に起きる例外は実行スレッドのチェックで発生
* Handlerを使うと、UI Threadの持つキューにジョブを登録できる
* キューはUI Threadにより実行される
* 別スレッドからUI Threadに処理を登録するのでスレッドチェックで例外が発生しない
!!指定時間後に処理をする
new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
System.out.println("seconds remaining: " + millisUntilFinished / 1000);
}
public void onFinish() {
System.out.println("done!");
}
}.start();
!!WIFI 制御
WifiManager m = (WifiManager)getSystemService(Context.WIFI_SERVICE);
try {
System.out.println(m.setWifiEnabled(true));
} catch (Exception e){
e.printStackTrace();
}
!!画面の自動回転制御
try {
Settings.System.putInt(getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 0);
} catch (Exception e){
e.printStackTrace();
}
!!Blluetooth制御
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (mBluetoothAdapter == null) {
System.out.println("##### not support ######");
}
!!バックライト消灯時間の制御
defTimeOut = Settings.System.getInt(getContentResolver(),
Settings.System.SCREEN_OFF_TIMEOUT, DELAY);
Settings.System.putInt(getContentResolver(),
Settings.System.SCREEN_OFF_TIMEOUT, DELAY);
!!バックライトの輝度モードの制御
try {
// SCREEN_BRIGHTNESS_MODE
// SCREEN_BRIGHTNESS_MODE_AUTOMATIC
// SCREEN_BRIGHTNESS_MODE_MANUAL
System.out.println(Settings.System.getInt(getContentResolver(),
"screen_brightness_mode" ));
} catch (Exception e){
e.printStackTrace();
}
!!バックライトの輝度の値の制御
try {
System.out.println(Settings.System.getInt(getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS ));
} catch (Exception e){
e.printStackTrace();
}
!!エミュレータでSDカード
http://www5d.biglobe.ne.jp/~hra/note/android/004_sd_card_access.htm
!SDカードのイメージを作る
mksdcard 16M test.img
!エミュレータにSDカードを指定する
emulator -sdcard test.img -avd level4
!SDカードにデータ転送
エミュレータが起動している状態で
adb push test.txt /sdcard
!!アラームアプリを作る
http://android.roof-balcony.com/service/alarm/
AlarmManager
を使うらしい。詳しくは未確認。
!!アプリをSDカードへ保存可能にする方法
http://android49.blog.fc2.com/blog-entry-24.html
AndroidManifest.xmlのタグに次の行を追加するだけです。
android:installLocation="auto"
これを加えるだけでアプリがSDカードへ保存可能になります。ただしSDカードへ保存する機能はAndroid 2.2以降の機能ですので、アプリのAPIレベルには注意が必要です。
「auto」の部分を
internalOnly
に設定するとSDカードなど外部ストレージへ保存できなくすることができます。
preferExternal
に設定するとデフォルトで外部ストレージへ保存され、本体への移動も可能になります。
{{category2 プログラミング言語,Java,Android}}