スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Android 基本的なイベントについて

基本的キホンテキなイベントについて
 Viewが提供テイキョウするスベてのウィジェットでは
1.Clickイベント
2.FocusChangedイベント
3.Keyイベント
4.Touchイベント
5.LongClickイベント
の5つのイベントを利用リヨウすることができます。
■イベントリスナのサンプルコード
1:                                            
2: package android.sample.eventsample;    
3:  
4: import android.app.Activity;    
5: import android.os.Bundle;  
6: import android.view.KeyEvent;    
7: import android.view.MotionEvent;  
8: import android.view.View;    
9: import android.view.View.OnClickListener;  
10: import android.view.View.OnFocusChangeListener;    
11: import android.view.View.OnKeyListener;  
12: import android.view.View.OnLongClickListener;    
13: import android.view.View.OnTouchListener;  
14: import android.widget.Button;    
15: import android.widget.EditText;  
16: import android.widget.TextView;    
17:  
18: public class EventSample extends Activity {    
19: private TextView tv;  
20:    
21: @Override  
22:   public void onCreate(Bundle savedInstanceState) {    
23: super.onCreate(savedInstanceState);  
24:   setContentView(R.layout.main);    
25:  
26:   tv = (TextView) findViewById(R.id.output);    
27: ((Button) findViewById(R.id.btn1)).setOnClickListener(click);  
28:   ((EditText) findViewById(R.id.btn2)).setOnFocusChangeListener(focus);    
29: ((EditText) findViewById(R.id.btn2)).setOnKeyListener(key);  
30:   ((TextView) findViewById(R.id.btn3)).setOnTouchListener(touch);    
31: ((Button) findViewById(R.id.btn4)).setOnLongClickListener(longclick);  
32:   }    
33:  
34:   OnClickListener click = new OnClickListener() {      
35: @Override  
36:   public void onClick(View v) {    
37: tv.setText("クリックされました");  
38:   }    
39: };  
40:   OnFocusChangeListener focus = new OnFocusChangeListener() {      
41: @Override  
42:   public void onFocusChange(View v, boolean hasFocus) {    
43: if (hasFocus) {  
44:   tv.setText("フォーカスを取得しました");    
45: } else {  
46:   tv.setText("フォーカスを消失しました");    
47: }  
48:   }    
49: };  
50:   OnKeyListener key = new OnKeyListener() {      
51: @Override  
52:   public boolean onKey(View v, int keyCode, KeyEvent event) {    
53: tv.setText("キーコード[" + keyCode + "]が押されました");  
54:   return false;    
55: }  
56:   };    
57: OnTouchListener touch = new OnTouchListener() {  
58:   @Override    
59: public boolean onTouch(View v, MotionEvent event) {  
60:   tv.setText("タッチされました");    
61: return false;  
62:   }    
63: };  
64:   OnLongClickListener longclick = new OnLongClickListener() {      
65: @Override  
66:   public boolean onLongClick(View v) {    
67: tv.setText("長押しされました");  
68:   return false;    
69: }  
70:   };    
71:  
72: }    
73:                                            
①OnClickListenerはウィジェットがクリックされたときに実行ジッコウされるイベントです。
 第一ダイイチ引数ヒキスウには、クリックされたウィジェットがワタされます。
②OnFocusChangeListenerはウィジェットがフォーカスを取得シュトク消失ショウシツするときに実行ジッコウされるイベントです。
  第二ダイニ引数ヒキスウがtrueの場合バアイはフォーカスを取得シュトクしたとき、falseの場合バアイはフォーカスを消失ショウシツしたときとなります。
③OnKeyListenerはキー入力ニュウリョクされた場合バアイ実行ジッコウされるイベントです。
 第二ダイニ引数ヒキスウには入力ニュウリョクされたキーコードがワタされます。
 ダイサン引数ヒキスウにはキー入力ニュウリョク情報ジョウホウマトめたもので、キーのした、ハナした、Shiftキーなどのメタキーがされたかなどの
 情報ジョウホウワタされます。
④OnTouchListenerはウィジェットがタッチされた場合バアイ実行ジッコウされるイベントです。
  第二ダイニ引数ヒキスウにはMotionEventがワタされます。
  タッチされたことをシメす、MotionEvent.ACTION_DOWN、ユビハナしたことをシメす、MotionEvent.ACTION_UPなどがワタされます。
  ウィジェットをタッチするとACTION_UPとACTION_DOWNの2カイのイベントが発生ハッセイします。
