2012年1月31日火曜日

getAllNetworkInfo

getAllNetworkInfo() APIを確認しました。思ったより、ネットワークを持っていました。
すべてのネットワークの情報を取得します。
NetworkInfo[] ni = cm.getAllNetworkInfo();
ネットワークの情報を表示します。
Log.d("net", "getDetailedState = " + dt);
Log.d("net", "getExtraInfo = " + ni[i].getExtraInfo());
Log.d("net", "getReason = " + ni[i].getReason());

NetworkInfo.State st = ni[i].getState();

Log.d("net", "getState = " + st);
Log.d("net", "getSubtype = " + ni[i].getSubtype());
Log.d("net", "getSubtypeName = " + ni[i].getSubtypeName());
Log.d("net", "getType = " + ni[i].getType());
Log.d("net", "getTypeName = " + ni[i].getTypeName());
Log.d("net", "isAvailable = " + ni[i].isAvailable());
Log.d("net", "isConnected = " + ni[i].isConnected());
Log.d("net", "isConnectedOrConnecting  = " + ni[i].isConnectedOrConnecting ());
Log.d("net", "isFailover   = " + ni[i].isFailover  ());
Log.d("net", "isRoaming   = " + ni[i].isRoaming  ());
これは、自分の携帯電話の結果です。
getDetailedState = DISCONNECTED
getExtraInfo = dm.jplat.net
getReason = dataDisabled
getState = DISCONNECTED
getSubtype = 0
getSubtypeName = UNKNOWN
getType = 0
getTypeName = mobile
isAvailable = false
isConnected = false
isConnectedOrConnecting  = false
isFailover   = false
isRoaming   = false
getDetailedState = DISCONNECTED
getExtraInfo = null
getReason = null
getState = DISCONNECTED
getSubtype = 0
getSubtypeName = 
getType = 1
getTypeName = WIFI
isAvailable = false
isConnected = false
isConnectedOrConnecting  = false
isFailover   = true
isRoaming   = false
getDetailedState = IDLE
getExtraInfo = null
getReason = null
getState = UNKNOWN
getSubtype = 0
getSubtypeName = UNKNOWN
getType = 2
getTypeName = mobile_mms
isAvailable = false
isConnected = false
isConnectedOrConnecting  = false
isFailover   = false
isRoaming   = false
getDetailedState = IDLE
getExtraInfo = null
getReason = null
getState = UNKNOWN
getSubtype = 0
getSubtypeName = UNKNOWN
getType = 3
getTypeName = mobile_supl
isAvailable = false
isConnected = false
isConnectedOrConnecting  = false
isFailover   = false
isRoaming   = false
getDetailedState = IDLE
getExtraInfo = null
getReason = null
getState = UNKNOWN
getSubtype = 0
getSubtypeName = UNKNOWN
getType = 4
getTypeName = mobile_dun
isAvailable = false
isConnected = false
isConnectedOrConnecting  = false
isFailover   = false
isRoaming   = false
getDetailedState = IDLE
getExtraInfo = null
getReason = null
getState = UNKNOWN
getSubtype = 0
getSubtypeName = UNKNOWN
getType = 5
getTypeName = mobile_hipri
isAvailable = false
isConnected = false
isConnectedOrConnecting  = false
isFailover   = false
isRoaming   = false



ソースコードは ここです

Androidに関する課題や、ほしいアプリがあればメールやTwitterで連絡ください。試してみます。

2012年1月30日月曜日

ConnectivityManager

ConnectivityManager クラスを使用します。

現在、利用しているネットワークを取得して、その情報を表示します。もし利用できるネットワークがない場合はExceptionga発生しました。
ConnectivityManager cm = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();

