Android

Last-modified: 2015-10-09 (金) 10:54:59

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 nameJavaのパッケージ名
    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://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組み込みのテーマ名は以下の資料で確認できる。

https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/themes.xml

キー

ホームキー無効化

無効化できない。代替策として、自分がホームアプリになればよい。

http://blog.ligun.net/2012/10/android_home_app/

戻るキー無効化

キーイベントを拾って、何も処理をせずに戻る。

http://dorodoro.info/tip/%E6%88%BB%E3%82%8B%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%92%E7%84%A1%E5%8A%B9%E3%81%AB%E3%81%99%E3%82%8B/

SQLite

http://teematsu.hatenablog.jp/entry/2015/10/04/012451