2013-07-31 9 views
8

私のプロジェクトで近接センサーを使用したいと思います。近接センサーチュートリアルを探しました。そして、http://www.vogella.com/articles/AndroidSensor/article.html#sensoroverview_managerにセンサチュートリアルがあります。アンドロイドの近接センサーの使用

@Override 
public void onSensorChanged(SensorEvent event) 
{ 
    if(event.sensor.getType() == Sensor.TYPE_PROXIMITY) 
    { 
     Toast.makeText(getApplicationContext(), "working", Toast.LENGTH_SHORT).show(); 
    } 
} 

マイActivitySensorEventListenerを実施している:私は、コードを次のように近接センサを使用しようとしました。しかし、それは動作しません。近接センサを使用するにはどのような許可を必要としますか?または、私のコードはこのようなことをするのに間違っています。あなたの助けは非常に高く評価されます。ありがとうございます

+0

変更このライン

linearAcceleration = senseManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION); 

あなたはセットアップコードを表示することができますか? – Ifor

+2

アンドロイドに**近接センサ**のチュートリアルが複数あります。まず、この記事を読んで、適切な理解を深めてください(** Androidの近接センサ**の記事)(http://thecodeartist.blogspot.in/2011/01/proximity-sensor-on-android-gingerbread.html)。次に、以下のチュートリアル[** 1 **](http://androidbite.blogspot.in/2013/05/android-proximity-sensor-example.html)と[** 2 **](http:// velmuruganandroidcoding.blogspot.in/2013/05/proximity-sensor-in-android-example.html)は助けになるはずです。また、私はそれがかなりストレートフォークのように近接センサーを持つ実際のデバイス上であなたのコードを実行するアドバイスをします – Rahil2952

+0

与えられた答えの例http://androidbite.blogspot.com/2013/05/android-proximity-sensor-example。 html –

答えて

8

私はこのコードを使用します。また

import android.content.Context; 
import android.hardware.Sensor; 
import android.hardware.SensorEvent; 
import android.hardware.SensorEventListener; 
import android.hardware.SensorManager; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity implements SensorEventListener { 

    private SensorManager mSensorManager; 
    private Sensor mProximity; 
    private static final int SENSOR_SENSITIVITY = 4; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
     mProximity = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); 

    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     mSensorManager.registerListener(this, mProximity, SensorManager.SENSOR_DELAY_NORMAL); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     mSensorManager.unregisterListener(this); 
    } 

    @Override 
    public void onSensorChanged(SensorEvent event) { 
     if (event.sensor.getType() == Sensor.TYPE_PROXIMITY) { 
      if (event.values[0] >= -SENSOR_SENSITIVITY && event.values[0] <= SENSOR_SENSITIVITY) { 
       //near 
       Toast.makeText(getApplicationContext(), "near", Toast.LENGTH_SHORT).show(); 
      } else { 
       //far 
       Toast.makeText(getApplicationContext(), "far", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 

    @Override 
    public void onAccuracyChanged(Sensor sensor, int accuracy) { 

    } 

} 

をすることができますcheck this code in GitHub

+1

これはうまくいかないでしょう。私のデバイス(Android 5.1.1のMoto X 2013)は「3.0」を近い状態と報告していますので、このコードは常に「far」と表示されます –

+1

こんにちはMarcin Kozinski、私は同じ問題を抱えていました。 ](http://stackoverflow.com/questions/35767115/unregisterlistener-doesnt-work-with-proximity-screen-off-wake-lock)。私があなたを助けることを願っています。 – Cabezas

+1

正しい質問/回答にリンクしてもよろしいですか?これは無関係で、同じ問題があります。「近く」は常に「0」であると仮定しているため、一部の電話機では「近く」とは決して報告されません。今のところ私は 'if(event.values [0]

2

あなたのリスナーを登録する必要があります。あなたの活動で:

@Override 
public final void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    // Get an instance of the sensor service, and use that to get an instance of 
    // a particular sensor. 
    mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
    mProximity = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); 
} 

@Override 
protected void onResume() { 
    // Register a listener for the sensor. 
    super.onResume(); 
    mSensorManager.registerListener(this, mProximity, SensorManager.SENSOR_DELAY_NORMAL); 
} 

あなたはセンサデータであなたのものを行うことができます。

は、私の答えは遅すぎる場合)=申し訳ありません

0

あなた我々はプログラムすることができます使用して、基本的なフレームワークを持っているfollow this codeをすることができます任意のセンサー。

proximity = senseManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); 
関連する問題