⑤OnLongClickListenerはウィジェットをナガししたときに実行ジッコウされるイベントです。
○main.xml
1:                            
2:    
3:     android:orientation="vertical"  
4:     android:layout_width="fill_parent"    
5:     android:layout_height="fill_parent"  
6:     >    
7:   android:id="@+id/output"  
8:     android:layout_width="fill_parent"    
9:     android:layout_height="wrap_content"  
10:     />    
11:   android:id="@+id/btn1"  
12:     android:layout_width="fill_parent"    
13:     android:layout_height="wrap_content"  
14:     android:text="クリックしてください"    
15:     />  
16:   android:id="@+id/btn2"    
17:     android:layout_width="fill_parent"  
18:     android:layout_height="wrap_content"    
19:     android:text="入力してください"  
20:     />    
21:   android:id="@+id/btn3"  
22:     android:layout_width="fill_parent"    
23:     android:layout_height="wrap_content"  
24:     android:text="タッチしてください"    
25:     />  
26:   android:id="@+id/btn4"    
27:     android:layout_width="fill_parent"  
28:     android:layout_height="wrap_content"    
29:     android:text="長押ししてください"  
30:     />    
31:  
32:    
                                             
実行ジッコウ画面ガメン
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。
スポンサーサイト

テーマ : android
ジャンル : コンピュータ

Android Serviceの作成

Serviceとは
・Serviceとは4ダイ構成コウセイ要素ヨウソのひとつで、バックグランドで動作ドウサ可能カノウなアプリの基盤キバンとなります。
 ServiceはIntentをカイして開始カイシされる。
■バックグランド処理ショリ時間ジカン表示ヒョウジするアプリ
・マルチスレッド処理ショリウツツ時刻ジコク生成セイセイ結果ケッカをステータスバー、通知欄ツウチラン表示ヒョウジする。
□DatetimeNowアクティビティクラス
                         
  package android.datetime.now;  
   
  import android.app.Activity;  
  import android.content.Intent;  
  import android.os.Bundle;  
  import android.view.View;  
  import android.view.View.OnClickListener;  
  import android.widget.Button;  
   
  public class DatetimeNow extends Activity {  
  @Override  
  public void onCreate(Bundle savedInstanceState) {  
  super.onCreate(savedInstanceState);  
  setContentView(R.layout.main);  
   
  Button start = (Button) findViewById(R.id.start_btn);
  Button end = (Button) findViewById(R.id.stop_btn);  
  final Intent it = new Intent(this, DatetimeService.class);
  start.setOnClickListener(new OnClickListener() {  
  @Override  
  public void onClick(View v) {  
  startService(it);
  }  
  });  
  end.setOnClickListener(new OnClickListener() {  
  @Override  
  public void onClick(View v) {  
  stopService(it);
  }  
  });  
  }  
  }  
                         
