Androidの最近のブログ記事

2009年8月28日(金)~29日(土)に「オープンモバイル・コネクションズ ビジネスキャンプ for Android」開催されるそうです。

 

有料ですが、第一線の方々の講演だけでなく、ハンズオン、懇親会費、昼食費こみなので、結構いいですね。

ちなみにハンズオン講座は、「初心者コース」「3D/UIコース」「AR(拡張現実)コース」があるようです。

Android に興味を持っている人が集まると思いますので、色々と情報交換できそうですね。

参加できる方が羨ましい。。。

 

詳しくは、以下のリンク先から。

  • 【オープンモバイルキャンプ Android】アンドロイドのアプリ開発セミナー【日経BP主催】
    http://coin.nikkeibp.co.jp/coin/ncc/semi/OMBC2009/

 

あわせて読みたい。

「モバイルARアプリ Layar に新バージョン、全世界でダウンロード可能に」
http://japanese.engadget.com/2009/08/19/ar-layar/

の記事をきっかけに、HT-03Aに「Layer Reality Browser 2」をインストールしてみました。

 

とりあえず、使い方も何もわからない状態で、「Popular」タブを押してみると、

見慣れた Flickr の文字が。。。

Popular.png

 

FlickAR Photos」をタップしてみると、先ほど読んだ記事のように、メッシュ状の線が表示されましたが、

記事のようなマークは表示されていません。。。

最寄の本屋に Android の本も売っていない場所なので、そりゃそうだ・・・と一瞬諦めたのですが、

よくよく画面を見てみると、左上の方に「3 results found」の文字が。。。

そして、右上のレーダーっぽい円にも、3つの丸が!!!

flickAR1.png 

 

ゴゴ゙ゴゴ゙コ

どうして、何の観光スポットもない こんな場所でタグが!!!

振り返ってみると、シャっ、シャっ、写真がー!!!

おっおー、近所のxxxではないかー!!!

※タップすると、flickr のサイトにへ・・・(省略)・・・

flickAR2.png

 

次に、「Featured」タブから、「鉄道サーチ」をタップ。

 

ゴゴ゙ゴゴ゙コ

今度は、「50 results found」!

しかも最寄の駅までの距離、あってるっぽい!!!

tetsudo.png

 

おーもーしーろーいーーー。

今すぐ、都会へ行きたい(特にお台場)!

 

※インストールは、Android Market から可能です

※AndroLib.com : http://jp.androlib.com/android.application.com-sprx-layar-jwnq.aspx

android_market.png

Donut の標準カメラアプリを使ってみました。

 

まずは、起動後のメイン画面。

camera_main.png

カメラのプレビューに枠がついています。

右側の列には、上から、「撮影後のサムネイル」「動画/静止画切り替え」「シャッターボタン」。

 

撮影後のサムネイルをタッチすると、右側の列もかわります。

camera_thumbnail.png

 

メニューキーを押すと、メニューが表示されますが、基本的にはCupcakeと同じように見えます。

camera_menu.png

 

その他のサブメニューでは、「Show on Maps」が増えているようにも見えます。

camera_menu_other.png

 

最後に、「動画/静止画切り替え」をタッチして、動画モード。

camera_movie.png

「撮影後のサムネイル」が非表示となって、「シャッターボタン」も変更になります。

 

うーむ。

やはり、ズームが見当たらない。。。

あくまでも開発中のものですが。

Android SDK には、顔認識用の API が標準で含まれています。

※android.media パッケージ - FaceDetector クラス

 

使い方

  1. 顔認識させたい画像の幅、高さ、認識させたい最大数を引数として FaceDetector クラスをインスタンス化する。
  2. 顔認識させたい画像のビットマップ(16bit形式)と結果を受け取る Face 配列を引数として findFaces() メソッドを呼び出す。
  3. findFaces() メソッドの戻り値に、認識した顔の数が返されるので、1以上であれば、Face 配列を参照する。 

 

以下、簡単なサンプルコードです。

