2013 年 11 月 20 日

モバイルブラウザからアプリを呼び出す方法

3140-logo

アプリに連動したウェブサイトから、アプリを呼び出したいと思ったことはありませんか。アクティビティのインテントフィルタをURIスキームで定義すると、他のアプリとの連携がURIで利用できるようになります。もちろん、引き渡せる情報はURIパラメータなので、インテントによる起動ほど柔軟ではありません。

最近、ディープリンクが注目されだして、ブラウザからアプリの詳細ページへ直接リンクをつくること(ディープリンク)で、ユーザビリティを向上させることが求められています。Androidブラウザのグーグルの検索結果から直接アプリの詳細ページへジャンプできるようにするという方法があります(Google 検索用 App Indexing)。

続きを読む »

2013 年 11 月 9 日

Percelでアプリの状態を保存・復元

9999-logo

アンドロイドのアクティビティは、バックグラウンドにまわされると、OSからいつ終了(onDestoryを呼出)させられてもおかしくない状態になります。

たとえば、アプリから異なるアプリのアクティビティをインテントで呼び出した後、このアクティビティからの応答を待っているときに、一旦終了させられて、応答が返ったとき再生成されonCreateが呼出させることがあります。

このとき、アプリのアクティビティの状態(たとえば、選択されたタブとか、リストのチェックなど)を復元してやる必要があります。アクティビティが新たに起動しonCreateが呼出されるので、こういった情報は残りません。

これはアンドロイドのアクティビティのライフサイクルの特徴で、アプリケーションプログラマは、これを想定してアプリを開発する必要があります。

続きを読む »

2013 年 11 月 8 日

ウィジェットのセル数が異なってしまうとき

3087-logo

今のところ、iphoneにはなくてandroidに存在する機能の一つであるウィジェットは便利なものです。ホーム画面が散らかるとはいえ、利用次第で操作性が向上します。

ウィジェットを配置するとき、1×1,4×1などの表記がありますが、ウィジェットの幅や高さはセル単位で示されています。開発時はセル数ではなく、決められた計算式でdipという単位で指定します。

しかし、API Level14からこの計算式が大きく変更されたことで、想定したウィジェットセル数が正しく認識されないという問題があるようです。アプリが動作するOSのバージョンにより、セル数が変わってしまい、ウィジェットが配置できない場合もあります。こんなときの対処方法をまとめておきたいと思います。

続きを読む »

2013 年 11 月 8 日

アンドロイドのSDカードパスの取得方法

3074-logo

今回は、アンドロイドのSDカードパスの取得方法をご紹介します。一般的には、Environment.getExternalStorageDirectory()を利用すれば取得できるだろうと考えがちですが、実はSDカードのパスとは限りません。Externalという言葉が外部とかSDカードを連想しがちですが、どちらかというと拡張と考えると理解しやすいです。

KitKatの詳細が公開されましたが、SDカードに関する扱いはまた異なってくるかもしれません。KitKatが早急に広まることで、Gingerbread対応(2.3)をしなくてよくなれば、本当に助かるのですが、各ベンダーごとの実装が存在するので、そう簡単にはいかないでしょう。

続きを読む »

2013 年 10 月 24 日

気の合う仲間募集(プログラマ)

3057-joinus

弊社では、一緒にスマートフォンアプリを開発してくれる仲間を募集しています。スマートフォンやタブレットアプリを開発している人、もしくはしたい人、ぜひ問い合わせください。

これは正社員の募集でも、アルバイトの募集でもありません。
フリーランスの方や、これからフリーランスとして独立したい人を対象としています(20~30歳代前半の男性で日本語ネイティブの方)。申し訳ありませんが、求人広告ではないので、年齢と性別限定です。
そして、一番大事なのは、ぼくたちと「気があう」って、とこです(最重要点)。
特典として、フリーランスになることで、わからないこと、困ることは色々アドバイスできると思います。

後、やっぱり大阪近郊の方でお願いします。一緒にやっていけるとなれば、どこへ行ってもらってもいいのですが、それまでは顔を合わせてやっていきたいです。お問い合わせ、お待ちしております。