①スタート、ストップボタンに抽出チュウシュツ、イベントを追加ツイカする
②Serviceを実装ジッソウしたDatetimeServiceクラスをIntentで生成セイセイする
③IntentをカイしてServiceを開始カイシする
④stopServiceでServiceを停止テイシする
□DatetimeServiceクラス
                                       
  package android.datetime.now;  
   
  import java.util.Calendar;  
  import java.util.Date;  
  import java.util.TimeZone;  
   
  import android.app.Notification;  
  import android.app.NotificationManager;  
  import android.app.PendingIntent;  
  import android.app.Service;  
  import android.content.Intent;  
  import android.os.Handler;  
  import android.os.IBinder;  
  import android.os.Message;  
  import android.util.Log;  
   
  public class DatetimeService extends Service {  
  private static final int ID = 0; // Notificationの識別子  
  private static final int UPDATE = 1; // Handlerの識別子  
  private NotificationManager mNotifMan; // ステータスバー  
  private long mInterval = 1000; // =10秒  
  private boolean mRunning = false;  
   
  @Override  
  public void onCreate() {  
  super.onCreate();  
  Log.d("Datetime", "onCreate");  
  mRunning = true;  
  // getSystemServiceはシステムレベルのサービスのハンドルを返す  
  // ステータスバー通知オブジェ抽出  
  mNotifMan = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);   
  }  
   
  @Override  
  public void onStart(Intent it, int id) {  
  super.onStart(it, id);  
  Log.d("Datetime", "onStart");  
  if (!mHandler.hasMessages(UPDATE))  
  startCountDown();  
  }  
   
  @Override  
  public void onDestroy() {  
  super.onDestroy();  
  Log.d("Datetime", "onDestroy");  
  mNotifMan.cancel(ID);  
  mHandler.removeMessages(UPDATE);  
  mRunning = false;  
  }  
   
  // マルチスレッド化に必要  
  private Handler mHandler = new Handler() {  
  public void handleMessage(Message msg) { // HandlerのhandleMessageをオーバーライド  
  Log.d("Datetime", "handleMessage");  
  // 現在の時刻を渡す  
  showNotification(new Date().toString());  
  // 再帰的にhandleMessageメソッドを呼出す  
  if (mRunning)  
  mHandler.sendEmptyMessageDelayed(UPDATE, mInterval); // 一定期間ごとに処理を実行
  }  
  };  
   
  private void startCountDown() {  
  Log.d("Datetime", "startCountDown");  
  mHandler.sendEmptyMessage(UPDATE); // sendEmptyMessageはhandleMessageメソッドを呼び出す
  }  
   
  private void showNotification(String lastSec) {  
  Log.d("Datetime", "showNotification");  
  // 1.アイコン 2.表示文字列 3.通知時間  
  Notification notif = new Notification(R.drawable.icon, lastSec, 0); // 通知情報  
  // DatetimeNow Activityクラスを設定  
  Intent it = new Intent(this, DatetimeNow.class);  
  // Activityをペンディングする  
  PendingIntent pit = PendingIntent.getActivity(this, 0, it, 0);  
  // 通知領域の表示の設定  
  // 1.Context 2.アプリ名 3.説明文 4.実行PendingIntent  
  notif.setLatestEventInfo(this, "現在時刻", lastSec, pit);  
  mNotifMan.notify(ID, notif);// 通知  
  }  
   
  @Override  
  public IBinder onBind(Intent intent) {  
  Log.d("Datetime", "onBind");  
  // TODO Auto-generated method stub  
  return null;  
  }  
  }  
                                       
①getSystemServiceでNotificationManagerオブジェを取得シュトク
②ServiceのonStartメソッドにより開始カイシされる。startCountDownメソッドにてHandlerを実行ジッコウ
③バックグランド処理ショリHandlerを生成セイセイし、handleMessageをオーバーライドする
④Handlerナイ通知ツウチするメソッドを、出力シュツリョクする文字列モジレツ引数ヒキスウにしてす。
一定イッテイ時間ジカンにhandleMessageメソッドをCallする
⑥sendEmptyMessageにより、HandlerのhandleMessageメソッドを実行ジッコウする
⑦Notificationオブジェ(ステータスバー)を生成セイセイ
⑧Intentを利用リヨウすActivityを設定セッテイする
⑨PendingIntentにてActivityをペンディングする
⑩notif.setLatestEventInfoにて「通知ツウチラン」への出力シュツリョクオコナう。クリックにPendingにて設定セッテイしたIntentをCallする
実行ジッコウイメージ
ウエのステータスバーに指定シテイしたアイコンとウツツ時刻ジコク表示ヒョウジされる
通知ツウチへnotif.setLatestEventInfoへ指定シテイした内容ナイヨウ表示ヒョウジ。クリックすることでActivityを起動キドウ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。

テーマ : android
ジャンル : コンピュータ

Android Intentの作成

Intentとは
・Intentとは4ダイ構成コウセイ要素ヨウソヒトつで、アプリ同士ドウシ連結レンケツすることが出来デキます。
 Activityなどに処理ショリ依頼イライする仕組シクみであり、Intent単体タンタイでは利用リヨウしません。
タトえば
「URL http://xxxx.xx.xxをブラウザで表示ヒョウジする」という処理ショリ場合バアイに、
Intentでは
「ブラウザを起動キドウする」というアクションと
「http://xxxx.xx.xx」のデータをワタ
ということをオコナいます。
ここで指定シテイするアクションについては、「ブラウザを起動キドウする」や「電話デンワをかける」など
オオまかな指定シテイでOKです。これを「暗黙的アンモクテキIntent」といいます。
ギャク明示的メイジテキにActivityやServiceを指定シテイすることを「明示的メイジテキIntent」とびます。
指定シテイしたURLをブラウザで表示ヒョウジする
Intentを利用リヨウし、入力ニュウリョクしたURLをブラウザを起動キドウ表示ヒョウジさせます。
1.プロジェクト「BrowsingTest」を作成サクセイします。
2.画面ガメン構成コウセイします。
  今回コンカイは、URLを入力ニュウリョクするテキストとブラウザを起動キドウするボタンを追加ツイカします。
  res/layoutのmain.xmlを以下イカのように修正シュウセイします。
