全開までで、アプリを作りそれを動作させることができた。(超簡単なプログラムだけど)
今日はもう少し、実践的な?プログラムを動かしてみたいと思う。
さて、『Androidへの道 vol.2 「センサーインターフェース」』でも紹介したが、Androidの端末には多くのセンサーが搭載されている。
僕の大学での卒業研究でも、この搭載センサーを使って何かできないだろうかと思案しているところなのだが、そもそもセンサーを操作できないことには使えない。
いや、むしろセンサーを使ったプログラムを色々と書いてみることで、何かアイデアが浮かんでくるのではないだろうか。
ということで、今日は試しに照度センサーと方位センサーから値を取得してみたいと思う。
参考にしたサイトは以下の通り。
センサーを利用する / Getting Started
△Androidに搭載されているセンサーの種類、及びそのセンサーを扱うためのクラスの紹介・説明。
サンプルとして、照度センサーの値を取得した簡単なアプリを作っている。
デジモノ狂想曲!: Androidを使って各種センサーの値を取得してみた
△方位センサーと加速度センサーとGPSから取得した生データを画面にリアルタイムに表示するためのプログラムを紹介。
照度センサー
さて、まず手始めに照度センサーを操作してみたいと思う。
そもそも照度センサーとは、スマートフォンのちょうど内部カメラ(画面上についているカメラ)の横についているセンサーで、主に画面の照度の調整に使われるセンサー。
画面の照度設定をオートにしておくと、その場の明るさによって画面の明るさも変化するというもの。
自動的に明るいところでは画面も明るくなり、暗いところでは画面も暗くなるという設定。
ハッキリ言って照度センサーの用途としてはこれくらいしか考えられないのだが、センサー値取得の第一歩として照度センサーを扱いたいと思う。
まずは、上記参考ページにも紹介されているサンプルコード。
public class SensorActivity extends Activity implements SensorEventListener { private SensorManager mSensorManager; private TextView mTextView; private ImageView mImageView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // SensorManagerのインスタンスを取得する mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); // ImageViewのインスタンスを取得して、画像を設定する mImageView = (ImageView) findViewById(R.id.image); mImageView.setImageResource(R.drawable.tb); // TextViewのインスタンスを取得する mTextView = (TextView) findViewById(R.id.value); } @Override protected void onResume() { super.onResume(); // 照度センサーを指定してオブジェクトリストを取得する List<Sensor> sensors = mSensorManager.getSensorList(Sensor.TYPE_LIGHT); // 照度センサーがサポートされているか確認してから登録する if (sensors.size() > 0) { Sensor s = sensors.get(0); mSensorManager.registerListener(this, s, SensorManager.SENSOR_DELAY_UI); } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { // onAccuracyChangedは今回は未使用 } @Override public void onSensorChanged(SensorEvent event) { switch(event.sensor.getType()){ case Sensor.TYPE_LIGHT: // 現在の明るさを取得 int light_value = (int)(event.values[0]); // 明るさが200未満のときのセリフ if (light_value < 200) { mTextView.setText("暗いから眠くなってきたにゃ。"); // 明るさが200以上のときのセリフ } else { mTextView.setText("明るすぎて眼が痛いにゃ。"); } // 明るさから透明度を求める int alpha = light_value; if (alpha > 255) // 透明度の上限値を255に設定する alpha = 255; // ImageViewに透明度を設定する mImageView.setAlpha(alpha); break; } } }