カテゴリー ‘ Android

AndroidのRingtoneManagerの動作を確認するサンプル


AndroidでRingtoneManagerという着信音、アラーム音などを操作するクラスがあります。

今回はその使用方法を確認するサンプルです。

ソースは、githubに「SampleRingtone」でアップしてあります。

まずは、端末にインストールされている一覧を取得する方法です。

これでどのようなRingtoneが端末にインストールされているか確認できます。

次に「RingtoneManager.ACTION_RINGTONE_PICKER」が用意されているので呼び出して使用する方法です。

呼び出すとこのような画面が表示されます。

これを表示させるコードがこれです。

選択してOKを押した場合のデータ取得方法がこちらです。

「onActivityResult」を利用します。

6行目の内容で対象のURIが取得できます。

取得したURIを使用して対象のRingtoneオブジェクトのインスタンスを取得して操作します。

どういう操作があるかは、RingtoneManagerとRingtoneのJavaDocを参照してください。

JavaDoc

 

AndroidでAlarmManagerの動作を確認するサンプルプログラム


AlarmManagerの追加方を調べる為にサンプル作りました。

ソースコードはgithubに「SampleAlarm」でアップしてあります。

以下のソースで、AlarmManagerをセットできます。

まず、呼び出したいreceiverのクラスに対するIntentのインスタンスを生成します。

作成したIntentをPendingIntentでラップします。

Calendarクラスを使用して通知したい時間のミリ秒を取得します。

AlarmManagerを生成して、

どのようなタイプのアラームにするか?、いつ起動するか?、起動時に通知するIntentは?という情報を

AlarmManagerに設定します。

設定された時間が来ると、指定したレシーバーに通知が送信され起動します。

通知のタイプ

ELAPSED_REALTIME 端末が起動してからの時間(SystemClock.elapsedRealtime()からの経過ミリ秒)で時間を指定する。スリープ状態では通知されない。(スリープが解除されるまで通知されない)
ELAPSED_REALTIME_WAKEUP 端末が起動してからの時間(SystemClock.elapsedRealtime()からの経過ミリ秒)で時間を指定する。スリープ状態の場合、スリープを解除する。
RTC UTCでの時間(System.currentTimeMillis()からの経過ミリ秒)で時間を指定する。スリープ状態では通知されない。(スリープが解除されるまで通知されない)
RTC_WAKEUP UTCでの時間(System.currentTimeMillis()からの経過ミリ秒)で時間を指定する。スリープ状態の場合、スリープを解除する。

AndroidのBOOT_COMPLETEDの受信とテスト


Androidアプリで、端末を立ち上げた時にサービスを起動させたい時があると思います。

この時に使用するのが

「BOOT_COMPLETED」Actionですが、これをテストする時に、コマンド

「adb shell am broadcast -a android.intent.action.BOOT_COMPLETED」とターミナルから実行して

「BOOT_COMPLETED」actionを発生させます。

これで、受信出来ると思いきや、AndroidManifest.xmlの記述によって上手く受信出来る場合と、失敗する場合があるので報告です。

githubにテスト用のサンプルプログラム「SampleBootCompleted」をアップしました。

まず上手くいく場合が、こちらです。

<receiver>のタグに「android:permission=”android.permission.RECEIVE_BOOT_COMPLETED”」を記述しない方法です。

失敗するのが、以下

<receiver>のタグに「android:permission=”android.permission.RECEIVE_BOOT_COMPLETED”」を記述する方法です。

実機で実際に、電源のON/OFF操作をすればどちらでも処理が動作するのですが、

「adb shell」でテスト使用とする場合は注意しないとはまるので注意が必要です。

でもなんでだろ?バグなのかな。まぁ、実際の動作では大丈夫なのでテストがメンドイだけですが。。。

Eclipseでimportされていないクラスのimport追加ショートカット


Eclipseでimportされていないクラスのimport文を追加するショートカットは

「Cmd + Shift + O」で追加されます(Windowsでは「Ctrl + Shift + O」)

余分なimport文の削除も行ってくれるので、意外と使える。

Androidでのlayout_weight=”1″を設定する場合のwrap_contentの設定


Androidのレイアウト用のxmlで、画面の幅を割合で表示させる為に、「layout_weight」を使用する場合があるとおもいます。

この時によく、以下のように設定する事があると思います。

これは、「layout_weight=”1″」を設定している要素に「layout_width=”wrap_content”」を設定しています。

実はこれが無駄らしいのです。(こちら参照

というのも、wrap_contentの幅の計算と、layout_weightでの幅計算が両方行われてしまうかららしいのです。

なので表示のパフォーマンスを向上させる為には、以下のように設定したほうがいいそうです。

Androidのドキュメントを読みなおしてみると知らない事が結構書かれているので、一度読んでみると面白いと思います。

return top