2013-07-31 32 views
8

Tôi muốn sử dụng cảm biến tiệm cận trong dự án của mình. Tôi đã tìm kiếm hướng dẫn cảm biến tiệm cận. Và tôi đã tìm thấy hướng dẫn cảm biến tại http://www.vogella.com/articles/AndroidSensor/article.html#sensoroverview_manager. Tôi cố gắng để sử dụng cảm biến khoảng cách như đoạn mã sau:Sử dụng cảm biến tiệm cận trong android

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

My Activity đang triển khai SensorEventListener. Nhưng nó không hoạt động. Tôi có cần phải sử dụng bất kỳ sự cho phép nào để sử dụng cảm biến tiệm cận không? Hoặc Mã của tôi sai khi thực hiện công cụ này. Sự giúp đỡ của bạn sẽ rất được đánh giá cao. Cảm ơn bạn

+0

Bạn có thể hiển thị các mã thiết lập? – Ifor

+2

Có nhiều hướng dẫn cho ** Cảm biến tiệm cận ** trên Android. Đầu tiên, hãy phát triển sự hiểu biết đúng đắn bằng cách đọc [bài viết trên ** Cảm biến tiệm cận trên Android **] (http://thecodeartist.blogspot.in/2011/01/proximity-sensor-on-android-gingerbread.html). Tiếp theo, các hướng dẫn sau [** 1 **] (http://androidbite.blogspot.in/2013/05/android-proximity-sensor-example.html) và [** 2 **] (http: // velmuruganandroidcoding.blogspot.in/2013/05/proximity-sensor-in-android-example.html) cần được trợ giúp. Ngoài ra tôi sẽ tư vấn cho bạn để chạy mã của bạn trên thiết bị thực sự có cảm biến khoảng cách vì nó là khá thẳng-byw – Rahil2952

+0

chạy ví dụ về câu trả lời cho http://androidbite.blogspot.com/2013/05/android-proximity-sensor-example. html –

Trả lời

8

tôi sử dụng mã này:

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) { 

    } 

} 

Ngoài ra bạn có thể check this code in GitHub

+1

Điều này dường như không hoạt động. Thiết bị của tôi (Moto X 2013 trên Android 5.1.1) báo cáo '3.0' là trạng thái gần, vì vậy mã này sẽ luôn hiển thị" xa " –

+1

Xin chào Marcin Kozinski, tôi gặp vấn đề tương tự, bạn có thể kiểm tra câu hỏi và câu trả lời khác của tôi ở đây ] (http://stackoverflow.com/questions/35767115/unregisterlistener-doesnt-work-with-proximity-screen-off-wake-lock). Tôi hy vọng rằng tôi có thể giúp bạn. – Cabezas

+1

Bạn có chắc chắn đã liên kết với đúng câu hỏi/câu trả lời không? Nó trông không liên quan và có cùng một vấn đề: giả sử "gần" luôn luôn là '0', vì vậy trên một số điện thoại nó sẽ không bao giờ báo cáo" gần ". Bây giờ tôi chỉ kiểm tra 'if (event.values ​​[0]

2

bạn phải đăng ký người nghe của mình. Trong hoạt động của bạn:

@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); 
} 

và sau đó bạn overriden onSensorChanged() phương pháp bạn có thể làm công cụ của mình với dữ liệu cảm biến.

Xin lỗi nếu câu trả lời của tôi là quá muộn =)

0

Bạn có thể follow this code trong đó có khuôn khổ cơ bản sử dụng mà chúng tôi có thể lập trình bất kỳ cảm biến nào.

Thay đổi dòng này

linearAcceleration = senseManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION); 

để

proximity = senseManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); 
Các vấn đề liên quan