ネットワークの情報を表示します。
NetworkInfo.DetailedState dt = ni.getDetailedState();
Log.d("net", "getDetailedState = " + dt);
Log.d("net", "getExtraInfo = " + ni.getExtraInfo());
Log.d("net", "getReason = " + ni.getReason());
NetworkInfo.State st = ni.getState();
Log.d("net", "getState = " + st);
Log.d("net", "getSubtype = " + ni.getSubtype());
Log.d("net", "getSubtypeName = " + ni.getSubtypeName());
Log.d("net", "getType = " + ni.getType());
Log.d("net", "getTypeName = " + ni.getTypeName());
Log.d("net", "isAvailable = " + ni.isAvailable());
Log.d("net", "isConnected = " + ni.isConnected());
Log.d("net", "isConnectedOrConnecting  = " + ni.isConnectedOrConnecting ());
Log.d("net", "isFailover   = " + ni.isFailover  ());
Log.d("net", "isRoaming   = " + ni.isRoaming  ());


これは3Gが有効だった場合の結果です。
 getDetailedState = CONNECTED
 getExtraInfo = dm.jplat.net
 getReason = apnSwitched
 getState = CONNECTED
 getSubtype = 0
 getSubtypeName = UNKNOWN
 getType = 0
 getTypeName = mobile
 isAvailable = false
 isConnected = true
 isConnectedOrConnecting  = true
 isFailover   = false
 isRoaming   = false
Wifiが有効な場合の結果です。
 getDetailedState = CONNECTED
 getExtraInfo = null
 getReason = null
 getState = CONNECTED
 getSubtype = 0
 getSubtypeName = 
 getType = 1
 getTypeName = WIFI
 isAvailable = true
 isConnected = true
 isConnectedOrConnecting  = true
 isFailover   = false
 isRoaming   = false

ソースコードはここです。
Androidに関する課題や、ほしいアプリがあればメールやTwitterで連絡ください。試してみます。

2012年1月5日木曜日

HttpClient

