2011年12月24日土曜日

原道N50の問題点

原道N50の問題点について。

実際、値段のわりに悪くなくて、概ね満足している(無線LANも問題なし!)が、使っているうちに残念に思えたこと。


・カメラがしょぼい。。

まずインカメラしかない。
これはあらかじめ分かっていて買ったのだけど、いざ使ってみると、やっぱり外カメラが欲しくなった。

また、QRコード認識するアプリ入れても、なぜか認識してくれない。(こちらの方が問題。)
もっとも、QRコード写すのも一苦労になるわけだが。。


・LINEが使えない。

マーケットの無料で一番人気な通話アプリだが、自分のN50端末では対応していなかった。
人によっては、キツイかも??
Skypeはプリインストールされていたが。(自分は使ってない)

⇒フィンガープリント偽装すればいけるらしい。今後検討。。
⇒やりました。
http://yazakikenji.blogspot.jp/2012/04/n50.html


※追記の注意点
OSのバーションは、2.3.1です。
2.3.3ではない。。
つまり、APIレベル10じゃなく9です。
現在2.3というと、ほぼ2.3.3だと思いますから。。

2011年12月23日金曜日

ImageView の配列を作る

ImageView を二次元配列で保持する。

例:5*5の場合。XML でlayout 作成。

ImageView[][]imageView; //(1)

imageView=new ImageView[5][5];

for(int i=0;i<5;i++){
        for(int j=0;j<5;j++){
                  imageView[i][j]=new ImageView(this); //(2)
        }
}

imageView[0][0]=(ImageView)findViewById(R.id.imageview1); //(3)


(1) 変数imageViewで二次元配列を宣言。

(2) 引数で this が必要。引数にContextあるから。

(3) XMLで @+id/imageview1 みたいに設定したものを、R.id.~ で指定。


※追記1 :R.id.~ で指定を繰り返し文で行う方法
R.id.imageview1 はR.java で見ると、int で扱われていて、実態は数字。
だからint 型の配列とかに入れてやれば出来る。

例:
int imageViewId[][]={R.id.imageview1,R.id.imageview2,},{R.id.imageview3,R.id.imageview4};

ImageView[][]imageView=new ImageView[imageViewId.length][imageViewId[0].length];

for(int i=0;i<imageViewId.length;i++){
        for(int j=0;j< imageViewId[0].length;j++){
                imageView[i][j]=(ImageView)findViewById(imageViewId[i][j]);
        }
}
imageViewId.length と imageViewId[0].length のところは、二次元配列で各要素の数が揃っていない場合はダメですね。


※追記2 :リソースから取得して、上記をさらに簡潔にする。
こちら
http://d.hatena.ne.jp/hyoromo/20100123/1264221657
を参考にさせていただきました。

getIdentifier がキー。

例:
ImageView[]imageView=new ImageView[5];

for (int i = 0; i < 5; i++) {
        String strNo = String.format("%02d", i);
        imageView[i]=(ImageView)findViewById(getResources().getIdentifier("ImageView"+strNo , "id" , getPackageName()));
}

二次元配列にするなら、データの持たせ方、リソースでのIDの付け方に工夫が必要。

2011年12月22日木曜日

画面回転しても、画面の状態を保持してくれるメソッドというかマニフェストの設定

Android 端末は、向きによって縦と横が自動で切り替わりますが、
そのままだと、画面回転した時点で画面の状態がリセットされてしまいます。
これを防止する方法。



マニフェストに以下を追加。

<activity
    android:configChanges="orientation|keyboardHidden|" >


画面縦横変化とか、キーボード出された時に対応します。


以下のメソッドを追加してその時の処理も書けます。

@Override
    public void onConfigurationChanged(Configuration newConfig){
    super.onConfigurationChanged(newConfig);
    }



追記:
これを書くと画面回転時、onCreateが呼ばれなくなるので、
onCreateにsetContentView(R.layout.main); を書いていても実行されない。
よって例えば、横画面用のVIEWを用意していても切り替わらない。

状況を維持したまま、縦横画面を切り替える方法を調べてみると、Bundle を使っていちいち保存しないとダメみたいで、、面倒すぎ。。。。

2011年12月21日水曜日

内部クラス内で使える変数について

setOnClickListener
でクリック時の処理を設定する時に、
内部クラスとして、OnClickListener
を指定して、onClick メソッドを書くパターンがあると思うけど、
この内部クラス内で使える変数について制限があるようだ。

http://javafaq.jp/S016.html
の S016 A-14 を参照。

結論としては、
・final宣言されているローカル変数や引数
・グローバル変数
が使える。

2011年12月18日日曜日

原道 N50 ~Android 端末購入~

Android プログラミングを始めてみたものの、そもそも実機を持っていない(笑)

そこで実用+デバック用として、安価な中華パッドに手を出してみました。

原道N50です。(※アマゾンでも売ってますね。)

昨日到着して、いろいろイジってみましたので、まずはその記録から。


・ デバックモードでPCと接続

1: 端末の設定
「提供元不明のアプリ」を「ON」
「USBデバッグ」を「ON」 (こちらはデフォルトでチェック入ってました)