○main.xml
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/brws_btn"
    />
①LinearLayoutのorientation=verticalで、要素ヨウソタテナラべて表示ヒョウジする。
②URLを入力ニュウリョクするテキストエリア。プログラムジョウ編集ヘンシュウするためIDを追加ツイカする。
  オブジェクトにIDを追加ツイカする場合バアイは、 「 android:id="@+id/一意イチイなID" 」記述キジュツする
  また、layout_widthのfill_parentは「オヤオナオオきさにヒロげる」 
  layout_heightのwrap_contenは「ウィジェットの内容ナイヨウがちょうどオサまるオオきさ」
  となります。
③ブラウザを起動キドウするためのボタン。プログラムジョウ編集ヘンシュウするためにIDを追加ツイカ
④ボタンに表示ヒョウジされる文字列モジレツ指定シテイ文字列モジレツは res/valuesのstring.xmlで管理カンリしている。
3.ツギにアプリケーションで使用シヨウする文字列モジレツ編集ヘンシュウします。
  res/valueのstring.xmlを修正シュウセイします。
○strings.xml
    きどう!!
    BrowsingTest
アタラしくbrws_btnを追加ツイカします。
  main.xmlのButtonで、textにbrws_btnを指定シテイしているため、
  この文字列モジレツがButtonに表示ヒョウジされます。
4.最後サイゴにActivityクラスの修正シュウセイオコナいます。
  今回コンカイ実装ジッソウする内容ナイヨウとしては
   1.ボタンをクリックしてonClickイベントを発生ハッセイ
   2.onClickイベントにて、テキストに入力ニュウリョクされたURLを取得シュトク
   3.Intentを利用リヨウし、入力ニュウリョクされたURLをブラウザで表示ヒョウジ
  となります。
○BrowsingTest.java
package android.browsing.test;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class BrowsingTest extends Activity implements OnClickListener {
private EditText myText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myText = (EditText) findViewById(R.id.url_text);
Button btn = (Button) findViewById(R.id.brws_start);
btn.setOnClickListener(this);
}
//実装ジッソウするonClickメソッド ボタンクリックにてCallされる
public void onClick(View v) {
String url = myText.getText().toString();
Uri sendData = Uri.parse(url);
Intent it = new Intent();
it.setAction(Intent.ACTION_VIEW);
it.setData(sendData);
startActivity(it);
}
}
①onClickイベントを実装ジッソウするため、OnClickListenerを実装ジッソウする
②URLを入力ニュウリョクするEditTextを宣言センゲン
③onCreateメソッドでの初期ショキ処理ショリにて、myTextがURL入力ニュウリョクのEditTextを参照サンショウ
  画面ガメンのオブジェクトをすには「findViewById()」を利用リヨウ
  指定シテイするIDはmxil.xmlで設定セッテイした「@+id」となる。
④クリックイベントを設定セッテイするため、ボタンオブジェクトを取得シュトクする。
  onClickイベントは「 setOnClicklistener() 」で追加ツイカする。
  今回コンカイは、自身ジシンがonClickリスナーを実装ジッソウしているため、thisを設定セッテイする。
画面ガメン入力ニュウリョクされた文字列モジレツ取得シュトクする
⑥Intentを生成セイセイします
今回コンカイはActionとして「ACTION_VIEW(表示ヒョウジする)」を設定セッテイする
入力ニュウリョクされた文字列モジレツをデータとして設定セッテイする
⑦Intentの実行ジッコウ。ブラウザが表示ヒョウジされ入力ニュウリョクしたURLが表示ヒョウジされる。
5.実行ジッコウ結果ケッカ
・URLを指定シテイし、「起動キドウ」ボタン押下オウカ入力ニュウリョクした文字列モジレツ対応タイオウするアプリが起動キドウされます。
 今回コンカイはUrlのため、ブラウザが起動キドウされます。
実行ジッコウ結果ケッカ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。

テーマ : android
ジャンル : コンピュータ

Android ContentProviderの作成

ContentProviderとは
・ContentProviderとは4ダイ構成コウセイ要素ヨウソで、アプリケーションカンでデータを共有キョウユウする仕組シクみです。
 単純タンジュンホカのアプリケーションへアクセスできると危険キケンなため、ContentProviderを利用リヨウして
 安全アンゼンにアクセスします。