Bitmap orgBitmap = // ここに認識させたいBitmapがあるとする
FaceDetector.Face[] faces = new FaceDetector.Face[3]; // 結果受け取り用
FaceDetector detector = new FaceDetector(
    orgBitmap.getWidth(), // ビットマップの幅
    orgBitmap.getHeight(), // ビットマップの高さ
    faces.length); // ここでは、最大3つの顔認識結果を受け取れるように指定
int numFaces = detector.findFaces(orgBitmap, faces); // 顔認識実行
if (numFaces > 0) {
    // ここでは、結果をわかりやすくするために、元のビットマップを複製し、
    // 赤い四角を描画しています
    Bitmap newBitmap = orgBitmap.copy(Bitmap.Config.RGB_565, true);
    Paint paint = new Paint();
    paint.setColor(Color.argb(255, 255, 0, 0)); // 赤
    paint.setStyle(Style.STROKE); // 塗りつぶしなしの線
    Canvas canvas = new Canvas(newBitmap);
    for (int i = 0; i < numFaces; i++) { // 認識した数だけ処理
        Face face = faces[i];
        PointF midPoint = new PointF(0, 0);
        face.getMidPoint(midPoint); // 顔認識結果を取得
        float eyesDistance = face.eyesDistance(); // 顔認識結果を取得
        RectF rect = new RectF(); // 正方形
        rect.left = midPoint.x - eyesDistance / 2;
        rect.top = midPoint.y - eyesDistance / 2;
        rect.right = midPoint.x + eyesDistance / 2;
        rect.bottom = midPoint.y + eyesDistance / 2;
        canvas.drawRect(rect, paint); // 正方形を描画
    }
}

Android Developers の公式ページにある Hello World チュートリアル の次に試すサンプルコードは、
Notepad Tutorial でなく、Android SDK に含まれている SkeletonApp が良いと思います。

※本記事は、友人がHT-03Aを購入したのを記念して、初心者向けに書いております^^;

 

SkeletonApp とは

  • Android SDK に含まれる標準サンプルアプリケーションの一つ。
  • 約140行ほどのソースコードで、ボタン、エディットテキスト、メニューを試すことができます。

SkeletonApp.png

 

Eclipse から SkeletonApp プロジェクトをインポートするには(※1)

  1. Eclipseを起動する。
  2. [File] メニュー > [New] > [Android] をクリックする。
  3. [New Android Project] 画面が表示されたら、
    [Contents] グループボックス内の [Create project from existing source] ラジオボタンをクリックし、
    [Location] エディットテキストに、インストールした Android SDK に含まれる SkeletonApp ディレクトリを入力する。
    ※例えば、C:\Android\android-sdk-windows-1.5_r3\platforms\android-1.5\samples\SkeletonApp など。
  4. すると、[Project name]、[Build Target]、[Application name]、[Min SDK Version] が自動的に入力されるので、[Finish] ボタンを押して、完了させる。
  5. Package Explorer で SkeletonActivity が追加されていれば成功です。

import.png

package_explorer.png

 

使い方

  • メソッド(メンバ関数)にブレイクポイントを設定して、実際のソースコードをデバッグしてみてください(※2)。
  • 慣れてきたら、ボタン、または、メニューアイテムを追加して、
    それらが押された時に、トースト(※3)を表示するようなコードを追加してみてください。

 

SkeletonApp の次に試すサンプルコードは・・・

  • 同じく、Android SDK に含まれる標準サンプルアプリケーションの一つである ApiDemos です。
    Android アプリケーションで実現できる機能の多くを見ることができるので、
    興味がある機能をデバッグしながら、対応する API を調べてみてください。

 

あわせて読みたい

HTC Magic(HT-03A) などのトラックボールには、ライトが搭載されており、
電話の着信があったときなどにトラックボールが光ます。

では、どうやって光らせるんだろう?と調べていたら、HardwareService クラス setAttentionLight() メソッドに行き着きました(多分コレ?)。

しかしながら、この HadrwareService クラスは、残念ながら非公開クラスでした。。。

