Android開発のその後…

Android プログラミングバイブルをじわじわ読み進めて第5章まで来た。今はファイルの読み書きのあたり。本を読みながらサンプルを打ち込むだけなんだけど、何となくぼんやりと掴めてきたような〜。そうでもないような〜。
正直まだ、クラス、メソッドとかがよく分かっていないんだよね。書いてある物がこう、引数とか、ここで渡ってとかは分かるんだけど、そもそもそれがどう設計されているのかよく分かってない(ダメだろ(笑
何かって言うと本を立ち読みすると自動車が例に出てくるのはなんなの、それが一番わかりやすいの?
やっぱりJava本を買わないとだめかなー。むー。8月のお小遣いもらったしなー。


時計ウィジェット作りたい。

Androidアプリ開発の勉強も、ソシム社刊のAndroid プログラミングバイブルを片手に、ちまちま進めています。
本ね、あった方がイイと思ったね。
なんていうか、情報はネットにいっぱいあるんだけど時系列的にメチャメチャなのと、それなりに検索の仕方と、プログラミングの試行錯誤に慣れている人はいいけど、
本があった方が指針が出来るよね。なにしていいか分からない状態で、検索して膨大な情報にあたってもわけがわからん。

未だにオブジェクト指向はさっぱりわからないけど、とりあえずAndroidアプリ開発の基本的な書き方は分かってきたような気がする。
気がするだけだけど。

canvasの描画系を越えて、キー入力のイベントとタッチイベントのところまで進んだ。
章で言えば第3章ね。

順番に行けば、次はジェスチャー系のイベント処理なんだけど、ちょっと興味に任せて寄り道して、自分で見やすい日付/時計ウィジェットが欲しくて作ろうと思っているんだけど、AnalogClockクラスとか、DigitalClockクラスとかスゴイ便利で簡易。もうチョチョイで表示される。スゲー、なんかよくわかんないけどスゴイ、楽しい(笑)
DigitalClockクラスだと、文字の桁数とかフォーマットがいじれないので、
ゼロから作らないとダメかー、って思ったとこ。


005SHとeclipse

実機に転送してテストするための環境設定をちまちまと進めている所です。
なんか、イマイチ良くわかんないんだけどねー。adb.exeがたまにエラーが出るのもよく分からなかったけど、Pathを通したら出なくなったっぽい。
いや、まだ出た…。「問題が発生したため、adb.exe を終了します。 ご不便をおかけして申し訳ありません。」

とりあえず実機転送でUSBデバッグは成功したんだけどね。
SHARPのサイトから005SHのドライバをもらってきたりして、うまく実機転送が出来るようになりました。
SH Developers Square –
https://sh-dev.sharp.co.jp/android/

ハードウェアもAndroid Composite ADB Interfaceとして認識されるし。
最初何度やってもエミュレーターが起動すると思ったら、
「実行構成(R)」→「実行構成」でターゲットを自動から、手操作に切り替えたら実機が選択できた。


インテントとクリップボードと。

愛しさとせつなさと心強さと〜♪
普段、Firefox使いの俺なんですが、友達にURLを送るのにアドオンのMake Linkとか古くはCopy URL+とか必須、必携なんですわ。
そんで、スマートフォンユーザーになって、行き帰りの電車でみっけたURLをチャットとかに流すのに、標準のブラウザとかだとURLだけで不便でさ。
探すとタイトル付きで共有するアプリは結構あるんだけどね(笑

ブラウザから情報を共有でアプリに渡したり、アプリから共有するサンプルにちょうど良いので自分で作って見ることにしたよ。
Androidプログラミングバイブル的には、2章もそこそこに第6章までぶっ飛んじゃったよ。で、結局読んだかって言うと、ネットで調べたね(笑

ていうか、形になってからも調べているうちに、Android2.2だとブラウザのアドレスバーの長タップすると『ページを共有』っていうのが出てタイトルも一緒にツイート出来るっていうのに気づいて衝撃を受けた。俺は今まで何をしていたんだ…。
とりあえず、インテントの使い方と、クリップボードへのアクセスの仕方が分かったので、良しとしておこう。
難しいこと考えなくても標準のクラスとメソッドの組み合わせでそれっぽく出来るんだなー。Androidアプリ面白いわー。

[java]
package com.akira_plus.shareurlpicker;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.content.Intent;
import android.text.ClipboardManager;

public class ShareURLPickerActivity extends Activity {
private Button button;
private Button button2;
private TextView display;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

// 各種コンポーネント
display = (TextView) this.findViewById(R.id.display);
button = (Button) this.findViewById(R.id.button);
button2 = (Button) this.findViewById(R.id.button2);

// クリックイベント
button.setOnClickListener(new MyClickAdapter());
button2.setOnClickListener(new MyClickAdapter2());

if(Intent.ACTION_SEND.equals(getIntent().getAction())){
String url = getIntent().getExtras().getCharSequence(Intent.EXTRA_TEXT).toString();
String title = getIntent().getExtras().getCharSequence(Intent.EXTRA_SUBJECT).toString();
display.setText(title +”\n”+ url);
}
}
// クリック実装
private class MyClickAdapter implements OnClickListener {
@Override
public void onClick(View v) {
String value = display.getText().toString();
Intent send = new Intent(Intent.ACTION_SEND);
send.setType(“text/plain”);
send.putExtra(Intent.EXTRA_TEXT, value);
try {
startActivity(Intent.createChooser(send, “URL情報の共有先”));
}catch(android.content.ActivityNotFoundException e){
//該当するActivityがないときの処理
}
}
}
// クリック実装
private class MyClickAdapter2 implements OnClickListener {
@Override
public void onClick(View v) {
String value = display.getText().toString();
// クリップボードマネージャを宣言。
ClipboardManager cm =
(ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
// クリップボードへ値をコピー。
cm.setText(value);
}
}
}
[/java]


サンプルを読み解く努力をする。

[java]
package com.akira_plus.helloworld;

import android.app.Activity;
import android.os.Bundle;

public class HelloworldActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
[/java]

いきなりさっぱりわからないけどこれがjavaの記述なら覚えるしかない。
[java]
package com.akira_plus.helloworld;

import android.app.Activity;
import android.os.Bundle;
[/java]
パッケージ宣言はなんとなく本体の名前を宣言するのと、利用するクラスのパッケージを書くところらしい。
ActivityクラスとBundleクラスを使うよ。っていう宣言なのか。
ActivityクラスはAndroidアプリの土台になるらしいキモになる部分のようだ。Bundleクラスって何をする物なのかと思って検索してみたら
『「Bundle」クラスはOSの判断で強制的に停止、終了する時に一時的にデータを格納するクラス』って書いてあった。
なんだかよくわかんないけどデータを管理してくれる奴らしいのでこれもきっとすごく基本だ。

[java]
public class HelloworldActivity extends Activity {
[/java]

って言うのはjavaとかオブジェクト指向でググってると超出てくる継承 extendsという概念だ(笑
この場合、土台になるActivityクラスを元にしてその機能を丸々いただきつつ、そこに処理を追加してクラスを作るという便利な話らしい。
ちなみに元になる方がスーパークラスで、利用して作る方のクラスはサブクラスと言う様だ。
つまり、HelloworldActivityクラスはActivityクラスのサブクラスか。
継承とオーバーライドって言うのが更に関係性のある言葉らしいけどそれも@Overrideで出てくるな。
買った本によると、@Overrideはアノテーションでそれを書いておくと、オーバーライドが成立していないときにコンパイラが警告してくれるらしい。

オーバーライドが分かってないのでアノテーションってなんだよ!って思った。
スーパークラスのメソッドをサブクラスで再定義することをメソッドのオーバーライドといいます。
ああ、後から書いた方が優先されるのか。なんかstyle定義みたいだな。

@Overrideアノテーションを書いておくと、スーパークラスにないメソッドをサブクラスに記述したときに、
再定義するメソッドが無いよってエラーとして通知してくれるための物なのか…。
まあとりあえず書いておく物としてスルーしておくか。

次、
[java]
public void onCreate(Bundle savedInstanceState) {
[/java]
これも定型文なのかな…。onCreateって、確かActivityが最初に作成されたときに呼び出されるんだよね。
初期設定とかに使う部分なのかしら。アクセス修飾子がpublicで、戻り値が無しでvoid。
メソッド名がonCreateで、引数の型がBundleで、引数の名前がsavedInstanceState。
savedInstanceStateどこから来たんだ。中身何なんだ。ワカランけど、なんか保存値が入っているんだろう。(笑

[java]
super.onCreate(savedInstanceState);
[/java]

これも定型として受け止めておこう。よくわからん。
superって、たしか親クラス(スーパークラス)のメソッドにアクセスするときに使うんじゃなかったっけ。
てことは、親クラスのonCreateメソッドにsavedInstanceStateを渡すってことかね…。

[java]
setContentView(R.layout.main);
[/java]

って、どうもR.layout.mainを画面に表示してくれるメソッドらしい。
R.layout.mainが何を指すのかよく分からないが、どうやら、/res/layout/main.xmlが関係しているっぽい。
画面上は、Hello World, HelloworldActivity!と表示されているが、

<?xml version=”1.0″ encoding=”utf-8″?>


xmlにはそれらしき表記は見当たらない。何となく怪しいのは@string/helloの部分なので
探っていくと、
/res/values/string.xmlファイルに

<?xml version=”1.0″ encoding=”utf-8″?>

Hello World, HelloworldActivity!
Helloworld

と言うのがある。これだ!なんでこんな構成にしているのかそのメリットとか全然まだ理解出来ていないが

setContentView(R.layout.main);が
/res/layout/main.xmlに従って画面を表示するという呼び出しであり、
/res/layout/main.xmlの中の@string/helloが
/res/values/string.xmlファイルの名前がhelloの文字列を代入する書き方で、その結果
画面に「Hello World, HelloworldActivity!」が表示された。というつながりだけは何となく把握。何となくだけど…。


とりあえずサンプルプロジェクトから

とりあえず買ってきた書籍を読み始める。
正直前もって知識がある人が読む本な気がする…。わからん単語がズバズバ出てくる。
アノテーションとかオーバーライドとか。いや知っておくべき単語だったのかも知れないけど、
なんちゃってアラフォープログラマーの俺は知らないことが多い…。

Chapter 1は、Androidとjava言語についての話なのでさらっと読む。
そして、Chapter 2からAndroidアプリ作成の基礎!なのでワクワクしながら読み進める。
2-1と2-2は、基礎知識と開発ツールの準備だから、開発ツールは俺はもうインストールしちゃったのでさらっと流しつつ、
ちなみにJava SE Development Kit 6u24と、Eclipse 3.6とAndroid SDKをなんかネットで色々調べつつ入れてみた。
なので、本題は、Chapter 2-3 はじめてのAndroidアプリの作成から!
Continue Reading…


Hello Android world!

とりあえず買ってきた書籍を読み始める。分かってない俺が分かっていないなりに書き進めるのであまり役に立たないと思うけど。その辺はおかしなこと言い出しても許してください。あと突然飽きることがよくあります。

Chapter 1は、Androidとjava言語についての話なのでさらっと読む。
そして、Chapter 2からAndroidアプリ作成の基礎!なのでワクワクしながら読み進める。
2-1と2-2は、基礎知識と開発ツールの準備だから、開発ツールは俺はもうインストールしちゃったのでさらっと流しつつ、
ちなみに確かJava SE Development Kit 6u24と、Eclipse 3.6とAndroid SDKをなんかネットで色々調べつつ入れてみた気がする…。
なので、本題は、Chapter 2-3 はじめてのAndroidアプリの作成から楽しもう!
ヽ( ´ー`)丿ヒャッホウ!