・データにアクセスするには、ContentResolverクラスのqueryメソッドを使用シヨウします。
レイ
ContentResolver.query(uri,projection,selection,selectionArgs,sordOrder);
uri :ContentProviderの場所バショ
projection :出力シュツリョクカラムのString配列ハイレツ
selection :検索ケンサク条件ジョウケン
selectionArgs: 複数フクスウ検索ケンサク条件ジョウケン
sordOrder :出力シュツリョクジュン
■ContentProviderでWebブラウザの閲覧エツラン履歴リレキ表示ヒョウジ
・ContentProviderを利用リヨウし、Webブラウザから閲覧エツラン履歴リレキ取得シュトク
 それをリスト表示ヒョウジします。
○ContProvBrowsアクティビティクラス(ListActivity継承ケイショウ
1:                                      
2: package cont.prov.brows;    
3:  
4: import android.app.Activity;    
5: import android.app.ListActivity;  
6: import android.database.Cursor;    
7: import android.os.Bundle;  
8: import android.provider.Browser;    
9: import android.util.Log;  
10: import android.widget.ListAdapter;    
11: import android.widget.SimpleCursorAdapter;  
12: import android.widget.TextView;    
13:  
14: public class ContProvBrows extends ListActivity { // リストで表示するためにListActivityを継承    
15: /** Called when the activity is first created. */  
16:   @Override    
17: public void onCreate(Bundle savedInstanceState) {  
18:   super.onCreate(savedInstanceState);    
19: setContentView(R.layout.main);  
20:   try {    
21: Log.d("ContProvBrows", "set BookmarkColumns");  
22:   // 取得するカラムを指定 タイトルとアクセスURLを指定    
23: String[] strings = new String[] { Browser.BookmarkColumns.TITLE,  
24:   Browser.BookmarkColumns.URL };    
25:  
26:   Log.d("ContProvBrows", "get ContentProvider");    
27: // ContentProviderでブラウザの履歴情報を取得  
28:   Cursor c = getContentResolver().query(Browser.BOOKMARKS_URI // ブラウザをURIで指定  
29: , strings // 抽出カラムを指定  
30:   , null // 検索条件    
31: , null // 複数検索の場合  
32:   , null // データのソート    
33: );  
34:    
35: Log.d("ContProvBrows", "new int");  
36:   // 表示カラムの数値IDを配列化    
37: int[] items = new int[] { android.R.id.text1 // simple_list_item_2.xmlのtext1  
38:   , android.R.id.text2 // simple_list_item_2.xmlのtext2    
39: };  
40:    
41: Log.d("ContProvBrows", "new ListAdapter");  
42:   // 抽出した履歴情報をListAdapterを利用し出力する    
43: ListAdapter adapter = new SimpleCursorAdapter(this,  
44:   android.R.layout.simple_list_item_2 // 表示レイアウト    
45: , c // 出力するオブジェクト  
46:   , strings // 表示するカラム    
47: , items // 値を表示するIDの指定  
48:   );    
49: Log.d("ContProvBrows", "setListAdapter");  
50:   setListAdapter(adapter);      
51:  
52:   Log.d("ContProvBrows", "label output");    
53: // ラベルに情報を出力  
54:   int count = c.getCount();    
55: String format = getString(R.string.label);  
56:   String label = String.format(format, count); // 変換 %dをcountへ置き換え    
57: // 変換文字列を出力  
58:   TextView v = (TextView) findViewById(R.id.label_tv);    
59: v.setText(label);  
60:   } catch (Exception ex) {    
61: Log.d("ContProvBrows", ex.toString());  
62:   }    
63: }  
64: }    
65:                                      
履歴リレキ情報ジョウホウのタイトルとそのURLを使用シヨウするため、TITLEとURLを指定シテイ
②queryメソッドでデータ抽出チュウシュツ対象タイショウはブラウザの履歴リレキのため「BOOKMARKS_URI」を指定シテイ条件等ジョウケントウない場合バアイはnull指定シテイ
③ListAdapterを使用シヨウ。レイアウトは「simple_list_item_2」を利用リヨウ
  ※simple_list_item_2はAndroidホーム配下ハイカ存在ソンザイします。
生成セイセイしたListAdapterを設定セッテイ
○main.xml
1:                                      
2:    
3:  
4:    
5:     android:orientation="vertical"  
6:     android:layout_width="fill_parent"    
7:     android:layout_height="fill_parent"  
8:     >    
9:   android:id="@+id/label_tv"  
10:     android:layout_width="fill_parent"    
11:     android:layout_height="wrap_content"  
12:     android:textAppearance="?android:attr/textAppearanceLarge"      
13:     android:background="#AAAAAA"  
14:     android:padding="5dp"    
15:     android:text="@string/label"  
16:     />    
17:  
18:   android:id="@android:id/list"    
19:     android:layout_width="fill_parent"  
20:     android:layout_height="wrap_content"    
21:     />  
22:    
23:  
                                       
①ユーザー インタフェースでどのように表示されるか外観を設定
履歴リレキ表示ヒョウジされるList
1:                                      
2:    
3:  
4:     HistoryCount %d      
5:     ContProvBrows  
6:    
                                       
履歴リレキスウ表示ヒョウジ処理ショリではこの「%d」が数値スウチわる
○AndroidManifest.xml マニフェストファイル
1:                                      
2:        
                                       
①ContentProviderを利用リヨウしデータを取得シュトクするため、そのムネマニフェストファイルで宣言センゲンオコナう。
実行ジッコウ結果ケッカ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。

テーマ : android
ジャンル : コンピュータ

Android Activityのライフサイクルについて

アクティビティのライフサイクルについて

・アクティビティとは、Androidで最も重要な4大構成要素の一つです。
 アプリケーションの開始から終了までを「アクティビティのライフサイクル」といいます。
以下がアクティビティのライフサイクルとなります。

rilsicle.jpg


■ライフタイムの分類
・ライフタイム
 アクティビティが生成(onCreate)されてから消滅(onDestroy)するまでの期間全体
・ビジブルライフタイム
 アクティビティがビジブルアクティビティとして生存している期間。
 onRestart、onStart、onStopが対象
 →ビジブルアクティビティとは・・・
  フォーカスを失っているが、ユーザには見えている状態。(半透明なレイヤの後ろにいるアクティビティなど)
  基本的に自動でKillされることはない。
・フォアグラウンドライフタイム
 アクティビティがフォアグラウンドアクティビティとして生存している期間。
 onResume、onPauseが対象
 →フォアグラウンドアクティビティとは・・・
  最前面のアクティビティ、つまりユーザが操作しているアクティビティのことです。
  原則Killされない。
※バックグラウンドアクティビティ
 他のアクティビティに完全に隠れてしまっている状態。
 他でメモリが必要なときにシステムによってKillされることがある。


■コールバックメソッドの説明
hogehoge.jpg

■プログラムでライフサイクルの確認
実際にプログラム上でどのような状態遷移をしているのか確認します。
・プロジェクト名「ActivityLifecycle」を作成
hogepupu.jpg
・Activityクラスを継承したActivityLifecycleクラスで、各コールバックメソッドをオーバーライドします。

○ActivityLifecycleクラス

   
package activity.lifecycle;
 
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
 
public class ActivityLifecycle extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("ActivityLifecycle","onCreate");
setContentView(R.layout.main);
}
 
