eclipse設定
新規にワークスペースを作成したら
- SDKの所在を設定
- Window>Preferences>AndroidのSDK LocationにSDKのインストールフォルダ(toolsやadd-onsの親)を指定しApply または OK → Target Name, Vendor,...の表にいくつかのTarget Nameが追加される。
仮想マシンの作成
Window > Android SDK and AVD Manager で作れるはず。
プロジェクトの作成
- File > New > Project > Android Project
- Build Targetから使用するPlatform(Androidのバージョン)を指定
- Propertiesに以下のとおり入力
Application name 表示名。日本語OKの模様。 Package name Javaのパッケージ名 Create Activity メインのActivityのクラス Min SDK Version 開発するアプリが要求するAndroid APIのレベル(APIレベルは、Android バージョン(1.6など)ではなく4といった数値)。Build Targetで指定したバージョンのAPIレベルを指定しておけばよい
R.javaがないというエラーでプロジェクトにエラーのマークがつき、Runで実行されない場合は、一旦Project > Cleanを実行。
一旦 Run > Runで実行確認をする。エミュレーターが起動し、その中でHello World, <クラス名> と表示される。
プロジェクトのフォルダ構成
http://developer.android.com/intl/ja/guide/developing/eclipse-adt.html#CreatingAProject
を参照
レイアウト
一覧は以下を参照。
http://developer.android.com/intl/ja/guide/topics/ui/layout-objects.html
res/layout/*.xmlを開き、Layoutタブを選択すると、ある程度WYSIWYGな編集が可能。
res/layoutで定義したレイアウト/Viewのインスタンス化
LayoutInflater layoutInflater = activity.getLayoutInflater();
View view = layoutInflater.inflate(R.layout.list_item, null);
LayoutInflater#inflateの第二引数は、作成したViewの親となるView。親を指定した場合は、inflateの返却値はその親自身になる?
View(Widget)
もっとも基本的なもの
http://developer.android.com/intl/ja/resources/tutorials/views/index.html
一覧はAPIリファレンスを参照。
http://developer.android.com/intl/ja/reference/android/widget/package-summary.html
長さ
dp, spなど、単位については http://developer.android.com/intl/ja/guide/topics/resources/more-resources.html#Dimension
テキストのサイズにはsp、それ以外にはdpを使うといいらしい。
Adapter関連
DataSetObserverの管理
自分でAdapterを作る場合はregisterDataSetObserver等の実装が必要でDataSetObserverの管理が必要になるが、DataSetObservableにその管理を任せると便利。
ログ
http://developer.android.com/tools/debugging/debugging-log.html
android.util.Logのv, d, i, w, e の各メソッドで出力できる。
Activityを起動する
http://developer.android.com/guide/components/activities.html#StartingAnActivity
Intent intent = new Intent(this, FooActivity.class); startActivity(intent);
標準のランチャーを起動する
一例。おそらく環境によって異なる。フラグの使い方も適切か未確認。
Intent intent = new Intent(Intent.ACTION_MAIN); intent.setClassName("com.android.launcher", "com.android.launcher2.Launcher"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);
参考
設定画面を呼び出す。
Intent intent = new Intent("android.settings.SETTINGS"); intent.setAction(android.provider.Settings.ACTION_SETTINGS); startActivity(intent);
HTTPリクエストを送信
java.net.HttpURLConnection か Apache HttpClient を使う。
また、バックグラウンドで(非同期に)通信が行われるように、AsyncTaskを使う。
http://developer.android.com/training/basics/network-ops/connecting.html#connection
クエリパラメータからURLを構築するには、android.net.Uri.Builderを使う。
http://www.serendip.ws/archives/5107
Uri.Builder uriBuilder = Uri.parse("http://www.example.com/path/to.php").buildUpon(); uriBuilder.appendQueryParameter("idm", cardId); URL url = new URL(uriBuilder.build().toString()); // java.net.URL
端末番号
Android 2.3以降なら
String serialId = android.os.Build.SERIAL;
IMEIは、電話番号が割り当てられていないと利用できない?
- http://hp.nonip.info/wiki/work/index.php?android%2F%E7%AB%AF%E6%9C%ABid%E5%8F%96%E5%BE%97
- http://d.hatena.ne.jp/takigawa401/20110512/1305209808
画面
スリープさせない
http://www.adakoda.com/android/000207.html
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
この指定は、このActivityでのみ有効となるようだ。このアプリから別のActivityに制御が移ると、端末の設定にしたがってスリープするようになる。一旦別のActivityに移ったあとも、このActivityに戻れば、onCreateが再度実行されなくても、スリープしなくなる。
全画面表示
http://www.adakoda.com/android/000156.html
Activityごとではなく、アプリ全体のテーマに適用すれば、個々のActivityごとにテーマを指定する必要がないようだ。
Eclipseで作成したプロジェクトでは、デフォルトのテーマが次のように指定されている。
AndroidManifest.xml
<application android:theme="@style/AppTheme" > → res/values配下で定義されているAppThemeを参照している?
res/values/styles.xml
<style name="AppTheme" parent="AppBaseTheme"> →親はAppBaseTheme。これは同じファイルで定義されていて </style>
res/values/styles.xml
<!-- Base application theme, dependent on API level. This theme is replaced by AppBaseTheme from res/values-vXX/styles.xml on newer devices. --> <style name="AppBaseTheme" parent="android:Theme.Light"> → Android組み込みのTheme.Lightが親。 <!-- Theme customizations available in newer API levels can go in res/values-vXX/styles.xml, while customizations related to backward-compatibility can go here. --> </style>
このコメント部分の説明によると、"AppBaseTheme"の定義は、APIバージョンごとに、アプリでそれぞれ指定できるようだ。API v14な端末で適用される設定は、res/values-v14/styles.xml にあり、以下のとおりとなっている。
res/values-v14/styles.xml
<style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar"> <!-- API 14 theme customizations can go here. --> </style>
ここで、Theme.Holo.Light.DarkActionBar を、全画面表示のテーマに置き換えると、アプリ内全Activityに適用されることになる。例えば、次のように書き換える。
<style name="AppBaseTheme" parent="android:Theme.Holo.Light.NoActionBar.Fullscreen">
Android組み込みのテーマ名は以下の資料で確認できる。
キー
ホームキー無効化
無効化できない。代替策として、自分がホームアプリになればよい。
http://blog.ligun.net/2012/10/android_home_app/
戻るキー無効化
キーイベントを拾って、何も処理をせずに戻る。