授業内容 センサーとは何かおさらい MEMS フレームワークとは何か? を理理解する 演習 センサーのフレームワークを理理解する Androidで使 用できるセンサーの種類 センサーを使ってみる

Similar documents
1: Android 2 Android 2.1 Android 4 Activity Android Service ContentProvider BroadcastReceiver Activity ( ): Android 1 Android Service ( ): ContentProv

android2.indd

Microsoft Word - Android_SQLite講座_画面800×1280

Vuzix M100 SDKインストールガイド

プロジェクト毎に名前を指定する ( ここでは AndroidTest) 動作可能な最低バージョン メインターゲットのバージョン すべて設定してクリック チェックを外す クリック

玉転がしタブレット端末の特徴の一つとして, センサを使った動作や, 指による画面操作がある. それらを活用して, 図形を動かすアプリの例を示す. 1. プロジェクトを作る Tama アプリケーションを作る,Tama プロジェクトを作る. 図 1 プロジェクト作成 プロジェクトの構成を設定する. 図

Hello, Android

Microsoft Word - Android_DI講座_画面800×1280

Prog2_10th

MOVERIO Pro BT-2000/2200 デベロッパーズガイド 自己診断機能&GPSアシスト

補足資料 キーイベント処理サンプル package jp.co.keyevent; import android.app.activity; import android.os.bundle; import android.view.keyevent; import android.widget.t

Prog2_6th

Another Activity オブジェクトは生成されてもいないのである これは 後述の onpause メソッ ドの説明からも明らかである 翻訳 : A の onpause から返ってこない限り B は create されない ため ここで長い処理は行ってはならない 実際にトレースをおこなってみ

Prog2_6th

Prog2_10th

Android でサービスしよう! 日本 Android の会 2 月 21 日大阪セミナ- 有山圭二 ( 有限会社シーリス )

Chapter 2 センサー機能と描画機能 [ カラーボールゲームアプリ ] 2-2 センサー機能について 2-1 アプリケーションの概要 2-2 センサー機能について 0 本章で使用するサンプルアプリは カラーボールゲームアプリ です まずここではアプリの概要について解説します なお 本章で扱う加

Microsoft Word - _Intent.doc

Prog2_9th

/03/26 2

Microsoft Word - Android_DI講座_画面800×1280

補足資料 インテントによるアプリケーションとアクティビティの呼出し Android アプリのキモとなるインテントとは何? インテント ( 呼び出し要求 ) とは Android 独自の機能です 簡単にいえばアプリケーションや他のアクティビティを呼び出す機能ですが 他のアプリケーションを機能や扱えるデ


Android osの歴史 1.6から2.3まで携帯のみ 3.0 タブレットのみ 4.0 タブレットで培ったUIなど の技術を携帯でも 使えるとうにと APIなんかが統合された

ファイルを直接編集する画面を切り替えることができる. 図 3 標準のレイアウトを削除する (2) グラフィカル レイアウト画面で LinearLayout(Vertical) を追加するパレットウィンドウの レイアウト の中にある LinearLayout(Vertical) をドラッグして, 編集

Prog2_6th

Prog2_5th

26 editor.putint(pref_count_key, executecount); 27 // 変更した Preference を確定させる 28 editor.commit(); 29 } (c) 実行の様子実装して実行した様子を図 1 と図 2 に示す. 一度実行するごとに, カウン

About me! 足立昌彦 / +Masahiko.Adachi )! バイドゥ株式会社技術顧問 (Simeji)! 株式会社カブク Co-Founder! Google Developer Expert (Android)

日 用 用 面 示 用 用 方

Prog2_2nd

WiFiによる位置情報サービスとスマートフォンによる実装

Microsoft Word - USB60BCR_10.doc

テーブルの確認 sqlite>.tables.tables コマンドでデータベース内のテーブル一覧を表示する テーブルスキーマの表示 sqlite>.schema mytable.schema コマンドで指定のテーブルのスキーマを表示できる テーブル出力の整形.explain コマンドを使うと テー

Prog2_2nd

Taro-korattsu.jtd

地図を利用する