@Override
protected void onStart(){
super.onStart();
Log.d("ActivityLifecycle","onStart");
}
 
@Override
protected void onRestart(){
super.onRestart();
Log.d("ActivityLifecycle","onRestart");
}
 
@Override
protected void onResume(){
super.onResume();
Log.d("ActivityLifecycle","onResume");
}
 
@Override
protected void onPause(){
super.onPause();
Log.d("ActivityLifecycle","onPause");
}
 
@Override
protected void onStop(){
super.onStop();
Log.d("ActivityLifecycle","onStop");
}
 
@Override
protected void onDestroy(){
super.onDestroy();
Log.d("ActivityLifecycle","onDestroy");
}
}


   
・各々のコールバックメソッドにLogを出力するようにします。
 LogはLogCatで確認できます。
 LogCatは「ウィンドウ → ビューの表示 → その他 → Android → LogCat」
・以下のようにアクティビティのライフサイクルの確認ができます。

image008.jpg

テーマ : android
ジャンル : コンピュータ

JavaScript Selectオブジェクトの生成

JavaScriptで自動でSelectオブジェクトを構築するためのコード。


<html>
<script type="text/javascript">
//二次元配列
var ary = [ [ 'A', 'AA' ], [ 'B', 'BB' ], [ 'C', 'CC' ] ];
window.onload = function() {
var sel = document.f1.sel; //該当のSelectオブジェクトを取得
sel.length = 0; //lengthを0にすることで初期化
for ( var i = 0; i < ary.length; i++) {
sel.length++; //length++でリストの追加
//valueはoptionのvalue、textは表示される項目となる
//0から始まるため-1
sel.options[sel.length - 1].value = ary[i][0];
sel.options[sel.length - 1].text = ary[i][1];
}
}
</script>
<body>
<form name="f1">
<select name="sel">
<option value="1">1</option>
<option value="2">2</option>
</select>
</form>
</body>
</html>

