8-2 センサ関係 1.センサの種類 種類センサの内容 TYPE_ACCELEROMETER 加速度センサ TYPE_MAGNETIC_FIELD 地磁気センサ TYPE_PROXIMITY 近接センサ TYPE_TEMPATURE 温度センサ TYPE_LIGHT 照明センサ TYPE_GRAVITY.

Slides:



Advertisements
Similar presentations
5-7 音声の再生 (1)テキストスピーチ A. 手順 音声による英文のスピーチ ・ Android 1.6 以降の実機で可能。 ・ Android では英語であれば エミュレータで可能。それ以前は実機のみ。 ・機種によっては音声がインストールされていない場合があるので、 Android.
Advertisements

独習JAVA Chapter 6 6.6 クラスの修飾子 6.7 変数の修飾子 結城 隆. 6.6 クラスの修飾 abstract インスタンス化できないクラス。1つまたは複数のサブクラスで 実装してはじめてインスタンス化できる。 final 継承されたくないことを明示する。これ以上機能拡張 / 変更でき.
8-4 Google マップの利用 1.地図を表示 ( エミュレータでも可能 ) Android API キーを取得しておくこと。 【 AndroidManifest.xml 】 ・・・
アンドロイドの GUI 作成なんて怖くな い! In 第 5 回勉強会@徳島 / オープンフォース Android 勉強会 at 2010/07/15(sut) 夜子まま.
創造工学設計I 電子情報工学科4年(前期) 12回目 (09/07/2015) 担当 古山彰一 ac
2.Androidアプリの基礎知識 2-1 Androidのアーキテクチャ
Copyright by Rich & Giro
4月卒研報告              上藤紳也.
5-4 画像の表示 (1)複数画像の表示 A.手順 (基本は5-2(1)Image View参照) ①画像ファイルをリソースに追加
アルゴリズムとデータ構造 2012年6月27日
創造工学設計I 電子情報工学科4年(前期) 8回目 (04/6/2015) 担当 古山彰一 ac
Imageの描画 画像を読み込んで表示すること。 import java.awt.*;が必要。
ARToolkitをAndroidで動かす!
アルゴリズムとデータ構造 2010年7月5日
GPSはじめの第一歩 Android編 2009/03/28 山本 慎也.
5-3 図形の描画 (1)図形を表示する手順 ①実画面に表示するクラスを作成する。
6-2 データベース 1.SQLite SQLを単純化した SQLite を使ってデータベースを操作 表「fruit」
JSFによるWebアプリケーション開発 第11回
Iアプリプログラミング その1  鳥居秀徳.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
プログラミング実習 1・2 クラス 第 1 週目 担当教員:  渡邊 直樹.
計算機プログラミングI 第12回 2003年1月23日(木) インターフェース スレッド 最後に お知らせ クイズ 授業アンケート
JAVA GUIプログラミング 第5回 ボタンとそのイベント処理.
実機を使用する際、センサ情報はとても重要
第20章 Flyweight ~同じものを共有して無駄をなくす~
インタフェース プログラミング 第14回 インタフェース プログラミング第14回.
大岩 元 慶応大学環境情報学部 二分木 データ構造とプログラミング(10) 大岩 元 慶応大学環境情報学部
第12回 2007年7月13日 応用Java (Java/XML).
J2SE 5.0(Tiger)の新機能 言語編 Ariel Networks 開発部 中山 淳.
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
11.6 ランダムアクセスファイル 11.7 StreamTokenizerクラス
ソフトウェア工学 知能情報学部 新田直也.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
日本Androidの会 事務局長 SIPropプロジェクト 代表 グロースエクスパートナーズ 今村 謙之(いまむら のりつな)
第3回 2007年4月27日 応用Java (Java/XML).
アルゴリズムとデータ構造1 2006年7月4日
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
暗号技術 ~JAVAプログラム①~ (5週目)
ソフトウェア制作論 平成30年12月5日.
オブジェクト指向 プログラミング 第七回 知能情報学部 新田直也.
10-1 SAXの概要 10-2 Saxプログラミングの基礎 10-3 saxのプログラム例
7.4 intanceof 演算子 7.5~7.9パッケージ 2003/11/28 紺野憲一
もっと詳しくArrayクラスについて調べるには → キーワード検索
ソフトウェア制作論 平成30年11月21日.
パッケージ,アクセス修飾子 2008年4月27日 海谷 治彦.
アルゴリズムとデータ構造 2011年6月23日
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
アルゴリズムとプログラミング (Algorithms and Programming)
ソフトウェア制作論 平成30年11月28日.
アルゴリズムとデータ構造1 2009年7月2日
アルゴリズムとデータ構造1 2009年6月15日
アルゴリズムとデータ構造 2012年6月25日
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
アルゴリズムとデータ構造 2010年6月17日
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
5-2 基本的なウィジェット (1)Toggle Button A. 配置
7.アプリケーションの連携 7-1 インテント(intent) 1.アプリケーションの連携とは
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
7-3 サービスの連携 1.サービスとは 画面を持たずに処理を行う【AndroidManifest.xmlへの追加】 …
5.基本API 5-1 レイアウト ウィジェットの並べ方を指定するには、 パレットのレイアウト(Layoutでは以下の8種類)を配置する。
5-6 SurfaceView による高速描画 (1)SurfaceViewを使う A. SurfaceView とは
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
5-5 文字列の描画 (1)基本的な文字列描画 A.手順
Presentation transcript:

