Category: develop
-
iOS Notification(通知)バッジナンバー表示の要点だけ
iOSのNotificationでは、アプリケーションアイコンの右肩に数字(バッジ)を表示することができるけど、その数字を消去するときにちょっとした落とし穴があるのでメモ。まずはUIApplicationオブジェクトを取得して直接バッジを設定する場合。
(1)アプリケーションオブジェクト(UIApplication)を通じて直接、バッジ設定する場合[UIApplication sharedApplication].applicationIconBadgeNumber = badgeNumber;
この場合は、badgeNumber(NSInteger)の数字が正の数であれば、バッジ数字が表示、ゼロであればバッジアイコンは消去される。ではローカル通知を通じた場合はどうなるか。
(2)ローカル通知オブジェクト(UILocalNotification)を通じたバッジ設定の場合。ちなみにローカル通知はiOS4から利用可能NSInteger badgeNumber = 1;UILocalNotification *notification = [[UILocalNotification alloc] init];notification.fireDate = [NSDate dateWithTimeIntervalSinceNow:30];//30秒後notification.alertBody = @”ローカル通知メッセージ“;notification.applicationIconBadgeNumber = badgeNumber;[[UIApplication sharedApplication] scheduleLocalNotification:notification];[notification release];
badgeNumberが正の数であれば、通知時に該当アプリのバッジにその数字が設定される。しかしゼロの場合は、直前のバッジ数字がそのまま残る。消去したい場合は、applicationBadgeNumberに負の数を設定すれば良い。ちなみに(1)のパターンのときもゼロでなく負の数を与えてもバッジは消える。 -
Android Developerサイトにあるデザインテンプレートまとめ(PSD)
Android Developersサイトを見ていたら、色んなところにデザインテンプレートが落ちていたのでメモ。慣れるまではこれを下敷きにすれば、効果的にデザインが作れるのではないでしょうか。PSDで提供されてるので使いやすい。
1.アイコン
色んなアイコンテンプレート詰め合わせ。
http://developer.android.com/intl/ja/guide/practices/ui_guidelines/icon_design.htm
中身は以下のとおり
・ダイアログ
・ランチャー(HOME)
・リスト
・メニュー
・通知
・タブ
Icon Templates Pack for Android 2.3
http://developer.android.com/shareables/icon_templates-v2.3.zip2.ウィジェット
ウィジェットもサイズに合わせて色々とテンプレが用意されてました。
http://developer.android.com/intl/ja/guide/practices/ui_guidelines/widget_design.html4x1_Widget_Frame_Portrait.psd
http://developer.android.com/images/widget_design/4x1_Widget_Frame_Portrait.psd3x3_Widget_Frame_Portrait.psd
http://developer.android.com/images/widget_design/3x3_Widget_Frame_Portrait.psd2x2_Widget_Frame_Portrait.psd
http://developer.android.com/images/widget_design/2x2_Widget_Frame_Portrait.psd4x1_Widget_Frame_Landscape.psd
http://developer.android.com/images/widget_design/4x1_Widget_Frame_Landscape.psd3x3_Widget_Frame_Landscape.psd
http://developer.android.com/images/widget_design/3x3_Widget_Frame_Landscape.psd
2x2_Widget_Frame_Landscape.psd
http://developer.android.com/images/widget_design/2x2_Widget_Frame_Landscape.psd -
AndroidアプリをSDカードにインストール可能にする要点だけ
- Android 2.2 “Froyo” からandroidmanifest.xmlで設定することでSDカードへのインストール、移動が可能になった
- デフォルト設定は「端末のみ可」なので注意
- <manifest>の要素にandroid:installLocationを指定する。
- auto:通常端末内。端末容量が足りないときにSDカードへ。端末とSDカード間で移動可能
- internalOnly:端末内のみインストール可。android:installLocationを設定しないときのデフォルト値
- preferInternal:SDカードに優先的にインストール。SDカードの容量が足りないときに端末インストール。事後インストール可。
- アプリがSDカードにあるときも各種データは端末内。
<追記>
つまり、アプリ側が対応してないと、SDカードに移動することは無理ってことですね。rootedな環境とかは知らない。 -
AndroidアプリからWEB検索させるインテント要点だけ
- Intent search = new Intent(Intent.ACTION_WEB_SEARCH);
- search.putExtra(SearchManager.QUERY, “検索文字列”);
- startActivity(search);
こんな感じでいけるみたい。外部のアプリが立ち上がって検索実行できる。 -
ADT Plugin for Eclipse アップデート
Android Developers Blog: New Editing Features in Eclipse plug-in for Android
AndroidのEclipseプラグインがアップデートしたみたい。
あとでDLすることにして詳細は>http://developer.android.com/intl/ja/sdk/eclipse-adt.htmlあとここ http://tools.android.com/recent
さらに、Google I/O 2011でのプレゼン動画
-
Eclipseが起動しなくなったときの対応の要点だけ
Androidアプリの開発で使うEclipseだけど、作業途中でハングアップ、強制終了後に再起動しても起動中の”building workspace…”あたりで起動がハングしてしまうことがあって、その対応メモ。
- Eclipseの強制終了後、起動しなくなる問題の一つはEclipseの一時ファイル.snapファイルというやつが壊れている事が原因みたい。
- なので、このファイルを削除してしまえばOK。こんな感じ:
rm path/to/workspace/.metadata/.plugins/org.eclipse.core.resources/.snap
rm path/to/workspace/.metadata/.plugins/org.eclipse.core.resources/.projects/*/.*.snap
- これはワークスペースの変更を記録しているファイルで、強制終了後とかに作業状態の復帰とかに使われるものみたい。これが壊れていると復旧途中で止まってしまうということっぽい。
ということで削除後、Eclipseを普通に起動すればきちんと起動するはず。もしくは.metadata/.logを見ると、何かしらエラーログが記録されているはずなのでこれをチェック。
-
Android LogCatがすぐ消えてしまうときの対策howto要点だけ
Androidアプリの開発で使うDDMS(Dalvik Debug Monitor Serviceっていうらしい)についてるLogCat、たまに一瞬だけ表示されてすぐ消える、みたいな現象でバグだと思ってたんだけどすごい単純なことで治るみたいだったのでメモ。
-
Android Widgetのライフサイクルについて要点だけ
Android App Widgetのライフサイクルイベントは4つ。公式ドキュメント読んだだけではいまいち分かりづらかったので調べてみたメモ。
(1)onEnabled(Context context)
一つ目のウィジェットがホームに追加されるとき。(2)onUpdate(Context context, AppWidgetmanager appWidgetManager, int[] appWidgetIds)
ウィジェットがホームに追加されるとき。一つ目のときはonEnabledの直後に呼ばれる。2つ目以降(=同じウィジェットが既にホームに置かれている場合)はこのonUpdateだけがコールされる。
appWidgetIdsには、アップデート対象のウィジェットのIDが入ってる。なので、widgetの追加時には基本的に1つのIDの配列で、定期更新時には2つ以上のIDが入ってる可能性があるっていうことみたい。(3)onDeleted(Context context, int[] appWidgetIds)
ウィジェットがホームから削除されるとき。他にウィジェットが残っているとき(=同じウィジェットがまだホームに置かれている場合)はこのonDeletedだけが呼ばれる。(4)onDisabled(Context context)
ホームから最後のウィジェットが削除されるとき、onDeletedの直後にコールされる。もういっこonReceivedは上記3つが結局コールされるので、通常はあんまり気にしなくて大丈夫みたい。以下4つ以外のBroadcastをなんとかしたい時にきにすれば良い。
- ACTION_APPWIDGET_DELETED→onDeleted
- ACTION_APPWIDGET_DISABLED→onDisabled
- ACTION_APPWIDGET_ENABLED→onEnabled
- ACTION_APPWIDGET_UPDATE→onUpdate
-
Titanium Mobileモジュール開発ドキュメント間違いの要点だけ
JavaScriptを使ってワンソースでAndroidとiOSのクロスプラットフォームができるとして話題なTitanium Mobileのモジュールの作り方を調べた。だけどどうも公式ドキュメントが違ってる(古い?)らしくてむしゃくしゃしたので、ついカッとなった部分のメモ。確かめたのはTitanium Mobile 1.6.2とXcode 4とiOS SDK 4.3です。基本的には以下のドキュメントに沿います。
参照:Module Devloper Guide for iOS(Last edited on May 12, 2011のもの)
要点だけ書くとドキュメントで違っている/足りていない記述が2カ所あることに注意:- できたモジュール(zip)のコピー先はLibraryじゃなくてアプリのルートディレクトリ
- Titanium Mobile 1.6.2(Titanium Developer 1.2.2?)とiOS 4.3の組み合わせではLog/Info系の出力がTitanium Developerのコンソールに出ません。Xcodeで直接実行するか、iOS 4.2以前を使えば出る。
- markdownモジュールはmarkdown2モジュールに変更されているのでbuild.pyの修正が必要。公式どおりにやるとモジュールのビルド過程でimport errorが出る。
もう少し詳しい手順は続きに:
(more…) -
UIWebViewのバウンスアニメを無効にする要点だけ
アプリ内でUIWebViewを使うときに困るのが、タッチ操作でスクロールできてしまうこと。
ネイティブUIにUIWebViewが入りこんでいることが分かって、UIの統一性が失われてしまう。WebViewがドラッグ動作で範囲外までスクロールできる「バウンス動作」が無効にできれば良さそうだけど、、ということで調べたら、出てきたのでメモ。
http://stackoverflow.com/questions/500761/stop-uiwebview-from-bouncing-vertically
for (id subview in webView.subviews)
if ([[subview class] isSubclassOfClass: [UIScrollView class]])
((UIScrollView *)subview).bounces = NO;要はUIWebViewsのsubViewsで取りだした子要素の一覧からUIScrollViewのインスタンスを取り出し、
それのbouncesプロパティを無効にする。これがうまくスクロールをdisableにできれば、気兼ねなくネイティブUIとのハイブリッドが採用できそう。まだ実際には試してないけど後で試してみる予定。