ポイントはlengthを操作することで初期化、追加ができること。


とりあえずメモ。

テーマ : Webサービス
ジャンル : コンピュータ

JavaScript Selectタグの選択値の取得

JavaScriptでSELECTオブジェクトの選択値の取得は以下となる


document.フォーム名.selectオブジェクト.options[document.フォーム名.selectオブジェクト.selectedIndex].value
例)document.form.select.options[document.form.select.selectedIndex].value

上記で選択されたOptionのValueが取得できる。

とりあえずメモ。

テーマ : Webサービス
ジャンル : コンピュータ

底面フィルターとオーバーフローの連結自作ろ過システム

熱帯魚の楽しみといえば、魚を育てる・鑑賞するなどありますが、もう一つ「システムを自分で構築する」という楽しみ方もあります。

アクアリストたちは日々、水槽の環境を良くするため、さまざまな工夫を凝らしていろいろな物を自作しています。
その中で、一般的な自作システムと言えば「ろ過システム」になるのではないかと思います。

私もいろんなろ過システムを自作しており、塩ビ管や100均などで部品を購入し、いろんなろ過システムを自作して楽しんでいます。

それで、今一番気に入っているのは「底面フィルター」と「オーバーフロー」でのろ過です。

底面フィルターは底面前面をフィルターにするため、ろ過効率が良い。
オーバーフローはその仕組み上、水量が多くなって水質が安定する。

デメリットなどもありますがここでは割愛します。


で、今までビーシュリンプをメインに飼育していたのですが、あるきっかけでグッピーを飼育することになった。
そこで、新たにグッピー用の水槽を立ち上げようと思ったのですが、ろ過を底面かOFのどちらにしようか迷ってしまい、ならいっそのことこの二つを組み合わせてみよう自作を行った


その自作システムを考えたときのイメージがこれ
hoge.jpg


青矢印が水の流れ

網目の部分が底面フィルター

OFで水が下に落ちる時に、落ちる水を隣に接続しているパイプから落ちるようにする。
隣のパイプは下に連結している底面フィルターから吸い上がってくる。

ついでに下の水槽でもグッピーを飼育しつつろ過できるように、仕切り板を利用して底面フィルター見たいな原理にした。

このシステムによって、通常底面フィルターで利用するエアリフトを利用せずに底面ろ過ができ、なおかつOFによって大容量の水量の確保ができ、すべての水槽で底面ろ過をすることができた。
大規模なろ過+水量の確保ができる優れたシステムだ!

で出来たのがこれ。
20121030_051305.jpg

左のパイプの下に底面フィルターが連結しており、右のパイプが下まで突き抜けて下の水槽に水が落ちる。

この30cm水槽が4つと下に60cmが一つあります。

ちなみに下に見える黒い網網は自作の稚魚BOXです。


各水槽で底面ろ過をやりつつ、すべての水槽を連結させるなんて他にも方法がありそうだが。。
とりあえず、楽しく「自作」が出来て満足。

ちなみに材料は
・水を循環させるために必要な塩ビ管(パイプやコーナー、T字など)
・底面フィルターは100均にあった、プラスチックの網のざる(みたいなやつ)
くらいかな。。

まー他には砂利や水中ポンプなどもあるが。

とりあえずろ過機能自体は1000円もしないで構築できた。



稼動して半年ほどたつが、底面が詰まってきてやや水の流れが悪くなった。
OFで下に落ちる水量より、上から流れてくる水量が多くなってきてしまい、水があふれてしまいそうになってしまった。(水の抜け道を作っているため、水槽からこぼれることはないが)

というわけで、底面から水が吸い上がるパイプに上からエアチューブを刺して、エアリフトによって水の流れを早くした。
これによって水があふれることもなく、ちゃんと底面フィルター→OFという流れになった。
当初の予定とは違ったが、こうやって改造するのもまた面白い。


テーマ : 淡水魚
ジャンル : ペット

Androidで Hello World!!

基礎中の基礎「HelloWorld」を作成します
・パッケージ・エクスプローラ上で、右クリック「新規」→「Androidプロジェクト」を選択
・プロジェクト名:HelloWorld、ビルド・ターゲット:Android1.6、アプリケーション名:HelloWorld、パッケージ名:android.sample、Create Activity:HelloWorld
で「完了」


