저는 현재 응용 프로그램에서 작업 중입니다. 그 중 일부는 사용자가있는 건물의 바닥을 평가하는 것으로 구성되어 있습니다. 저는 기압계/압력 센서를 그것을지지하고 그것에 근거한 추정을하려는 것입니다. 사용자가 기압계/압력 센서를 가지고 있지 않다면, 앱은 수동 입력을위한 대화창을 열어줍니다. 그렇지 않으면 높이와 층 번호가 추정됩니다.압력 센서에 아무런 값이 없습니다.
지금 당장은 바로미터/압력 센서 작동을 시도하고 있습니다. 내가 설정할 수있는 압력 값이 안드로이드 에뮬레이터를 사용하고, 다음과 같이 내 코드의 관련 섹션 설정 :
MainActivity.java
을public class MainActivity extends AppCompatActivity implements SensorEventListener, .... {
//sensor variables
public float mPressureValue = 0.0f;
public float mHeight = 0.0f;
public Integer pressureBasedFloor = 0;
//check if device has pressure sensor, setup in OnCreate
boolean hasBarometer = false;
//pressure sensor to get pressure, height and floor
@Override
public void onSensorChanged(SensorEvent event) {
//if you use this listener as listener of only one sensor (ex, Pressure), then you don't need to check sensor type.
//if a pressure sensor exists, use it to calculate height
if (hasBarometer) {
if(Sensor.TYPE_PRESSURE == event.sensor.getType()) {
mPressureValue = event.values[0];
System.out.println("Pressure" + mPressureValue);
mHeight = SensorManager.getAltitude(SensorManager.PRESSURE_STANDARD_ATMOSPHERE, mPressureValue);
System.out.println("Height" + mHeight);
pressureBasedFloor = Math.round(mHeight);
}
}
}
//pressure sensor
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
protected void onCreate(Bundle savedInstanceState) {
//check if barometer sensor exists
hasBarometer = getPackageManager().hasSystemFeature(PackageManager.FEATURE_SENSOR_BAROMETER);
final FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//if user has no barometer sensor, request dialog
if (!hasBarometer) {
showRequestFloorDialog(view); //no barometer found, manual entry
} else {
currUserData.setUserFloorNumber(pressureBasedFloor); //barometer found, add calculated floor number to field
}
}
}
});
}
}
currUserData 사용자 정의의 인스턴스이다 사용자의 예상 바닥 수를 저장하는 클래스 UserData.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.flamedra.findmycar">
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-feature android:name="android.hardware.sensor.pressure" android:required="true" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_profile"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:configChanges="orientation|keyboardHidden|screenSize">
<activity
android:name=".activities.MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar"
android:configChanges="orientation|keyboardHidden|screenSize"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".activities.CompassFragmentActivity"
android:theme="@style/AppTheme.NoActionBar"
android:configChanges="orientation|keyboardHidden|screenSize"
/>
<!--Maps Android Key-->
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/google_maps_api_key" />
<!--Maps Android Key-->
</application>
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
</manifest>
는 지금, pressureBasedFloor의 값은 내 에뮬레이터의 압력 값은 오류가없는 990로 설정된 경우에도 전체에 0을 유지 : 다음과 같이 내 매니페스트 파일이 설정되어 있습니다.
내가 뭘 잘못하고 있니? 이름 = "android.hardware.sensor.pressure" 안드로이드 : : 필요 = "true"를
그리고