8-2 センサ関係 1.センサの種類 種類センサの内容 TYPE_ACCELEROMETER 加速度センサ TYPE_MAGNETIC_FIELD 地磁気センサ TYPE_PROXIMITY 近接センサ TYPE_TEMPATURE 温度センサ TYPE_LIGHT 照明センサ TYPE_GRAVITY 重力センサ TYPE_PRESSURE 圧力センサ TYPE_GYROSCOPE ジャイロスコープ TYPE_LINEAR_ACCELERATION 直線加速度センサ TYPE_ROTAION_VECTOR 回転ベクトル

2.センサの検知速度 SensorManager の定数 種類定数 SENSOR_DELAY_FASTEST 早い SENSOR_DELAY_GAME ゲームに適する速さ SENSOR_DELAY_UI ユーザインターフェースに適する速さ SENSOR_DELAY_NORMAL 通常の速さ

3.加速度センサの例 (端末を早く動かすと画像が濃くなる例) A.関連クラス クラス 概 要 android.widget.ImageView クラス void setAlpha() 不透明度設定 android.hardware.SensorManager クラス Sensor getDefaultSensor(int type) センサー取得 boolean registerListener(SensorEventListener e, センサイベントリスナを登録 Sensor s, int rate) void unregisterListener(SensorEventListener e) センサイベントリスナを解除 android.hardware.Sensor クラス int getType() センサ種類を取得 android.hardware.SensorEvent クラス Sensor sensor センサを示すフィールド float[] values センサの値を表す配列

