6月 12

GWに取り組んだA3 (Android Application Award 2010 Spring) ですが、先日最終ノミネート作品が発表されました。最終的な結果は6月24日に表彰式を行い、そこで発表されるということです。応募者には事前に『我こそはという方は、ぜひ6月24日のスケジュールを空けてお待ちください。』という挑戦的なメールが来ており、しっかりスケジュールを空け、航空券の手配までして(嘘)待っていただけに残念です。

さて、A3に応募した「コールW Quad」とその姉妹品「メールW Quad」のリリースして1ヶ月近く経過したマーケットでの販売状況なのですが、以下の通りの散々な結果です。

アプリ名称 Download Active installs リリース日
コールW Quad 57 37 (64%) 2010/05/16
メールW Quad 26 19 (73%) 2010/05/16

当初、100ダウンロードまでは100円の優待価格とし、その後250円にしてがっぽりと皮算用していたのですが、、、、しかもコールW Quad/メールW Quad を購入していただいた方が購入をキャンセルし、コールW Pro/メールW Pro を買い直すといったことも数多く見られました。コールW Free/メールW Free のときにでていた省スペースをとことん突き詰めた作品のつもりだったのですが、ここまではやり過ぎだったようです。

さて、これに懲りずそろそろ次の動きもしていきたいところです。アプリのアイデアについてもいろいろ浮かんではきていますので sak+ ファンのみなさまは期待してお待ちください。(いるのかそんな人w)


Posted by sak

Tagged with:
5月 16

コールW Quad と メールW Quad を公開しました。ウィジェットアプリケーションです。ホーム画面に配置したイメージは以下のようになります。

コールW/メールWといえばこれまでに Free版(無料)、Pro版(¥100)とリリースして来ましたのでこれが第3弾となります。価格は¥250程度を考えていますが最初の100ダウンロードまでは特別価格¥100にします。是非、早めに入手してください。

機能はこれまでのコールW/メールWシリーズと同様でこれを使用することでそれぞれ予め登録した相手に簡単に電話やメールをすることができるようになります。今回の Quad では要望の強い省スペースを実現しました。1×1のウィジェットの中に4人までの連絡先が登録できます。

これまでリリースしたコールW/メールWシリーズのウィジェットを全てホーム画面に並べるとこうなります。

ちなみに コールW Quad は A3 への応募作品です。

実はゴールデンウィーク期間中、A3(Android Application Award 2010 Spring)にアプリを応募しようとずっとネタを考えていたのですが、なかなか思いつかずアプリの応募は既存の作品(コールW Pro)で行おうと思っていた矢先でした。ふと pcm2a さん作の More Icons Widget を使ってみて。急にひらめきました。素敵なアプリを開発した pcm2a さんに感謝します。

賞を取れるとは思っていませんが、これまで Android Developer Challenge などこの手の祭りには参加できていませんでしたので、今回は結果がでるまでは楽しみたいと思っています。


Posted by sak

Tagged with:
5月 05

アンドロイダー月間アクセスランキングTOP50(2010年4月)が発表になっています。この中で コールW Free がなんと 41位 にランクイン。微妙な順位なのですが数多いアプリの中のTOP50にランクインしたことを素直に喜んでおきたいところです。ちなみに過去のランキングを調べてみたところ 2月はTOP20まで 3月はTOP30 までだったんですね。今回は50位までアプリの数を増やしているのでようやく顔を出してきたというところでしょうか? 日本でのアンドロイド端末ユーザの増加に伴い今後の日本のライバルアプリケーションが続々と登場すると思いますが、なんとかこの位置をキープしたいところです。


Posted by sak

4月 30

といっても不具合修正です。

ことの発端

海外のユーザさんのコメント欄にやれ Droid で fc (force close=強制終了) しただの Hero で fc しただの書かれていましたが自分の環境では起きたこと無いし海外の端末の環境で起きる環境依存の不具合だろうくらいに思っていたのですが、最近になって日本のあるユーザさんから不具合をこの指摘するメールをいただきました。端末は私も愛用している HT-03A で発生したということです。何度かやり取りさせていただく中でエラーが発生した場面をわざわざビデオに収めて送っていただきました。証拠をつきつけられては逃げられません。よし直すか。といいつつも中々時間が取れずのびのびになっていました。GWに入り時間もようやく取れたのでやってみました。