2013 年 9 月 7 日

アンドロイドアプリのメモリ容量を取得する(後編)

3041-logo

前編では、/proc/meminfoの内容を元にアンドロイドで利用できるメモリ量の求め方を考察した。後編では、動作している各アプリのメモリ利用量の取得方法と、そこから利用可能メモリ量を推察してみたい。

アンドロイドアプリの起動はzygote(DVMのデーモン)が実行する。zygoteから起動(fork)された各アプリが必要なメモリを占有するが、共通部分まで、アプリごとに占有してしまうとあっという間にメモリが不足してしまう。

そこで、COW(Copy On Write)と呼ばれる手法で、起動時はzygoteとメモリ空間を共有している(shared)。その後、必要になれば、アプリ専用のメモリ(private)に置き換わる。

それに加えて、各アプリ内では、必要のなくなったメモリを回収するガベージコレクションを実行し、空きメモリを確保しようとする。できるだけメモリを効率よく扱うために、非常に複雑なメモリ管理が行われている。

続きを読む »

2013 年 9 月 6 日

アンドロイドアプリのメモリ容量を取得する(前編)

3024-logo

アンドロイドはLinuxカーネル(2.6.x-3.x)をベースにしたOSに、JavaVM(DalvikVM)を実装しており、複雑なメモリ管理を行っている。

スマートフォンの限られたリソース環境の中で、アプリケーションが快適に動作するように設計されている。メモリが足りなくなるとアプリが突然終了したり、処理速度が遅くなるので、一般のユーザーもメモリがどれぐらい空いているかといったことに関心があるだろう。

設定で実行中のアプリのメモリ利用量を見ることができるが、これは具体的にはどこの値を見てるのだろうか。スマートフォンのスペックから搭載されているメモリ容量はわかるが、実際利用できるメモリ量はどれぐらいだろうか。

続きを読む »

2013 年 9 月 3 日

アンドロイドアプリのinstallLocationを取得する

3010-logo

前回はキャッシュ消去するためにハイドメソッドを利用した方法を紹介したが、ハイドメソッドだけでなくハイドアトリビュートが存在する。
たとえば、アンドロイドアプリのManifestには、インストールロケーションを指定できる(Android2.2以上)。この指定はこのアプリがSDに移動可能かどうかを設定する。
この値をわかれば、事前にSDカードへ移動可能かどうか知ることが可能になる。しかし、この値を取得するAPIは存在しない。
AndroidManifest.xmlを読もうとしても難読化されているので、簡単には読めないだろう。

続きを読む »

2013 年 9 月 2 日

アンドロイドアプリのキャッシュ削除

2995-logo

アンドロイドアプリは、必要に応じてキャッシュデータを保存する。
アプリを使っている間に、いつのまにかキャッシュが増加して、ストレージを圧迫していくことになる。
アプリのキャッシュは設定のアプリケーション管理で、消去できる。またAndroid4.2からは一括でキャッシュを消去する機能が追加された。
4.2より前のOSで、全てのアプリのキャッシュを一括消去するには、キャッシュクリーナーやタスクキラーと呼ばれるユーティリティアプリを使うとよいだろう。

ゲームや役に立つアプリをいきなり作ろうと思っても、まずアイデアが浮かばないのが現実だろう。そんなときは、ユーティリティアプリから始めて見るのはいいかもしれない。

続きを読む »

2013 年 8 月 28 日

MacOS 10.7,10.8でhostsファイルが無効になる

2978-logo

2013年5月ぐらいまでは、hostsファイルでの名前解決ができていたのに、突然利かなくなるという現象にであった。
去年の5月ぐらいに10.7にアップデートしてから、10.7.5になっていたが、特に何かしたわけでもなく、特別なアプリをインストールしたわけでもなかった。

通常使うには不便はないが、Webアプリの開発時に、まだ非公開のホスト名をhostsに登録して、仮想ホストで開発環境を構築しているので、これができないのは痛い。
MacのWebサイトのクリエイターも、概ねこんな環境で作業しているであろうから、困っている方もいるのではないだろうか。

続きを読む »