2: ドライバ
マニュアルだと、rockusb.sys を使っている。

メーカーサイト(URLは端末の裏に直接書かれていた)から、それっぽいものを探したところ、「2918量産工具」なるものに上記ファイルが存在した。
※ちなみにダウンロードしたら、rarファイルだったが、なぜか普段の方法では解凍できず、7zipのやつで解凍したらいけた。

ここで問題発生。
このドライバがインストールできない。。

諦めて、AndroidSDK付属のUSBドライバを使用。
※自分の場合は、C直下に置いたので、C:\android-sdks\extras\google\usb_driver にありました。
※デフォルトでチェック入ってた気もしますが、もちろん先にダウンロードしておく必要あります。

こちらは、すんなりインストール完了。

しかし、adb devices コマンドで確認するも、認識していない。。
原因不明でしたが、PC再起動したら認識するようになりました(汗

☆追記☆
上記は、WindowsXP環境でしたが、Windows7環境のPCで試したところ、PCと端末を接続するだけで認識してくれました。(何もする必要なし、楽チン!)
OS新しいと良い事あるんですね(笑)


・ 起動時の音がうるさい

そのまんま。イヤホンつけても、かなり音漏れする(笑)

root化が必要なのかな?と思ったが、
こちら
http://blog.livedoor.jp/woodv/archives/52906379.html
を参考にさせていただき、root化の作業せずに解決!
(というか既にrootが取れるファームウェアだったらしい。。

※念のためメモ
busyboxをインストール。(これ入れただけで、アプリ一覧から選択しても何かメッセージでるだけ。意味あったのだろうか?)

無音のboot.ogg をストレージ直下に置く。

以下を実行

adb shell
mount -o remount,rw /dev/block/mtdblock8 /system
cd /system/media/audio/notifications
mv boot.ogg boot_orig.ogg
cp /mnt/storage/boot.ogg ./
reboot


・ 不要なアプリを削除したい

プリインストールされている中華アプリが邪魔なので。

こちら
http://efmatic.wordpress.com/2011/01/19/xperia%E3%81%AEmoxier%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA%E3%81%BB%E3%81%8B%E3%81%84%E3%82%89%E3%82%93%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B/
を参考にさせていただきました。

※念のためメモ
adb shell

cd /system/app/
ls
でインストールされているアプリのファイル名(*.apk)を確認。

mount
で表示されるもので以下を確認

/dev/block/mtdblock8 /system ext3 ro


確認したら
mount -o remount,rw -t ext3 /dev/block/mtdblock8 /system
で、roからrwへ変更。

あとは
rm /system/app/*.apk
で任意のものを削除。

削除が終わったら
mount -o remount,ro -t ext3 /dev/block/mtdblock8 /system
で戻して、

最後にreboot で再起動。


・ ホームアプリなど

プリインストールされているファームウェアの影響か、デフォルトで横画面固定。。

適当なホームアプリを入れれば、とりあえず縦表示にはなるが、起動時+スリープ解除時は必ず横画面になるので、地味にウザイ。。 が、これは諦めて放置。

最終的にホームアプリは、LiveHome を選びました。


あとは、日本語入力として、出たばかりの Google 日本語入力 を入れたりして終わり。

2011年12月17日土曜日

Android 開発環境セットアップ メモ

忘備録として。

JDKダウンロード
http://www.oracle.com/technetwork/java/javase/downloads/index.html

eclipseダウンロード
http://www.eclipse.org/downloads/

(JDKを標準VMに設定)

eclipse の help からADTセット。
https://dl-ssl.google.com/android/eclipse/

Android SDK もダウンロードされてた。

adb の path とか通す。


※注意
自分の環境(WindowsXP)では、SDKをユーザー配下に置いたら(というかデフォルト設定がそうなってた)、エミュレータが起動するものの画面クリックするとエラーで落ちる状態になった。

エラーメッセージ
問題が発生したため、emulator.exe を終了します。

"Documents and Settings"のスペース(空白)が気に入らないらしい(笑)
C直下に置くこと!

Windows7だと"Users"になるみたいで問題なかった。


ちなみにこれ検索すると、メモリ不足が原因とか出てくるけど、間違い。(というか本当にそういう人もいるかもしれないけど、そんなPCでエミュ動かして開発とか大丈夫か^^;)

2011年12月16日金曜日

String で文字列の比較には、equals() を使え

Java のおさらい

String で文字列の比較には、== ではなく、equals() を使う。

http://d.hatena.ne.jp/ykmbpp/20080703/1215111161
を参照。

純粋に文字列そのものを比較する時、equals() を使用するわけだが、現実的に、こちらの用途しか使う機会ないでしょう。


(追記)
使う機会ありました(汗

HashMapに格納したString要素を削除してNullが入った時に、それを判定する場合、当然ポインタというか参照がNullかどうかをみないといけないので、String要素を格納しているからといって、equals()を使うのではなく、==を使わないとダメ。。というか文字列の比較じゃないんだから当然といえばそれまでだが。。

2011年12月15日木曜日

ブログスタート

最初の投稿です。

他に何もないんですが、個人的に始まりが分かってないとスッキリしないんですよね(笑)