まずは再現を

修正する前にまずは確実に再現する手順を見つけなくてはいけません。どうやらコンタクトのユーザ数が多いと出るらしいとのことだったのでまずはテスト用のユーザの作成です。ですが1件1件ユーザを登録していたのでは大変です。CSVファイルを用意して G-MAIL のインポートを使うことにしましょう。手順は以下の通りです。

  1. データを1件、手動で登録する。
  2. 登録した一旦エクスポートして CSVファイルのテンプレートとする。
  3. テンプレートを基に300件のデータを作るスクリプトを作成する。
  4. スクリプトを実行して、CSVファイルを作成する。
  5. CSVファイルをインポートする。
  6. データが端末と同期するのを待つ。

で、やってみたところ直ぐに現象を再現させることができました。確実に。

そして修正へ

症状からだいたいの辺りはついていたのですがソースを見て直ぐに気がつきました。close してない。コンタクトを表示するロジックの中で毎回コンテントプロバイダへのクエリを managedQuery を使用して実行してるわけなのですが close 処理が入っていません。試しに close を入れるとあら不思議、強制終了しなくなりました。以前、同じ失敗をしたことがあるのですがまたやってしまいました。

修正点は以下のコードに27行目の c.close(); を1行追加しただけです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
    public class MyViewBinder implements SimpleCursorAdapter.ViewBinder {
       
//      @Override
        public boolean setViewValue(View view, Cursor cursor, int columnIndex)
        {
            if ((columnIndex == cursor.getColumnIndex(ContactMethods.PERSON_ID) && !isEclair()) ||
                (columnIndex == cursor.getColumnIndex("photo_id") && isEclair())) {
                String[] projection_eclair = { "data15" };  // ContactsContract.CommonDataKinds.Photo.PHOTO
                String[] projection = { Photos.DATA };
               
                Uri content_uri = isEclair() ?
                        Uri.parse("content://com.android.contacts/data") :  // ContactsContract.Data.CONTENT_URI
                        Photos.CONTENT_URI;
               
                String _id = cursor.getString(columnIndex);
                if (_id == null) {
                    ((ImageView)view).setImageResource(R.drawable.ic_contact_picture);
                    return true;
                }
               
                int person_id = Integer.parseInt(_id);
                Uri uri = ContentUris.withAppendedId(content_uri, person_id);
               
                Cursor c = managedQuery(uri, isEclair() ? projection_eclair : projection, null, null, null);
                c.moveToFirst();
                byte[] photoData = c.getBlob(0);
                c.close();
               
                if (photoData != null)
                    ((ImageView)view).setImageBitmap(BitmapFactory.decodeByteArray(photoData, 0, photoData.length));
                else
                    ((ImageView)view).setImageResource(R.drawable.ic_contact_picture);
                return true;
       
            } else if ((columnIndex == cursor.getColumnIndex(ContactMethods.TYPE) && !isEclair()) ||
                       (columnIndex == cursor.getColumnIndex("data2") && isEclair())) {
                String type;
                int ntype = Integer.parseInt(cursor.getString(columnIndex));
                if (ntype == Phones.TYPE_MOBILE)        // 2
                    type = getString(R.string.type_mobile);
                else if (ntype == Phones.TYPE_HOME)     // 1
                    type = getString(R.string.type_home);
                else if (ntype == Phones.TYPE_WORK)     // 3
                    type = getString(R.string.type_work);
                else
                    type = getString(R.string.type_other);
                ((TextView)view).setText(type);
                return true;
            }
            return false;
        }
    }

他のアプリも同様に

コールW Free と同様に メールW Free, コールW Pro, メールW Pro にも同じ問題があったので修正しました。最後に修正したのが去年の12月ですからほぼ4ヶ月ぶりの更新です。

最後に

コードを修正した後、もしや?と思って修正前のアプリを自分の環境で試したところコンタクトの選択で強制終了が発生しました。問題はコンタクトのユーザ数ではなく、表示させたデータの数なのでした。(自分の環境はデータ数も少なくスクロールもそれほど必要なかったので気がつかなかったのですね。)結果的に不要な作業をやってしまったことになりますが、ブログ用のキャプチャー画像に利用できたし「結果オーライ」ってことで。


Posted by sak

Tagged with:
preload preload preload