2011年12月7日水曜日

メール削除手順

携帯に届いた迷惑メール削除する

いわゆるガラケーの場合


  1. 携帯開く
  2. メールボタンを押す
  3. 受信ボックスを選択
  4. 受信メールを選択
  5. メニューを押す(届いた迷惑メールが選択されている)
  6. 0(削除)を押す
  7. 1(1件)を押す
  8. 十字キーで削除確認NOからYESへ
  9. YESの確定

一方、スマートフォンの場合


  1. ロック解除
  2. メールアイコンタップ
  3. 全受信をタップ
  4. 右から左へスワイプ(届いた迷惑メールに対して)
  5. 削除タップ(4で削除アイコンが右端に表示される)

そこまで大きく違うわけではないが、スマートフォンの手順に慣れるとガラケーの手順が煩わしく感じる。ガラケーの789がなければスマートフォンに近い感じにはなるのではないか。ポイントは

  • 0(削除)を押したんだから、その1件が対象(7の省略)
  • 0(削除)を押したんだから、確認不要(89の省略)

とはいえ、7の手順で複数選択が可能なので、外せないのだろう。スマートフォンの場合は画面右端に編集ボタンがあって、これをタップすると複数削除可能になる。

ガラケーの操作手順で、どれほどのメールを誤って削除することから回避できたのか、スマートフォンの操作手順になって、どれほどのメールを誤って削除してしまったのか、そういうデータはないかしら。

2011年11月24日木曜日

Graphical Layoutでのエラー


AndroidをEclipseで開発していて、Graphical Layoutを表示しようとすると、下記エラーが発生することがあるようです。
main.xml: You must specifiy a valid layout reference. The layout ID @layout/header is not valid.
レイアウトのxmlでincludeすると発生する? この@layout/headerというのがinclude対象のxmlです。一度発生したら直らなくなりましたが、それまでは見れていたので原因がよくわかりません。

下記URLの手順に従ってWindowBuilderプラグインを入れると解決します。

http://www13.plala.or.jp/naka_jima/Eclipse/chapter01_12.html

2011年10月20日木曜日

Admob続き

ゲームでAdmobを利用する場合、すでにActivityに対してSurfaceViewを継承したView(仮にGameViewとします)を使っていると思います。Admobを利用するためには、さらにAdViewを追加します。この時、どのタイミングでAdViewがaddされるかは不定のようです。1分くらい待っても追加されないこともありました。AdViewが追加されると画面の作りによってはレイアウトが乱れると思います。その場合はAdViewが追加され、GameViewの大きさが変更されるとsurfaceChangedが呼ばれるのでここで任意の処理を行えばよさそうです。

Admob

Android Admobで検索すると、古いバージョンでの実装方法が多く見つかりました。
最新のSDKを落とすと、そこの説明にあるAdManagerというクラスが見つからずつまづきました。

現時点での最新の情報は下記が参考になります。というかそのままです。
http://code.google.com/mobile/ads/docs/android/fundamentals.html

古いバージョンより最新バージョンの方がかなり簡単に実装できます。
コピペしてつまづくとしたら、MY_AD_UNIT_IDは定義されていないので、説明にもある通りパブリッシャIDで置換してください。またAPI Level 7で確認していますが、下記属性はありませんでしたが、特に設定しなくても問題ありませんでした。

uiMode
screenSize
smallestScreenSize

ちなみにuiModeはAPI Level 8から、screenSizeとsmallestScreenSizeはAPI Level 13から導入されたようです。
下記activityの属性説明で確認しました。
http://developer.android.com/intl/ja/guide/topics/manifest/activity-element.html

2011年8月9日火曜日

着信イベントの受信


TelephonyManager#listen で着信イベントの受信ができます。
その時、PhoneStateListener のインスタンスを渡します。
解除する時も同じインスタンスを渡さないと解除されません。

2011年8月5日金曜日

startActivity called from non-Activity context

startActivity called from non-Activity context; forcing Intent.FLAG_ACTIVITY_NEW_TASK for: Intent...

アクティビティではないコンテキストからアクティビティの開始が呼ばれました。
Intent に Intent.FLAG_ACTIVITY_NEW_TASK をつけておきました。

出力レベルはワーニング。
ActivityGroup に TabActivity を乗せて、さらにその TabActivity に乗せた Activity から呼んでいるのが原因のような気がします。

