futabooo blog

色々手をつけすぎてすぐに忘れるので備忘録

SurfaceViewのsurfaceCreated()が呼ばれるタイミング

ライフサイクルとかそこら辺とのかねあいの話ではないです。

結論
XMLで下の2つの状態でsetContentViewした時、
1つ目の場合だとsetContentViewのタイミングでsurfaceCreated()が呼ばれる。
2つ目の場合だとsetVisibility(View.VISIBLE)したタイミングでsurfaceCreated()が呼ばれる。

android:visibility="visible"
android:visibility="invisible"

AndroidのOSバージョンを表す定数たち

OSのバージョンごとに処理を分けたい時とかに使える。

3 = Build.VERSION_CODES.CUPCAKE
4 = Build.VERSION_CODES.DONUT
5 = Build.VERSION_CODES.ECLAIR
6 = Build.VERSION_CODES.ECLAIR_0_1
7 = Build.VERSION_CODES.ECLAIR_MR1
8 = Build.VERSION_CODES.FROYO
9 = Build.VERSION_CODES.GINGERBREAD
10 = Build.VERSION_CODES.GINGERBREAD_MR1
11 = Build.VERSION_CODES.HONEYCOMB
12 = Build.VERSION_CODES.HONEYCOMB_MR1
13 = Build.VERSION_CODES.HONEYCOMB_MR2
14 = Build.VERSION_CODES.ICE_CREAM_SANDWICH
15 = Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1
16 = Build.VERSION_CODES.JELLY_BEAN
17 = Build.VERSION_CODES.JELLY_BEAN_MR1
18 = Build.VERSION_CODES.JELLY_BEAN_MR2
19 = Build.VERSION_CODES.KITKAT



参考
http://developer.android.com/reference/android/os/Build.VERSION_CODES.html

Androidでカスタムdialog

背景画像がデフォのアイコン画像なのでださいけども。
こんなかんじのが最終的にできます。
f:id:futabooo:20131108014918p:plain


MainActivity

public class MainActivity extends Activity implements View.OnClickListener {

    private Context context;
    private Button button;
    private Dialog dialog;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        context = this;
        button = (Button) findViewById(R.id.button);
        button.setOnClickListener(this);
    }

    @Override
    protected void onDestroy() {
        if (dialog != null) {
            dialog.dismiss();
            button.setEnabled(true);
        }
        super.onDestroy();
    }

    @Override
    public void onClick(View v) {
        v.setEnabled(false);
        AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() {

            @Override
            protected void onPreExecute() {
                dialog = new Dialog(context, R.style.AppBaseTheme_CustomDialog);
                dialog.setContentView(R.layout.custom_dialog);
                dialog.setCancelable(false);
                dialog.getWindow().setBackgroundDrawable(getResources().getDrawable(R.drawable.ic_launcher));
                dialog.getWindow().getAttributes().width = ViewGroup.LayoutParams.FILL_PARENT;
                dialog.getWindow().getAttributes().height = ViewGroup.LayoutParams.FILL_PARENT;
                dialog.show();
            }

            @Override
            protected Void doInBackground(Void... arg0) {
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                return null;
            }

            @Override
            protected void onPostExecute(Void result) {
                if (dialog != null) {
                    dialog.dismiss();
                    button.setEnabled(true);
                }
            }

        };
        task.execute((Void[]) null);
    }


main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:gravity="center">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="show dialog" />
</LinearLayout>


theme_custom_dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="AppBaseTheme.CustomDialog" parent="android:Theme.DeviceDefault.Dialog">

        <item name="android:windowNoTitle">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
    </style>

</resources>


custom_dialog.xml

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ProgressBar
        android:layout_centerInParent="true"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content" />

</RelativeLayout>


引数にActivityを渡す方法

MainActivityという名前のActivityクラスを渡す場合。

まずはNG

AsyncHttpRequest asyncHttpRequest = new AsyncHttpRequest(this);

こっちが正解

AsyncHttpRequest asyncHttpRequest = new AsyncHttpRequest(MainActivity.this);



EclipseでAndroidプロジェクトのbinとgenをSVN管理対象からはずす方法

AndroidプロジェクトをSVNでバージョン管理し始めた頃は何がなんだかよく分からないけど、
プロジェクトごと全部コミットしていました。
なんかファイルを少なくコミットして動かなくなったら嫌だなぁという思いからです。

新卒で開発に携わるようになって、バージョン管理なんて初めて触ったし。。。

しかししばらくして慣れてくるとgenは自動生成だからバージョン管理しなくても良いこと、
binはコンパイルして勝手にできること、.classpathと.projectも勝手に作られることなどがわかりました。

だから余計なファイルはバージョン管理から外したいけど、その方法がわからなかったので備忘録!

詳細はこちら
http://rtaki.blogspot.jp/2010/11/subclipse-bin.html


(´・ω・`)

native driverを使ってみるまでにしたこと

基本的にはgooglecodeの手順を参照しながら。
https://code.google.com/p/nativedriver/wiki/GettingStartedAndroid

1.プロジェクトをcheckout

まずはプロジェクトをチェックアウト。

svn checkout https://nativedriver.googlecode.com/svn/trunk nativedriver --username {hogehoge@gmail.com}


するとなにやらエラーが表示された。

Error validating server certificate for

本当は4行ぐらいずらっと出てきたけど、ここまでをググると理由はすぐに分かった。
どうやら証明書が正しいか?と聞いているらしい。
正しいので、accseptを表す「p」を打ち込んでエンター!!

無事チェックアウト完了。

2プロジェクトをビルドする

デフォルトだと、プロジェクトは下記にチェックアウトされる模様。

/Users/futabooo/nativedriver

ライブラリーのビルドを行う。

/Users/futabooo% cd nativedriver/android
/Users/futabooo/nativedriver/android% ant

ビルド成功。

compile:

BUILD SUCCESSFUL
Total time: 41 seconds

エクリプスのプロジェクトが下記のパスにできてました。

/Users/futabooo/nativedriver/android/sample-aut/simplelayouts

3プロジェクトのインポート

さっきできたsimplelayoutのプロジェクトをEclipseにインポート。
このプロジェクトは被テストプロジェクト。

もうひとつテストプロジェクトをインポート
パスはこちら

/Users/futabooo/nativedriver/android/test

※プロジェクトをインポートしたあとはBuildPassで必要な物にチェックを入れておく必要がありました。


4実機へインストールする

simplelayoutをインストール後起動するとこんな感じ。
f:id:futabooo:20130408015124p:plain

5テストの実行

サンプルはmanifestとか特に弄る必要がないようなので、そのままコマンドプロンプトでコマンドを実行する。

adb shell am instrument com.google.android.testing.nativedriver.simplelayouts/com.google.android.testing.nativedriver.server.ServerInstrumentation

これはNativeDriverクライアントがノーマルなTCP通信を通じて端末にアクセスできるようにするため。
だそうです。参考URL

adb forward tcp:54129 tcp:54129

ここまできたらEclipseにインポートしたtestのプロジェクトを実行。
その際JUnitTestを選択。
Eclipse JUnit Launcherを選択して実行。

テストが始まる!\(^o^)/

以上

GalaxyS2のUSBドライバー

http://www.samsung.com/jp/support/model/SGH-N033LKNDCM-downloads

Androidの開発で使うだけだからKiesなんて入れたくない!
って思って探した。
見つけるのに30分もかかった。
最初はUSのサポートページからやろうとしたけどモデル番号が日本のには書いてなかった\(^o^)/