B. プログラム例(その1) package jp.sensor; import android.app.*; import android.content.*; import android.os.*; import android.view.*; import android.widget.*; import android.graphics.*; import android.hardware.*; public class SensorActivity extends Activity { ImageView imageV; SensorManager sensorM; Sensor sensor; AccSensorEventListener sse; public float val; /** Called when the activity is first created. public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout LL = new LinearLayout(this); LL.setOrientation(LinearLayout.VERTICAL); setContentView(LL);

プログラム例(その2) LL.setGravity(Gravity.CENTER); setContentView(LL); Bitmap bmp=BitmapFactory.decodeResource(getResources(), R.drawable.leaf); imageV = new ImageView(this); imageV.setImageBitmap(bmp); imageV.setAlpha(100); LL.addView(imageV); sse = new AccSensorEventListener(); } protected void onResume(){ super.onResume(); sensorM = (SensorManager)getSystemService(Context.SENSOR_SERVICE); sensor=sensorM.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); sensorM.registerListener(sse, sensor, SensorManager.SENSOR_DELAY_NORMAL); }

プログラム例(その3) protected void onPause(){ super.onPause(); sensorM.unregisterListener(sse); } class AccSensorEventListener implements SensorEventListener{ public void onSensorChanged(SensorEvent e){ if(e.sensor.getType()==Sensor.TYPE_ACCELEROMETER){ float tmp=e.values[0]+e.values[1]+e.values[2]; if ((tmp - val)>2) imageV.setAlpha(255); else imageV.setAlpha(100); val=tmp; } public void onAccuracyChanged(Sensor arg0, int arg1) {} }

4.地磁気センサの例 (地磁気センサで方角を知る) A.関連クラス クラス 概 要 android.hardware.SensorManager クラス static boolean getRotationMatrix(float[] rot, 回転行列を取得 float[] I, float[]gravity, float[] geomagnetic) static boolean remapCoordinateSystem( 座標変換 float[] inR, int X, int Y, float[] outR) static float[] getOrientaion(float[]R, float[] v) 傾きを取得

B. プログラム例(その1) package jp.sensor; import android.app.*; import android.os.*; import android.content.*; import android.view.*; import android.widget.*; import android.graphics.*; import android.hardware.*; public class DirSensorActivity extends Activity { Bitmap bmp; ImageView imageV; SensorManager sensorM; Sensor sensor1, sensor2; DirSensorEventListener dse; float[]accV=new float[3]; float[]magV=new float[3]; float[]rotMat1=new float[16]; float[]rotMat2=new float[16]; float[]I=new float[16];float[]V=new float[3];

B. プログラム例(その1) /** Called when the activity is first created. public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout LL=new LinearLayout(this); LL.setOrientation(LinearLayout.VERTICAL); LL.setGravity(Gravity.CENTER); setContentView(LL); bmp=BitmapFactory.decodeResource(getResources(), R.drawable.image001); imageV=new ImageView(this); imageV.setImageBitmap(bmp); LL.addView(imageV); dse=new DirSensorEventListener(); }

B. プログラム例(その1) protected void onResume(){ super.onResume(); sensorM=(SensorManager) getSystemService(Context.SENSOR_SERVICE); sensor1=sensorM.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); sensor2=sensorM.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); sensorM.registerListener( dse,sensor1,SensorManager.SENSOR_DELAY_NORMAL); sensorM.registerListener( dse,sensor2,SensorManager.SENSOR_DELAY_NORMAL); } protected void onPause(){ super.onPause(); sensorM.unregisterListener(dse,sensor1); sensorM.unregisterListener(dse,sensor2); }

B. プログラム例(その1) class DirSensorEventListener implements SensorEventListener{ public void onAccuracyChanged(Sensor s, int acc){} public void onSensorChanged(SensorEvent e) { switch(e.sensor.getType()) {case Sensor.TYPE_MAGNETIC_FIELD : magV=e.values.clone(); break; case Sensor.TYPE_ACCELEROMETER : accV=e.values.clone(); break; } if(magV != null && accV !=null){ // 回転行列の取得 SensorManager.getRotationMatrix(rotMat1, I, accV,magV); SensorManager.remapCoordinateSystem( rotMat1, SensorManager.AXIS_X, SensorManager.AXIS_Z,rotMat2); SensorManager.getOrientation(rotMat2, V);

B. プログラム例(その1) float d=(float)Math.toDegrees(V[0]); Matrix m=new Matrix(); m.postRotate(-d); Bitmap tmp=Bitmap.createBitmap(bmp,0,0,bmp.getWidth(), bmp.getHeight(),m,true); imageV.setImageBitmap(tmp); }