2 // TODO Auto-generated method stub float x = event.getx(); float y = event.gety(); String action = ""; switch(event.getaction()) { case MotionEvent.

日 力力 生 行行 入 入 力力 生 用 方

PowerPoint Presentation


Android プログラム ガイド

ご注意 この資料料は 日本アイ ビー エム株式会社および 日本アイ ビー エムシステムズ エンジニアリング株式会社の正式なレビューを受けておりません 資料料の内容には正確を期するよう注意しておりますが この資料料の内容は 2014 年年 09 月現在の情報であり 製品の新しいリリース 修正などによっ

1: Preference Display 1 package sample. pref ; 2 3 import android. app. Activity ; 4 import android. content. Intent ; 5 import android. content. Shar

そして 取得した OutputStream インスタンスを使い 文字コードは UTF-8 として PrintWriter インスタンスを生成して あとは PrintWriter.append() で書き込みたい文字 列を渡して close() で保存する というだけです ファイルの読込み方法 それで

「Android Studioではじめる 簡単Androidアプリ開発」正誤表

10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV

Prog2_5th

事前準備 1. Visual Studio Community 2013 または Professional 以上のエディションのインストール 2. Android スマートフォンへの任意の QR コードリーダーアプリのインストール 3. アプリ素材のダウンロード

AquesTalk10 Android マニュアル

Microsoft Word - Android_SQLite講座_画面800×1280

PowerPoint プレゼンテーション

非推奨メソッド等の掲載について

ガイダンス

解答上の注意 1 解答は 解答 紙の問題番号に対応した解答欄にマークしなさい 2 選択肢は 問ごとに 意されています 問 1の選択肢は 問 2で使 しません 3 選択肢は量が多いため 探しやすさの観点よりグループ分けされています グループ分けに合わせて解答欄が区切られていますが 横 1 列で問題 1

nendSDK android 設定ガイド

CashDrawer ライブラリ API 仕様書 2014/07/09 CashDrawer ライブラリ API 仕様書 Rev / 10

Microsoft PowerPoint ppt

ガイダンス

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

デジタル表現論・第6回

情報処理学会研究報告 IPSJ SIG Technical Report Vol.2013-DBS-157 No.2 Vol.2013-IFAT-111 No /7/22 センサーネットワークデータベースでの計測データモデルの検討と GPS センサーでの検証 1 藤井達也 2 金子邦彦

mazec テクニカルガイド第5版(Android版)

2-1 KeyEvent 概要 KeyEvent クラスはアンドロイド端末のキーに対するイベントの定数 基本メソッドを提供するオブジェクトです クラス図は次のようになっています java.lang.object android.view.keyevent 2-2 KeyEvent.Callback

絵文字利用アプリケーション開発ガイド

PowerPoint プレゼンテーション

Microsoft Word - A05_AndroidプログラミングJUMP_画面800×1280

