2011年6月22日水曜日

エラー・例外をLogに出力 - android -

onCreateでこんな感じであらかじめ処理を指定しておけば、
いちいち書かなくても例外とかが確認できて便利。


@Override
    public void onCreate(Bundle savedInstanceState) {
        Log.d(tag, "onCreate");
        Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {

            // catchしなかった例外を拾ってログに出力するようにしています
            @Override
            public void uncaughtException(Thread thread, Throwable e) {
                Log.e("tag", e.toString());
                StackTraceElement[] elements = e.getStackTrace();
                for (StackTraceElement element : elements) {
                    Log.e("tag", element.toString());
                }
            }
        });

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

2011年5月31日火曜日

エミュレータの音がでない - android -

エミュレータで音量等を変更しても何の音も出ない。
マナーモードに設定されています
とか何とか。。。

とりあえずmp3を再生すべく
adb shell から sdcard にディレクトリを作って適当なファイルを突っ込む。↓
これだけでは再生できないのでエミュレータから
Dev Tools -> Media Scanner
で音楽を再生すると無事成功!
着信音にmp3ファイルを指定するとなぜかその他の音も出るようになった=3


あんまりエミュレータはあてにならないっぽいなー。
DDMSもなぜかファイルエクスプローラもエラーでまくるし、あんまり役に立たない。
Dev Tools ってなんだろ…?初めて使いました。
また調べることが増えた。

2011年5月24日火曜日

位置情報とかGeocoderとかLocationManagerとか

LocationManager はエミュレータの API レベルが8以上だと使えませんでした。
APIレベル7なら大丈夫みたい。
8以上だとエミュレータが落ちるし・・・。(ウチだけか?)たのむぜgoogle先生(#^ω^)

GeocoderクラスをつかってLocaleから住所を取得。↓
Geocoder geocoder = new Geocoder(context, Locale.JAPAN);
List addressList =
geocoder.getFromLocation(locale.getLatitude(), locale.getLongitude(), 5);// 引数末尾は返す検索結果数(1~5推奨とか)

String resule;
for(Address address: addressList){
    String addressLine = address.getAddressLine(1);
    if(addressLine != null &&
        (result == null || result.rength() < addressLine.rength()))
    result = addressLine;
}
addressLineの2行目で一番長いのをもってくると。
1行目は国名が入っているのでそれ以外は場所によって通りの名前だったり住所だったりするみたいだが、大体住所が入ってる。ただ〇丁目までだったり〇丁目△ー□だったりするので一番長いのを使ってみる。もしかすると住所のほうが通りの名前より短い場合もあるかもしれないので、このまま使うのはまずい・・・かなー。
メモ


method

return
getCoundryName()国名
getAdminArea()都道府県
getSubAdminArea()よくわかりません
getLocality()市区町村
getSubLocality()これまた不明
getFeatureName()AddressLineの最後の方…
getPostalCode()郵便番号
getPremises()これも不明
getThoroughfare()意味としては通りとからしいが取得できず
getSubThoroughfare()〇丁目?

通りすがりの人教えてくれんかな |ω・`)
 googlemapでアドレスバーにスクリプト入れると座標がでる
javascript:void(prompt('',gApplication.getMap().getCenter()));
 
なんか、とにかく使い勝手わるくね?
あんまり日本向けになってないのかな。
なんで戻り値がAddressのリストで、引数にリストのインデックスの最大値って意図がわかりません。
中身も住所だったり地名、通りの名前だったり郵便番号だったり。
Addressクラスもしっくり来るメソッドないっぽいし・・・。

2011年5月7日土曜日

画面いっぱいに表示されない…

エミュレータの画面サイズを自分で指定するとなぜかウィンドウいっぱいに
表示されないという事象が …
なぜだかよくわかってないけどとりあえず manifestでmin SDK versionを4とすると解決した。

こちらを参考にしました↓

http://ameblo.jp/strobesystems/entry-10797671979.html

追記:
android1.5まではHVGA(320×480)まで?しか?サポートしてないそうで
それが原因のようで。

2011年4月28日木曜日

タイトル周りのメモ

・タイトルを非表示に

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
   //SetContentView()の前に行う必要がある 
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.main);
}

・タイトルにアイコンを表示させる

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        requestWindowFeature(Window.FEATURE_LEFT_ICON);

        setContentView(R.layout.main);

        setFeatureDrawbleResource(Window.FEATURE_LEFT_ICON,R.drawable.icon);
}

・タイトルにプログレスバーを表示させる

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        requestWindowFeature(Window.FEATURE_PROGRESS);
        //クルクルの方 Window.FEATURE_INDETERMINATE_PROGRESS
        setContentView(R.layout.main);

        setProgressBarVisibility(true);
        //setProgressBarIndeterminateVisibility(true);

}

・ (タイトルじゃないけど)フルスクリーン
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
Manifestでも出来る。
<activity android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen">
themeはほかにもいろいろスタイルを設定できるみたい。↓
http://developer.android.com/reference/android/R.style.html

2011年4月27日水曜日

JUnitを使って画面遷移のテストをする

ActivityMonitor クラスを使用
テストはActivityInstrumentationTestCase2<T>を継承したクラスで行う。

ActivityMonitor monitor = new AcrivityMonitor(
String class, Instrumentation.ActivityResult result, boolean block)

class = 対象のクラス名
result = モニタがヒットした場合に返される…Can be null なのでとりあえずnull
block = モニタがActivityをブロックするかとかなんとか???

ActivityMonitor monitor = new ActivityMonitor("MyActivity", null, false true);
getInstrumentation().addMonitor(monitor);

~~対象のアクティビティを呼び出す処理~~

assertEquals(1, monitor.getHits());

とりあえず出来てそう。
※UIへの操作はrunOnUiThreadメソッドを使うこと。

第三引数をtrueにしておかないとテストが進まなかったり・・・なにやらActivityが居座って入るような?