他にも、pulseBreathingLight() メソッドみたいなものもあって、たぶんアレだと思うのですが。。。

公開クラスにしてくれればいいのに。。。

frameworks/base/services/java/com/android/server/HardwareService.java

逆引きAndroid入門に書いていた

フルスクリーン(Full Screen)/全画面表示をするには

を更新しました。

 

具体的には、AndroidManifest.xml でフルスクリーン/全画面表示したいアクティビティのテーマで、

android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"

を指定する方法を(方法2として)追記しました。

 

標準のカメラアプリが、このような実装になっていました。

たいていの場合には、こっちの方がお手軽かも。

詳しくは、「フルスクリーン(Full Screen)/全画面表示をするには - 逆引きAndroid入門」に記載しています。

 

あわせて読みたい

アクティビティ(画面)の背景を透過にするには - 逆引きAndroid入門

日経Linux2009年9月号を読みました。

気になった記事は、以下の2点。

 

  • Android機「HT-03A」をLinuxに接続してみる
    リモート操作やネットストレージを各種無料ソフトで有効活用
    P.10~P.11

VLC Remote、ConnectBot、SwiFTP、OnAir などについて書かれています。

 

  • 次世代モバイルOS Moblinの最新技術
    P.153~P.156

FastBoot で起動時間5秒を実現するための取り組みなども書かれています。

これ、Android にも適用してほしいです。

 

日経 Linux (リナックス) 2009年 09月号 [雑誌]

com.android.internal.util (非公開)パッケージに FastMath というクラスがあり、
小数点丸め計算の高速版メソッドがありましたので、どれくらい高速なのか実験してみました。

 

実験用ソースコード 

package com.adakoda.android.fastmathtest;
import android.app.Activity;
import android.os.Bundle;
import android.os.SystemClock;
import android.util.Log;
public class FastMathTestActivity extends Activity {
    // This is copy of com.android.internal.util.FastMath.round method
    public static int round(float x) {
        long lx = (long)(x * (65536 * 256f));
        return (int)((lx + 0x800000) >> 24);
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        long start = SystemClock.uptimeMillis();
        {
            float a = 0.1f;
            for (int i = 0; i < 1000000; i++) {
//                Math.round(a);    // 1.java.lang.Math
                round(a);        // 2.com.android.internal.util.FastMath
            }
        }
        long end = SystemClock.uptimeMillis();
        Log.v("time[ms]", String.valueOf(end - start));
    }
}

 

実験結果

単精度小数点を100万回丸め計算するのに要した時間は、
以下のとおり FastMath.round() の方が、java.lang.Math.round() より 約2.25倍高速でした(≠ 赤い彗星)。

  1. java.lang.Math.round() ・・・ 6,626 [ms]
  2. FastMath.round() ・・・ 2,940[ms]

 

なんだか懐かしい感じです。

[Android] NDK でスクリーンショット(キャプチャ)アプリを作るも root 権限が

の続き。

androidzaurus先生のはてぶの指摘にしたがい、Androidアプリ内からNDKでadbdに接続してみました。

 

ループバックアドレスの5037ポートに接続してみると。

 

「せっ、せっ、接続できてた・・・」

 

何かの間違いかと思って、続けて write() してみても、エラーにならない。。。(((;゜Д゜))

 

おそるおそる read() してみても、エラーにならない。。。((((;゜Д゜)))

 

で、肝心のadbdから読む込んだバッファをみてみると、

adbd_responce.png

おおおっー。"FAIL"の文字が!!!

 

なんで"FAIL"で喜んでいるかというと、この文字列は、adbdが作っているからなんです。

期待値は、"OKAY"なんですが、それはさておき、ハンドシェイクは成功ということになります。

 

残念ながら時間切れなので、ここまでです。

 

誰か、後は頼んだよ!(これ以上無理かもしんないですが・・・)


※追記:エミュレータだと接続できましたが、HT-03Aだと接続できませんでした・・・orz...

<<前のページへ 1516171819202122232425

Android 楽しいよ!

2010年11月

  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        

自作フリーソフトウェア