image003.jpg


・完了すると、以下のようなプロジェクト構成となります。

image005.jpg


1.srcの配下に、設定したパッケージが作成されます。
  このパッケージに作成された「HelloWorld.java」がAndroidプロジェクトの中心となる「Activityクラス」となります。
2.Genの配下にも、設定したパッケージが作成されます。
  このパッケージに作成された「R.java」は、リソースとひも付けを行うファイルとなります。
  また、このファイルは自動生成、更新されるため変更してはいけません。
3.resのdrawableフォルダには、イメージファイルを配置します。
  デフォルトでは、アイコンのicon.pngが配置されます。
4.layoutフォルダには、レイアウトを定義しているxmlファイルを配置します。
  デフォルトでは、mail.xmlが配置されます。
5.valuesフォルダには、文字列を定義しているxmlファイルを配置します。
  デフォルトでは、string.xmlが配置されます。
6.AndroidManifest.xmlには、アプリケーションに関する情報が記載されています

とりあえず実行します。
実行は、「HelloWorld」プロジェクト右クリック→「実行」→「Androidアプリケーション」を
image007.jpg

・実行結果が画面に表示されます。
■各種ファイルの説明
・Androidプロジェクトには、必ず1つ以上の「Activityクラス」が必要となります。
 Androidプロジェクトは、まずはじめにActivityクラスの「onCreate」メソッド実行されます。

○HelloWorldクラス
image008.gif


①HelloWorlクラスはActivityクラスを継承します。
②onCreateメソッドをオーバーライドします。
③オーバーライドしたonCreateでは、必ずsuperクラスのonCreateメソッドを呼び出します。
④setContentViewで画面描画を行います。ここではRクラスのlayout.mainを表示しています。
・Rクラスでは、各リソースの管理を行っています。

○Rクラス
image009.gif


①ここでは、res/layoutの「main.xml」を管理しています。
・res/layoutのmain.xmlファイルにて、画面構成を管理しています。

○main.xml
image010.gif

①LinearLayoutのorientattion=verticalのため、子要素を縦で構成します。
②TextViewは文字を表示するオブジェクトです。Android:textタグで表示する文字列を指定します。
  ここで指定している「@string/hello」とは、res/valuesに存在する「string.xml」のname=helloの内容を出力します。
・res/valuesのstring.xmlでは、文字列の管理を行います。
○string.xml
image011.gif

①main.xmlのTextViewに出力される。
  出力する文字列を変更したいときは、この文字列を修正する。
  xmlファイル化しているため、プログラムを修正することなく文字を編集できる。

テーマ : android
ジャンル : コンピュータ

google playの不適切なコメントの削除について

いろんなアプリを作成しているためいろんなコメントを頂きます。

面白い、つまらないなど、どのコメントも紳士に受け止め今後のアプリ開発に活かすようにすることが開発者としての私のもっとうであります。

なので、どんなヒドイことを言われても、あまり気にしないのですが、先ほど非常に不愉快なコメントがあることに気付きました。

その人の人間性を疑うような、ポリシーに反するコメントです。

さすがの私も、これは許してはいけないと思いましたが、目の前にその人がいるわけでもないので言いたいことも言えません。

なので、とりあえずその不適切なコメントを削除出来ないか調べたところ、削除は出来ないが、google側に[スパム]として申請出来ることがわかった。

なお、このスパム申請はデペロッパーコンソール上からはできないようだ。

■申請方法
①google play から該当のアプリを開く
②該当のコメントの右側にある手のマークをクリック
③リストからスパムを選択して送信

これでコメントが削除されればよいが。

それにしても、なぜあんなコメントをすることができるのか不思議でしょうがない。

どんなアプリでも、誰かが時間と労力を使って一生懸命作ってるのだから、それを少しはユーザーもわかってくれたらな~っと思います。

なので[おもしろい!すごい!]とゆうコメントを頂くと非常に嬉しいものです。

テーマ : android
ジャンル : コンピュータ

res/valuesのstring.xmlからの文字列の取得

String moji = activity.getString(R.string.txt);

忘れずにメモ

テーマ : android
ジャンル : コンピュータ

おすすめアプリ
カテゴリ
最新記事
リンク
アクセスカウンター
アクセス解析
imobile
i-mobile
i-mobile
i-mobile
i-mobile
i-mobile
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
Amazon
Androidお勧め参考書
EC studio
商品
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。