通过距离感应器获取实际距离[FAQ04538][Sensor]java层获得P_sensor距离传感器当前真实值,不止0,1

[DESCRIPTION]

如何使得上层java可以获取到距离传感器当前真实值,不止0,1

 

[PLATFORM]

 MT6575 MT6577 MT6589

 

[SOLUTION]

proximity sensor上报的值是做过处理,一般是固定上报1或是0,如果需要取得proximity sensor实时的值,依据不同的处理模式:
1、polling模式,XXX_ps_operate()函数中
    case SENSOR_GET_DATA:
      ……
    sensor_data->values[0]=XXX_get_ps_value(……);//上传判断后的值,即0或是1;
      sensor_data->values[1]=obj->ps;//使用values[1]上传proximity sensor的raw data;
   ……
2、中断模式,在XXX_eint_work函数中:
    ……
    sensor_data->values[0]=XXX_get_ps_value(……);//上传判断后的值,即0或是1;
    sensor_data->values[1]=obj->ps;//使用values[1]上传proximity sensor的raw data;

 

1和2方式都还需要在hwmsen_dev.c:
在hwmsen_get_interrupt_data(int sensor,hwm_sensor_data *data)函数中,需要把proximity sensor单独提出来处理,即增加这么一段代码:
 
if(sensor == ID_PROXIMITY)
{
if(data->values[1] != obj_data.sensors_data[sensor].values[1])
{
mutex_lock(&obj_data.lock);
obj_data.data_updata[sensor] = 1;
obj_data.sensors_data[sensor].values[1] = data->values[1];
obj_data.sensors_data[sensor].time = nt;
obj_data.sensors_data[sensor].value_divide = data->value_divide;
mutex_unlock(&obj_data.lock);
}
}
这样,在应用层,监听onSensorChanged的时候,就可以:
用values[0]即可得到表示靠近和远离的0和1;
用values[1]即可得到sensor 的raw data。


java 层

  private SensorManager sensorManager;

  private Sensor P_sensor;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		setContentView(R.layout.activity_fullscreen);
         sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 

         P_sensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);	  
	}
 @Override  
   protected void onResume() {  
	       super.onResume();  
	       sensorManager.registerListener(sensorEventListener, P_sensor, SensorManager.SENSOR_DELAY_NORMAL);
	   }
	   @Override
	   protected void onPause() {
	     super.onPause();
	     sensorManager.unregisterListener(sensorEventListener);
	   }
	    /** 
	     * 
	     */  
	    private SensorEventListener sensorEventListener = new SensorEventListener() {  
	  
	        @Override  
	        public void onSensorChanged(SensorEvent event) {  
	        	
	    		float f_proximiny = event.values[0];
	    		float f_proximiny2 = event.values[1];
	    		String f_proximinystr=String.valueOf(f_proximiny);
	    		
	    		String f_proximinystr2=String.valueOf(f_proximiny2);
                String str="P-Sensor"+"\n"+"靠近或远离values[0]="+f_proximinystr+"\n"+"真实距离values[1]="+f_proximinystr2;
	    		controlsView1.setText(str);
	    	     //  Toast.makeText(FullscreenActivity.this , f_proximinystr, 0).show();
	        	
	        }

			@Override
			public void onAccuracyChanged(Sensor sensor, int accuracy) {
				// TODO Auto-generated method stub
				
			}};


你可能感兴趣的:(通过距离感应器获取实际距离)