1 インストール JDK を最初にダウンロードしてインストールしておく eclipse はホームフォルダに解凍しておく (Vista 以降の OS では書き込みの権限などがうるさいのでホームフォルダにアプリを

Taro-twokansu3.jtd

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版  

Prog2_12th

Java言語 第1回

Javaプログラムの実行手順

新・明解Java入門

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版   None

2-2. TableLayout TableLayout は任意のビューを表形式で配置したい場合に利用する (HTML の Table に近いイメー ジ ) 2-3. FrameLayout ビューを重ねて表示するためのレイアウト 後から配置した部品が前面に来る仕様となっている 3. まとめ レイア

MasterDetailFlow SettingsActivity 2. Android Lint Checks 以前のバージョンよりコンパイルのチェックが厳しくなりました このような厳しいチェックを Android Lint Checks と言います Abdroid プログラミング Bible で

Prog1_15th

デジタル表現論・第4回

基本情報STEP UP演習Java対策

ガイダンス

地図ナビリンク(Android)技術仕様書

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版  

Android Layout SDK プログラミング マニュアル

ガイダンス

JavaプログラミングⅠ

Windowsユーザでも 手軽に作れるiPhoneアプリ

ガイダンス

マルチ OS エンジンを使用した固定記憶域の操作 (テクノロジー・プレビュー) - パート 2

HCI プログラミング 8 回目ボタン チェックボックス ラジオボタン 今日の講義で学ぶ内容 ボタンとアクションイベント ボタンのカスタマイズ チェックボックスとラジオボタン ボタンとアクションイベント 1 ボタンを配置してみましょう ボタンは ラベルと同じようにフォントやその色 画像の貼り付けなど

プログラミング基礎I(再)

電子申告の達人とは 法人税の達人 などの 申告書作成ソフト で作成した申告 申請等データを電子申告データに変換し 署名 送信から受信確認までの一連の操作を行うことができます 2

2016 年度 JAVA 講座第六週目 目次 パッケージ... 2 パッケージの作成... 2 パッケージの使用方法... 3 異なるパッケージ同名クラスの宣言... 4 パッケージの側面から見たアクセス修飾子... 4 ラッパークラス... 5 ラッパークラス利用法:キャスト... 5 ラッパーク

Prog1_6th

SmartBrowser_document_build30_update.pptx

Java 2 - Lesson01

ボタンイベントアプリイベント処理を含むアプリとして, ボタンをもち, ボタンを押すと文字列を表示するアプリを作る. このアプリは,HelloWorld アプリを改造して作成するため, アプリ作成の途中からの手順を示す. 1. ボタンの設置 (1) レイアウトにボタンを追加するパレットの フォーム ウ

HCI プログラミング 10 回目テキストフィールドとキーイベント 今日の講義で学ぶ内容 テキストフィールドの利用 キーイベントの処理 テキストフィールドの利用 1 テキストフィールドを配置してみましょう テキストフィールドを用いることにより 数値や文字列などのデータ入力が可能になります ソースファ

プロセス間通信

sox_tutorial_sigmod

Transcription:

Android でセンサーを使う

授業内容 センサーとは何かおさらい MEMS フレームワークとは何か? を理理解する 演習 センサーのフレームワークを理理解する Androidで使 用できるセンサーの種類 センサーを使ってみる

センサーとは?

MEMS

MEMS の採 用例例

Android で使 用可能なセンサー p.27 表 - 2

フレームワークとは? 手続き! 決まった 方法! Android はフレームワークでできている!

Activity はフレームワーク public class MainActivity extends Activity {!! @Override! protected void oncreate(bundle savedinstancestate) {! super.oncreate(savedinstancestate);!! @Override! protected void onpause() {! super.onpause();! extends Activity を書くと oncreate, onpause などの実装が 自動的に呼ばれる

AsyncTask もフレームワーク public class MyAsynctask extends AsyncTask<Void,Void,Void> {!! @Override! protected void onpreexecute(context context) {! // 事前処理理!! @Override! protected void doinbackground(void params) {! // バックグラウンド処理理!

onclick() もフレームワーク public class MyActivity! extends Activity implements OnClickListner {!! @Override! protected void oncreate(bundle savedinstancestate) {! super.oncreate(savedinstancestate);!! @Override! public void onclick(view v) {! // ボタンを押された時の処理理! ボタンが押された時に呼ばれるコールバック関数 extends には 一つだけ : クラス継承 implements には複数 : インターフェース

演習 いつものボタンを作成 public class MainActivity extends Activity {! private Button btn;!! @Override! protected void oncreate(bundle savedinstancestate) {! super.oncreate(savedinstancestate);! setcontentview(r.layout.activity_main);!! btn = (Button) findviewbyid(r.id.btn);!! btn.setonclicklistener(new OnClickListener() {! @Override! public void onclick(view v) {! Log.i( BUTTON, "Pushed");! });!

演習 implements へ書き換える public class MainActivity! extends Activity implements OnClickListener {! private Button btn;!! @Override! protected void oncreate(bundle savedinstancestate) {! super.oncreate(savedinstancestate);! setcontentview(r.layout.activity_main);!! btn = (Button) findviewbyid(r.id.btn);!! btn.setonclicklistener(this);! 自分 自 身を指す!...!

補 足 implements へ書き換える this と書くとエラーになり候補が出てくる implements が 自動的に追加される

解答 implements へ書き換える public class MainActivity! extends Activity implemements OnClickListener {! private Button btn;!! @Override! protected void oncreate(bundle savedinstancestate) {! super.oncreate(savedinstancestate);! setcontentview(r.layout.activity_main);!! btn = (Button) findviewbyid(r.id.btn);!! btn.setonclicklistener(this);!! @Override! public void onclick(view v) {! Log.i(TAG, "Pushed");!

implements を追加 コールバック関数を追加する!

センサーを使うために 利利 用するためのお作法! センサーフレームワークの使 用

センサー情報フレームワーク Sensor! SensorManager! SensorEventListener! SensorEvent SensorManager を取得して 使 用するセンサーを宣 言! SensorEventListener で設定したコールバックで! センサーのイベントが取得できる!

センサーフレームワーク public class MainActivity! extends Activity implemements SensorEventListener {!! @Override! protected void oncreate(bundle savedinstancestate) {! super.oncreate(savedinstancestate);! setcontentview(r.layout.activity_main);!! @Override! public void onsensorchanged(sensorevent event) {! //!! @Override! public void onaccuracychanged(sensor sensor, int accuracy) {! //! センサーに動きがあったら! onsensorchanged コールバックが呼ばれる!

センサーを使うための作法 システムにセンサーを使うという宣 言をする! どのセンサーを使うか宣 言する! アプリ起動時にセンサーを ON( 有効化 ) にする! アプリ終了了時にセンサーを OFF( 無効化 ) にする!

センサーマネージャの取得 private SensorManager msensormanager;!! msensormanager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);! SensorManager をシステムから取得する! システムにセンサーを使うという宣 言

センサー情報の取得と有効化 Sensor accelaration =! msensormanager.getdefaultsensor(sensor.type_accelerometer);! SensorManager から使 用するセンサーを設定する! 取得したいセンサーは Sensor.TYPE_XXXX を変えれば良良い! どのセンサーを使うか宣 言する msensormanager.registaerlistener(this, accelaration, SensorManager.SENSOR_DELAY_NORMAL);! センサーを有効化するためにはレジスト登録する必要がある! アプリ起動時にセンサーを ON( 有効化 ) にする

registerlistener API public boolean registerlistener (SensorEventListener listener, Sensor sensor, int rateus) イベントリスナー 使 用するセンサー センサーの遅延設定 イベントリスナーに this と書くと Activity に implements を! 書いて Activity 内にイベントコールバックを追加する! public class SensorActivity extends Activity implements SensorEventListener {!! :!!

イベントコールバック @Override! public final void onaccuracychanged(sensor sensor, int accuracy) {! // センサーの精度が変化した場合に呼ばれる! @Override! public final void onsensorchanged(sensorevent event) {! // センサーの値が変化した場合に呼ばれる

センサーの有効化と無効化 @Override! protected void onresume() {! super.onresume();! msensormanager.registerlistener(this, acceleration,! SensorManager.SENSOR_DELAY_NORMAL);! @Override! protected void onpause() {! super.onpause();! msensormanager.unregisterlistener(this); 基本的には onresume() でセンサーを有効化して onpause() で無効化する! センサーを有効にしたままだと バッテリーを消費するので注意! アプリ終了了時にセンサーを OFF( 無効化 ) にする

遅延設定 センサーの変化値がイベントコールバックを呼び出す遅延時間を設定!

定数値 Context.SENSOR_SERVICE! Sensor.TYPE_ACCELEROMETER! SensorManager.SENSOR_DELAY_NORMAL class Context {! public static final String SENSOR_SERVICE = sensor ; class Sensor {! public static final int TYPE_ACCELEROMETER = 1;! どこからでも参照できる 定数値 ( 変更更不不可 )

センサー値の取得 @Override! public final void onsensorchanged(sensorevent event) {! // センサーの値が変化した場合に呼ばれる リファレンス SensorEvent event int accuray : 精度度 Sensor sensor : センサーオブジェクト long timestamp : イベントの発 生した時間 float[] values : センサーデータ配列列

演習 教科書 p33 のコードを参照して 実装してみる 注意 SensorActivity となっているがキニシナイ TextView を 3 つ 用意する ( あとで使う )

写経の仕 方 public class MainActivity! extends Activity implemements SensorEventListener {!! @Override! protected void oncreate(bundle savedinstancestate) {! super.oncreate(savedinstancestate);! setcontentview(r.layout.activity_main);!! @Override! public void onsensorchanged(sensorevent event) {! //!! @Override! public void onaccuracychanged(sensor sensor, int accuracy) {! //! @Override implements などのキーワードを探す 自動 生成

加速度度センサー値の取得 // センサーの値が変化した場合に呼ばれる! float[] accell = new float[3]; accell[0] = event.values[0];! accell[1] = event.values[1];! accell[2] = event.values[2];!! Log.i( TAG, "accell[x] " + accell[0]);! Log.i(TAG, "accell[y] " + accell[1]);! Log.i(TAG, "accell[z] " + accell[2]);!! msensor[0].settext(string.valueof(accell[0]));! msensor[1].settext(string.valueof(accell[1]));! msensor[2].settext(string.valueof(accell[2])); values にそれぞれ x, y, z 軸の加速度度が 入っている

演習 加速度度センサーを取得するプログラムを教科書 p.35 を参照しながら完成させてみる 難しいと思う 人は下記からダウンロード して動作を確認してみよう h"p://goo.gl/kgg8hz AxisSensor プロジェクト

Advanced 演習 端末に実装されているセンサーの種類を列列挙してみる 搭載されているセンサーの種類は何種類? ヒント Sensor.TYPE_ ALL SensorManager クラス ArrayList を使う 表 示は Sensor#getType()

センサーのカテゴリ分け

GPS (Global Positioning System)

GPS はセンサーではなく受信機 x, y, z, t の連 立立 方程式を解くことになるので 4 つの衛星を捕捉する必要がある

Google Play Services 位置情報の提供 Googleサービスへの認証 連絡先の同期 怪しいアプリの検出

Google Play Services の導 入 Android SDK Manager から選択

Google Play Services の導 入 Existing Android Code Into Workspace

Google Play Services の導 入 $(ANDORID_SDK)/extras/google/google_play_services Browse から google- play- services_ lib を選択 Copy projects into workspace に

位置情報精度度の設定

位置情報精度度 GPS > WiFi > 基地局 数 m 十数 m ~約 200m 数千 m

位置情報取得の 方法 1 回だけ取得する 連続的に取得する

1 回だけ取得する場合 Google Play Servicesに接続 位置情報問い合わせ 位置情報取得 終了了時にGoogle Play Services を切切断

連続的に取得する場合 Google Play Servicesに接続 位置情報更更新リスナーを設定 更更新をコールバックで受け取る 終了了時にリスナーを破棄 終了了時にGoogle Play Services を切切断

GPS 情報フレームワーク LocationClient! Location! LocationClient を 生成して Play Service へ接続! 位置情報はバックグラウンドで取得され onconnected の! コールバック呼び出し後 位置情報を取得できる!

GPS 情報フレームワーク LocationClient 3.Location 2. 接続 OK 1. 接続要求 Google Play Services バックグラウンドで位置を取得

LocationClient の取得 private LocationClient mlocationclient;!! mlocationclient = new LocationClient(this, this, this);! LocationClient(Context context, GooglePlayServicesClient.ConnectionCallbacks connectioncallbacks, GooglePlayServicesClient.OnConnectionFailedListener connectionfailedlistener) 3 つの引数に this を設定している 後半 2 つはリスナーの設定なので! Activity に implements を追加してコールバック関数が必要! public class MainAcIvity extends AcIvity implements ConnecIonCallbacks, OnConnecIonFailedListener {

イベントコールバック @Override public void onconnecionfailed(connecionresult result) { // Google Play Services の接続に失敗 } @Override public void onconnected(bundle connecionhint) { // Google Play Services に接続した } @Override public void ondisconnected() { // Google Play Services と切断した }

GPS の有効化と無効化 @Override! protected void onresume() {! super.onresume();! // Google Play Services への接続! mlocationclient.connect();!! @Override! protected void onpause(sensorevent event) {! super.onpause();! // Google Play Services との切断! mlocationclient.disconnect(); 基本的には onresume() で接続して onpause() で切切断する! GPS を有効にしたままだと バッテリーを消費するので注意!

位置情報の取得 @Override public void onconnected(bundle connecionhint) { Toast.makeText(this, "Connected", Toast.LENGTH_LONG).show(); } // 位置情報の取得 mloc = mlocaionclient.getlastlocaion(); Log.d("LOCATION", "LAT: " + mloc.getlaitude()); Log.d("LOCATION", "LON: " + mloc.getlongitude()); 位置情報は LocationClient に 入っている! connectionhint には通常 null が 入っている!

AndroidManifest の設定 <uses- sdk android:minsdkversion="19" android:targetsdkversion="19" /> <uses- permission android:name="android.permission.access_fine_location"/> GPSを使うためのパーミッションの設定! <applicaion android:allowbackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/apptheme" > Google Play Serviceを使うための宣 言! <meta- data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />

パーミッションの追加 2. Add... をクリック 1. AndroidManifest.xml の Permissions タブ

パーミッションの追加 Uses Permission を選択して OK

パーミッションの追加 android.permission.access_ FINE_ LOCATION を選択

パーミッションの追加 ファイルをセーブすると 反映されることを確認

演習 位置情報取得 ここまでの説明と 教科書 p.54を 参考にして 位置情報を取得して 表 示してみる 表 示はデバッグでもトーストでも テキストでもOK 応 用 :Intent でマップ表 示してみる

Android の 3 大要素 Activity 基本中の基本 Intent 画 面の遷移 Activityの呼び出し Service バッググラウンド動作

Intent で Activity を呼び出し Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse( geo: 35.6575508, 139.69554 ); startacivity(intent); Intent.ACTION_ VIEW : 処理理を他のアプリに委譲 ( 暗黙的 Intent) geo: : スキーマを指定してシステムに丸投げ 他の例例 http: http://www.yahoo.co.jp mailto: mailto:foo@hoge.huga.com tel: tel:08003445xxx

例例えば 35.361069, 138.727867

緯度度経度度 緯度度 赤道からの 角度度 経度度 グリニッジからの 角度度 日本標準時 子午線 日本の経度度緯度度原点! Latitude( 緯度度 ) : 北北緯 35 度度 39 分 29 秒 1527 = 35.65809922! Longitude( 経度度 ): 東経 139 度度 44 分 28 秒 8869 = 139.74135747!

位置情報の更更新 LocationClient! LocationRequest! LocationRequest で更更新リクエストを 生成しておき! LocationClient でリスナーをセットすると! コールバックで更更新された位置情報を取得できる!

onconnected メソッド @Override public void onconnected(bundle connecionhint) { // 位置情報の更新リクエスト LocaIonRequest req = LocaIonRequest.create(); req.setinterval(5000); req.setsmallestdisplacement(1); req.setpriority(locaionrequest.priority_high_accuracy); mlocaionclient.requestlocaionupdates(req, this); } create() で更更新リクエストを 生成! setinterval() で更更新間隔の 目安 (ms)! setsmallestdisplacement() で更更新距離離 (m)! setpriority で更更新のプライオリティをセット! requestlocationupdates() でリスナーをセット! public class MainAcIvity extends AcIvity implements ConnecIonCallbacks, OnConnecIonFailedListener, LocaIonListener {

onlocationchanged メソッド @Override public void onlocaionchanged(locaion loc) { Toast.makeText(this, "Get LocaIon", Toast.LENGTH_SHORT).show(); } mlocaion[0].settext(string.valueof(loc.getlaitude())); mlocaion[1].settext(string.valueof(loc.getlongitude())); LocationUpdate のリスナーは onpause で解除しておく! @Override protected void onpause() { super.onpause(); // LocaIonListener を解除 mlocaionclient.removelocaionupdates(this); // Google Play Services との切断 mlocaionclient.disconnect(); }

サンプルアプリ LocationReq プロジェクト!