株式会社インデペンデンスシステムズ横浜

システム開発エンジニアの西田五郎が運営しております。Raspberry Pi や Arduino その他新規開発案件のご依頼をお待ちしております。

Android

温度管理システム的なものを作ってみる(その5)AndroidからCloudへの送信

投稿日:2014年7月6日 更新日:

screenshotshare_20140706_185023温度管理システム的なものを作ってみるの5回目です。前回はCloud(Microsoft Azure)での処理について書きました。そのCloudの処理の温度データ登録処理に送信するためのAndroidの処理について書きます。

前回書きましたが単純にHTTPのGETメソッドで温度データを送信しています。その部分のAndroid側でのプログラムについてです。送信するデータは温度データ、位置データ、現在時刻とデータのメモです。温度データの取得については、このシリーズの3回目で書いた通りです。位置データはLocationManagerを使います。(位置データが取得出来ているかのチェック処理は行っていません。)

HTTPの通信の処理は、Apacheが提供しているHTTPクライアントのDefaultHttpClientを使っています。ここではバックグラウンドで単純にHTTP通信を実行して、StatusがOKならResponseを取得しています。取得したResponseは特に解析はしていないです。テスト的に実際に登録されたかどうかはCloudで確認するということにしています。HTTP通信の方法は最新の方法もあるようなので以下に関連リンクを書いておきます。
Android の HTTP クライアントは何を使うべきか?
AndroidHttpClientを用いたデータ取得

実際のソースは以下です。今回に関連する部分だけ抜粋します。必要な場合はお手数ですが以下からダウンロードして頂ければと思います。(※一切の動作保証はしていません。御了承ください。)
ソースファイル一式

マニュフェストファイルでのパーミション

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>

送信処理の実行まで

/**
* クラウド(Azure)へデータを登録
* @throws IOException
* @throws ParseException
*/
private void submitAddData(){
	String sVal;
	ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();

	//温度のチェック
	if(bTemp == false){
		tvMsg.setText("温度が取得出来ていません。");
		return;
	}

	sVal = etName.getText().toString();
	if(sVal.length() == 0){
		tvMsg.setText("データ名を入力して下さい。");
		return;
	}
	params.add(new BasicNameValuePair("Name", sVal));

	sVal = String.format("%f", latitude);
	params.add(new BasicNameValuePair("Latitude", sVal));

	sVal = String.format("%f", longitude);
	params.add(new BasicNameValuePair("Longitude", sVal));

	sVal = etDescription.getText().toString();
	if(sVal.length() == 0){
		tvMsg.setText("データ内容を入力して下さい。");
		return;
	}
	params.add(new BasicNameValuePair("Description", sVal));

	sVal = String.format("%f", temperature);
	params.add(new BasicNameValuePair("Temperature", sVal));

	Time time = new Time("Asia/Tokyo");
	time.setToNow();
	sVal = time.year + "/" + (time.month+1) + "/" + time.monthDay + " "
			+ time.hour + ":" + time.minute + ":" + time.second;

	params.add(new BasicNameValuePair("DateTime", sVal));

	// パラメータをクエリに変換
	String query = URLEncodedUtils.format(params, "UTF-8");
	String urlQuery = "http://isytmploggerdemo.azurewebsites.net/InsertPage.aspx?" + query;
	Task task = new Task();
    task.execute(urlQuery);
}

送信処理

/**
* Task
* クラウド送信処理のバックグラウンド処理用のクラス
*/
protected class Task extends AsyncTask<String, String, String>
{
    @Override
    protected String doInBackground(String... params)
    {
        HttpClient client = new DefaultHttpClient();
        HttpGet get = new HttpGet(params[0]);
        byte[] result = null;
        String str = "";
        try{
            HttpResponse response = client.execute(get);
            StatusLine statusLine = response.getStatusLine();
            if(statusLine.getStatusCode() == HttpURLConnection.HTTP_OK){
                result = EntityUtils.toByteArray(response.getEntity());
                str = new String(result, "UTF-8");
            }
        }
        catch (Exception e) {
        }
        return str;
    }
}

実際に登録が出来ると以下のようにCloudで確認が出来ます。(※2015/05/06 実サイトは一旦公開終了しました。)
0010

今回でこのシリーズは完了です。今回の一連の内容を踏まえて、課題や発展、バックグラウンド等をもう少し調べて書きたいと思います。




AdSense

AdSense

-Android
-

執筆者:

関連記事

温度管理システム的なものを作ってみる(その3)Androidでの温度取得

「温度管理システム的なものを作ってみる」の3回目です。前回はArduinoで温度データを取得する内容についてでした。今回はそのArduinoから温度データを取得するスマホ(Android)のアプリにつ …

AndroidでUSBシリアル通信(その4)ライブラリサンプルの内容

AndroidでUSBシリアル通信の4回目です。今回は、前回動作確認をしたライブラリサンプルの内容、つまり設定ファイルやプログラムの構成、プログラムの仕様等を見ます。 ライブライは以下です。より詳細は …

AndroidでUSBシリアル通信(その2)ライブラリサンプルのArduinoスケッチ

AndroidでUSBシリアル通信の2回目です。前回はハードウェア構成、ソフトウェア構成等全体的な内容について書きました。今回はAndroidの通信相手となるArduinoのスケッチの動作確認を行って …

温度管理システム的なものを作ってみる(その1)システム概要

「温度管理システム的なものを作ってみる」の1回目です。AndroidでUSBシリアル通信の記事を書きました。(1回目はこちらから。)次は、その少し応用的な内容で書きたいと思いました。そこで、温度センサ …

AndroidでUSBシリアル通信(その1)ハードウェア・ソフトウェア構成等

Androidスマートフォン、タブレットでUSBシリアル通信を行う方法についてです。AndroidでのUSBシリアル通信の方法は何通りかあると思いますが、今回はAndroidのUSBホスト機能とオープ …