Androidで、HTTPのライブラリを使用して、Yahoo JapanのPageを取得します。
Android端末側が無線LANの設定が済んでおり、インターネットに接続できることが前提です。
DefaultHttpClient クラスを作成し、urlにYahoo Japanのトップページを設定します。 HttpのGetのメッセージも作成します。
String url = "http://www.yahoo.co.jp";
HttpClient hc = new DefaultHttpClient();
HttpGet get = new HttpGet(url);
Httpを実行します。インターネットのYahooへアクセスします。
取得したYahoo JapanのPageは、HttpResponseクラスに格納されます。
HttpResponse res;
res = hc.execute(get);
Httpの応答が200 OKの場合、Httpのコンテンツを取得します。
コンテンツは、Yahoo JapanのPageのHTML形式で記述されたPageになります。
if (res.getStatusLine().getStatusCode() == 200) {
 //It is ok.
 InputStream input = res.getEntity().getContent();
コンテンツをLogCatに出力します。
BufferedReader rBuffer = new BufferedReader(new InputStreamReader(input, "UTF-8"));
String readLine;

try {
 while((readLine = rBuffer.readLine()) != null) {
  Log.d("HttpClientActivity", readLine);

Yahoo JapanのPageを取得することができました。

ソースコードはこちらです。.

Socket

Socket クラスを使用して、ネットワークの送受信を確認します。 自分のblogのPageのデータを受信します。

Socketを生成します。
String host ="playandworkandroid.blogspot.com"; 
sk = new Socket(host, 80);
送信データと受信データを入れるバッファを用意します。
rBuffer = new BufferedReader(new InputStreamReader(sk.getInputStream()));
wBuffer = new BufferedWriter(new OutputStreamWriter(sk.getOutputStream()));
データを受信する命令を含む、送信データを作成します。flush()することで、送信されます。
wBuffer.write("GET / HTTP/1.1\n");
wBuffer.write("host : " + host + "\n");
wBuffer.write("\n");
wBuffer.flush();
Socketにデータが受信されたら、LogCatに表示します。
while((readLine = rBuffer.readLine()) != null) {
 Log.d("HttpGetActivity", readLine);
}
これで、Blogのデータが受信できたと思います。
ソースコードはこちらです。.

2012年1月3日火曜日

ActivityInstrumentationTestCase2 GridView ClickItem

GridViewに設定するonClickItemListener() API と、
GridView上に設置したImageViewのonClickListener() APIは、
両方設定されて場合でも、どちらかだけしか有効にならないと思います。
今回は、GridViewのonClickItemListener()のテストをします。
テストは、ActivityInstrumentationTestCase2クラスを使用します。

最初に、テストされる側のActivityを説明します。GridViewを使用して、
SDCardのビデオクリップを表示する部分は、前に説明しているので
そちらを参照してください。

OnItemClickListenerをGridViewに設定します。
OnItemClickListenerは、positionの情報が含まれます。

mGridView.setOnItemClickListener(new OnItemClickListener() {
 @Override
 public void onItemClick(AdapterView arg0, View arg1, int position,
   long id) {
  Log.d("GridViewActivity", "onItemClick " + position + " " + id);
  
 }
});

次に、テストする側のコードを説明します。ActivityInstrumentationTestCase2を使用します。
positionを指定して、performItemClick()をUIThreadからコールします。

GridView and postion. must be UIThread
mActivity.runOnUiThread(new Runnable() {
 public void run() {
  
  Log.d("GridViewActivity", "performItemClick 3");
  gridview.performItemClick(gridview, 3, 0);
  
  
 }
});
mInstrumentation.waitForIdleSync();

Logcatを使用して、テストする側からpoerformItemClick()をコールして、OnItemClick()がコールされていることを確認します。.
performItemClick 3
onItemClick 3 0
   テストされる側のソースコードです。.
  テストする側のソースコードです。.

ActivityInstrumentationTestCase2 GridView Select View

AndroidのActivityInstrumentationTestCase2 Classを
使用したJUnitのテストコードの説明です。
GridViewで作られたViewのテストをするようにします。

最初にテストされる側のActivityの説明をします。
前に、GridViewでSDCardのビデオクリップを表示する
サンプルの説明をしたので、基本的な部分はそちら
参照してください。

GridViewに、OnClickListener()を設定します。
OnClickListener()では、どの画像(ImageView)がClickされているか
わからないので、コンストラクタでpositionを引数とした
OnClickListenerのサブクラスを作ります。


class OnClickListenerDetectPosition implements OnClickListener {
 private int mPosition = 0;
 public OnClickListenerDetectPosition(int position ) {
  mPosition = position;
 }
 @Override
 public void onClick(View v) {
  Log.d("GridViewActivity", "onClick = " + mPosition);
 }
 
}
OnClickListenerDetectPositionをGridViewに設定します。
OnClickListener onclikclistener = new OnClickListenerDetectPosition(position);
imageView.setOnClickListener(onclikclistener);

次に、テストする側のクラスを説明します。
ActivityInstrumentationTestCase2のサブクラスを作成します。
UIThread上からsetPosition()を使用してpositionを変更します。
mActivity.runOnUiThread(new Runnable() {
 public void run() {
  Log.d("GridViewActivity", "setSelection 2");
  gridview.setSelection(2);
 }
});
mInstrumentation.waitForIdleSync();

次に、getSelectedView()で、選択されているViewを取り出し、performClickを使用して、
クリックする動作をテストします。
mActivity.runOnUiThread(new Runnable() {
 public void run() {
  
  Log.d("GridViewActivity", "getSelectedItemPosition = " + gridview.getSelectedItemPosition ());
  
  Log.d("GridViewActivity", "getSelectedView");
  ImageView imageview = (ImageView)gridview.getSelectedView();
  Log.d("GridViewActivity", "performClick");
  imageview.performClick();
 }
});
Logcatを使用して動作を確認します。テストする側からperformClickすることで、テストされる側のOnClickListenerDetectPosition クラスが動作できたことがわかります。
setSelection 2
getSelectedItemPosition = 2
onClick = 2
   テストされる側のソースコードです。.
  テストする側のソースコードです。.