SIN@SAPPOROWORKSの覚書

C#を中心に、夜な夜な試行錯誤したコードの記録です。

Xamarin.Android 近接センサー

【 Xamarin 記事一覧 】

TYPE_PROXIMITY 近接センサ


近接センサは、ユーザがAndroidを耳に当てているかどうかをチェックするためのセンサーです。

手元の実機では、MaximumRangeが9となっていますが、取得できるデータは0か9の2値だけでした。耳を当てる部分にセンサーがあるらしく、そこから2〜3cmのところで反応しています。
機種によって、違いがあるようですが、どれも「0」か「それ以外」かの判断程度しかできないようです。

[Activity(Label = "AndroidApplication1", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity, ISensorEventListener{

        private SensorManager _senseManager;//センサーマネージャ
        private Sensor _proximitySensor;//近接センサー
        private TextView _textView;

        protected override void OnCreate(Bundle bundle){
            base.OnCreate(bundle);
            SetContentView(Resource.Layout.Main);

            _textView = FindViewById<TextView>(Resource.Id.textView1);
            //センサーマネージャ取得
            _senseManager = (SensorManager)GetSystemService(SensorService);
            //近接センサー取得
            _proximitySensor = _senseManager.GetDefaultSensor(SensorType.Proximity);
        }

        protected override void OnResume(){
            base.OnResume();
            //リスナー登録
            _senseManager.RegisterListener(this, _proximitySensor, SensorDelay.Ui);
        }

        protected override void OnPause(){
            base.OnPause();
            //リスナー解除            
            _senseManager.UnregisterListener(this);
        }

        //ISensorEventListenerで必須
        public void OnAccuracyChanged(Sensor sensor, SensorStatus accuracy){}

        public void OnSensorChanged(SensorEvent e){
            //近接センサーに関するものだけが対象
            if (e.Sensor.Type == SensorType.Proximity){
                var sb = new System.Text.StringBuilder();
                //センサー名
                sb.Append(string.Format("Name:{0}\r\n", _proximitySensor.Name));
                //レンジ
                sb.Append(string.Format("MaximumRange:{0}\r\n", _proximitySensor.MaximumRange));
                //現在のデータ
                sb.Append(string.Format("Value:{0}\r\n", e.Values[0]));
                _textView.Text = sb.ToString();
            }
        }
    }

【 Xamarin 記事一覧 】