Intent に対して明示的にフラグを付与すればワーニングは消えます。

intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK );

これでどうしてワーニングが消えるのかわからないでいます。

波bot

つらつらとTwitterのbot集を眺めていました。
http://matome.naver.jp/odai/2124511765173833275?&page=4

そこに、ああこれはいいかもと目を引くbotがありました。


http://imgcc.naver.jp/kaze/mission/USER/6/9/66159/0/a5f19ddbcfaf4fc5e3412843102e61cc.jpg/120/120
波の音をツイートするなみボット(@namibot)です。
波の音が聞こえて来たら、すこし気持ちを休めてリフレッシュなう*



なみボットのプロフィールページへ行ってみると、
波botの更新が3月11日で止まっていました。

作者が意図して止めたようです。

それまでは確かに優しい波がそこにはあったことと、
それまでにも激しい波はそこにあっただろうし、
あの時以前にも恐ろしい波はあっただろうし、
言葉が何も出てこなくなりました。

Twitterは言葉を使ったコミュニケーションですが、
言葉を使わない、沈黙するという表現もそこにはあるのだなと、
作者の優しさ、思いやり、やり切れない思いを感じました。

2011年8月4日木曜日

Tabに設定したActivityからのダイアログ表示

new AlertDialog.Builder( this )...
では、エラーが発生する。詳細はこちら。http://unodroid.blogspot.com/2011/05/tab.html

new AlertDialogBuilder( getParent() )...
とし、親のActivityを渡してあげることで解決。
理由は前述のページにあるようにViewRootまで辿ることができず、is your activity running? ちゃんとアクティビティ動いてますか? とエラーになるようだ。

FileFilterの使い方

FileFilter を無名クラスとして実装してあげる。
ディレクトリのみ取得したい場合は、下記の通り

File[] files = file.listFiles( new FileFilter() { public boolean accept( File file ) { return file.isDirectory(); } }; );

2011年7月19日火曜日

Androidの暗号化で利用できるアルゴリズムを調べる

Set<String> names = Security.getAlgorithms( "MessageDigest" );

for ( String name : names )
{
Log.v( TAG, name );
}

APIレベル7での実行結果:

SHA-256
SHA-512
MD5
SHA-1
SHA-384

参考URL:

2011年7月7日木曜日

2011年2月23日水曜日

Boardzの問題

・アクティブユーザが少ない
→同じユーザと同時に対戦になる

・一見さんがしばしば
→マッチングしたものの、放置されてしまって1週間が過ぎる
これは仕方ないか・・
アクティブユーザが増えれば増えるほど、
このケースは今より増えるはず

2011年1月24日月曜日

iPhoneで将棋!

BoardzというiPhone/iPad向けアプリケーションがあります。

このゲームはオンライン対戦できるボードゲームのアプリケーションです。
特徴は、

・持ち時間が1手につき最大1週間
・最大で8面指しが可能

またiPhone/iPadというプラットフォームなので世界中の人と対戦できます。
英語のみのUIとなっていて、最初私も戸惑ったため、簡単な説明を載せておきます。


アプリケーションを起動するとBoardz用のユーザ登録が必要になります。
「Username」に好きな名前を入力し、「Existing User?」で既に登録されていないかチェックし、未登録ならその名前で登録しましょう。
既に存在しているようでしたら、別の名前を考えてください。

ボードゲームはいくつか選択できるようになっています。
「Shogi」を選択し、デフォルトの設定でCreateをタップしてください。
「Opponent」で「Choose」をタップすると、ユーザを指定して対戦することもできます。

「Create」をタップすると次のような画面になります。
左下の「×」をタップしてみましょう。

 ゲームの作成が完了し、Waiting for opponentと対戦相手を待つ状態になります。

対戦相手が見つかり、自分の番になるとYour Moveの部分に表示されます。
その部分をタップすることでその対戦相手の局面が表示されます。
緑の丸が自分の番である目印になります。
赤の丸は相手の番である目印になります。

対戦中に指し手を決定すると上の画面のように「Cancel」と「Submit」が表示されます。
「Submit」をタップすると指し手が相手に送信されます。

最後に投了する方法です。
画面右下の下矢印をタップします。
上のような画面が表示されるので一番下の「Resign」をタップします。

確認ダイアログが表示され、投了する場合はYesをタップします。
投了しなくても完全な詰みとなればゲームは終了します。