I have a phone ARCHOS DIAMOND S with Android 5.1 Lollipop, that includes accelerometer and compass sensors. I have checked them with some freeware.
Moreover, DisplayService, OrientationService work fine. But not the compass and accelerometer services.
Have I forgotten something in the Java code?
Thanks for your help
Accelerometer: "acceleration.getX()" does not work. In the console, ""Test accelero 2a"" is written and, then, a shutdown message appears
Label labelVarAafficherAccelX = new Label();
Label labelVarAafficherAccelY = new Label();
System.out.println("Test accelero 1");
Services.get(AccelerometerService.class).ifPresent(service -> {
Acceleration acceleration = service.getCurrentAcceleration();
System.out.println("Test accelero 2a");
double getX = acceleration.getX(); // that does not work
System.out.println("**Test accelero 2b**");
String varAafficherAccelX = Double.toString(acceleration.getX());
String varAafficherAccelY = Double.toString(acceleration.getY());
labelVarAafficherAccelX.setText(varAafficherAccelX);
labelVarAafficherAccelY.setText(varAafficherAccelY);
System.out.printf("Acceleration field: %.2f, %.2f, %.2f ", acceleration.getX(), acceleration.getY(), acceleration.getZ());
});
Compass: The return value from the heading service is always 0.0 (whereas I had successfully tested this phone sensor with a freeware).
Label labelGluonHeading = new Label();
Services.get(CompassService.class).ifPresent(service -> {
double heading = service.getHeading(); // heading (cap): from 0 to 359.99
System.out.println("**Heading:** " +heading);
labelGluonHeading.setText("GLUON_Cap: " + Double.toString(heading));
});
The build.gradle:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'org.javafxports:jfxmobile-plugin:1.3.2'
}
}
apply plugin: 'org.javafxports.jfxmobile'
repositories {
jcenter()
maven {
url 'http://nexus.gluonhq.com/nexus/content/repositories/releases'
}
}
mainClassName = 'com.gluonapplication.GluonApplication'
dependencies {
compile 'com.gluonhq:charm:4.3.0'
}
jfxmobile {
downConfig {
version '3.2.0'
plugins 'accelerometer', 'compass', 'device', 'orientation', 'storage', 'vibration', 'display', 'magnetometer', 'lifecycle', 'statusbar', 'position'
}
android {
applicationPackage = 'com.gluonapplication'
manifest = 'src/android/AndroidManifest.xml'
androidSdk = 'C:/Users/pascal/AppData/Local/Android/sdk'
resDirectory = 'src/android/res'
compileSdkVersion = '23'
buildToolsVersion = '25.0.1'
}
ios {
infoPList = file('src/ios/Default-Info.plist')
forceLinkClasses = [
'com.gluonhq.**.*',
'javax.annotations.**.*',
'javax.inject.**.*',
'javax.json.**.*',
'org.glassfish.json.**.*'
]
}
}
ABOUT THE ACCELEROMETER , the trace is:
02-01 19:59:39.349 17994 18039 I System.out: Test accelero 2b
02-01 19:59:39.350 17994 18039 W System.err: Exception in Application start method
02-01 19:59:39.352 317 18045 W OMXCodec: FILL_BUFFER_DONE(buffer: 4072872736, size: 46080, flags: 0x00000000, timestamp: 1920000 us (1.92 secs))
02-01 19:59:39.352 317 18045 W OMXCodec: EMPTY_BUFFER_DONE(buffer: 4072870816)
02-01 19:59:39.353 317 18045 D OMXCodec: [OMX.MTK.AUDIO.DECODER.MP3] Calling emptyBuffer on buffer 0xf2c313a0 (length 9600), timestamp 6720000 us (6.72 secs)
02-01 19:59:39.355 17994 18039 I System.out: QuantumRenderer: shutdown
02-01 19:59:39.356 17994 18034 W System.err: java.lang.reflect.InvocationTargetException
02-01 19:59:39.356 17994 18034 W System.err: at java.lang.reflect.Method.invoke(Native Method)
02-01 19:59:39.356 17994 18034 W System.err: at java.lang.reflect.Method.invoke(Method.java:372)
02-01 19:59:39.356 17994 18034 W System.err: at javafxports.android.DalvikLauncher$1.run(DalvikLauncher.java:188)
02-01 19:59:39.356 17994 18034 W System.err: at java.lang.Thread.run(Thread.java:818)
02-01 19:59:39.356 17994 18034 W System.err: Caused by: java.lang.RuntimeException: Exception in Application start method
02-01 19:59:39.356 17994 18034 W System.err: at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
02-01 19:59:39.356 17994 18034 W System.err: at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$138(LauncherImpl.java:182)
02-01 19:59:39.356 17994 18034 W System.err: at com.sun.javafx.application.LauncherImpl.access$lambda$1(LauncherImpl.java)
02-01 19:59:39.356 17994 18034 W System.err: at com.sun.javafx.application.LauncherImpl$$Lambda$2.run(Unknown Source)
02-01 19:59:39.356 17994 18034 W System.err: ... 1 more
02-01 19:59:39.356 17994 18034 W System.err: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'double com.gluonhq.charm.down.plugins.Acceleration.getX()' on a null object reference
02-01 19:59:39.356 17994 18037 D Surface : Surface::setBuffersDimensions(this=0xf49e5500,w=720,h=1152)
02-01 19:59:39.356 288 960 I BufferQueueProducer: [SurfaceView](this:0x7f72779000,id:231,api:1,p:17994,c:288) new GraphicBuffer needed
02-01 19:59:39.356 288 960 I [MALI][Gralloc]: Usage: 0xb00, format: 0x1 stride: 720 vertical_stride: 1152 size: 3317760
02-01 19:59:39.357 317 18045 W OMXCodec: FILL_BUFFER_DONE(buffer: 4072872832, size: 46080, flags: 0x00000000, timestamp: 2160000 us (2.16 secs))
02-01 19:59:39.357 288 960 D GraphicBuffer: alloc, handle(0x7f7277d7a0) (w:720 h:1152 s:720 f:0x1 u:0x000b00) err(0)
02-01 19:59:39.357 317 18045 W OMXCodec: EMPTY_BUFFER_DONE(buffer: 4072870912)
02-01 19:59:39.357 317 18045 D OMXCodec: [OMX.MTK.AUDIO.DECODER.MP3] Calling emptyBuffer on buffer 0xf2c31400 (length 9600), timestamp 6960000 us (6.96 secs)
02-01 19:59:39.358 17994 18034 W System.err: at com.gluonapplication.GluonApplication.lambda$start$0(GluonApplication.java:287)
02-01 19:59:39.358 17994 18034 W System.err: at com.gluonapplication.GluonApplication$$Lambda$1.accept(Unknown Source)
02-01 19:59:39.358 17994 18034 W System.err: at java.util.Optional.ifPresent(Optional.java:154)
02-01 19:59:39.358 17994 18034 W System.err: at com.gluonapplication.GluonApplication.start(GluonApplication.java:282)
02-01 19:59:39.358 17994 18034 W System.err: at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$145(LauncherImpl.java:863)
02-01 19:59:39.358 17994 18034 W System.err: at com.sun.javafx.application.LauncherImpl.access$lambda$8(LauncherImpl.java)
02-01 19:59:39.358 17994 18034 W System.err: at com.sun.javafx.application.LauncherImpl$$Lambda$9.run(Unknown Source)
02-01 19:59:39.358 17994 18034 W System.err: at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$158(PlatformImpl.java:326)
02-01 19:59:39.358 17994 18034 W System.err: at com.sun.javafx.application.PlatformImpl.access$lambda$6(PlatformImpl.java)
02-01 19:59:39.358 17994 18034 W System.err: at com.sun.javafx.application.PlatformImpl$$Lambda$7.run(Unknown Source)
02-01 19:59:39.358 17994 18034 W System.err: at com.sun.javafx.application.PlatformImpl.lambda$null$156(PlatformImpl.java:295)
02-01 19:59:39.358 17994 18034 W System.err: at com.sun.javafx.application.PlatformImpl.access$lambda$18(PlatformImpl.java)
02-01 19:59:39.358 17994 18034 W System.err: at com.sun.javafx.application.PlatformImpl$$Lambda$19.run(Unknown Source)
02-01 19:59:39.358 17994 18034 W System.err: at java.security.AccessController.doPrivileged(AccessController.java:52)
02-01 19:59:39.358 17994 18034 W System.err: at com.sun.javafx.application.PlatformImpl.lambda$runLater$157(PlatformImpl.java:294)
02-01 19:59:39.358 17994 18034 W System.err: at com.sun.javafx.application.PlatformImpl.access$lambda$5(PlatformImpl.java)
02-01 19:59:39.358 17994 18034 W System.err: at com.sun.javafx.application.PlatformImpl$$Lambda$6.run(Unknown Source)
02-01 19:59:39.358 17994 18034 W System.err: at com.sun.glass.ui.monocle.RunnableProcessor.runLoop(RunnableProcessor.java:92)
02-01 19:59:39.358 17994 18034 W System.err: at com.sun.glass.ui.monocle.RunnableProcessor.run(RunnableProcessor.java:51)
02-01 19:59:39.358 17994 18034 W System.err: ... 1 more
02-01 19:59:39.358 17994 18037 D GraphicBuffer: register, handle(0xf00b17a0) (w:720 h:1152 s:720 f:0x1 u:0x000b00)
02-01 19:59:39.360 371 371 D QMCX983D: waitting for enable m or o sensor
02-01 19:59:39.360 371 371 D QMCX983D: QMC_IOCTL_GET_OPEN_STATUS failed
02-01 19:59:39.360 371 371 D QMCX983D: QMC_IOCTL_GET_DELAY failed
02-01 19:59:39.360 371 371 D QMCX983D: QMC_IOCTL_SET_YPR failed!
02-01 19:59:39.361 317 18045 W OMXCodec: FILL_BUFFER_DONE(buffer: 4072872928, size: 46080, flags: 0x00000000, timestamp: 2400000 us (2.40 secs))
02-01 19:59:39.361 317 18045 W OMXCodec: EMPTY_BUFFER_DONE(buffer: 4072871008)
02-01 19:59:39.361 317 18045 D OMXCodec: [OMX.MTK.AUDIO.DECODER.MP3] Calling emptyBuffer on buffer 0xf2c31460 (length 9600), timestamp 7200000 us (7.20 secs)
02-01 19:59:39.365 17994 18037 D Surface : Surface::setBuffersDimensions(this=0xf49e5500,w=720,h=1152)
02-01 19:59:39.366 317 18045 W OMXCodec: FILL_BUFFER_DONE(buffer: 4072873024, size: 46080, flags: 0x00000000, timestamp: 2640000 us (2.64 secs))
02-01 19:59:39.366 288 474 I BufferQueueProducer: [SurfaceView](this:0x7f72779000,id:231,api:1,p:17994,c:288) new GraphicBuffer needed
Note: the trace is the same with or with the "New Acceleration" Acceleration acceleration = new Acceleration(0, 0, 0, LocalDateTime.now()); acceleration = service.getCurrentAcceleration();
ABOUT THE HEADING SENSOR , the trace is:
02-01 20:20:24.870 19093 19137 I System.out: **Deb test compass**
02-01 20:20:24.870 371 371 D QMCX983D: QMC_IOCTL_SET_YPR failed!
02-01 20:20:24.871 317 897 E AudioALSAPlaybackHandlerBase: openPcmDriver(), pcm_start(0xf2c7c7c0) fail due to cannot start channel: Broken pipe
02-01 20:20:24.871 317 897 D AudioALSAPlaybackHandlerBase: -openPcmDriver(), mPcm = 0xf2c7c7c0
02-01 20:20:24.871 317 897 D AudioALSAHardwareResourceManager: +startOutputDevice(), new_devices = 0x2, mStartOutputDevicesCount = 0 SampleRate = 44100
02-01 20:20:24.871 317 897 D AudioALSADriverUtility: GetPropertyValue key = af.resouce.extdac_support value = 0
02-01 20:20:24.871 317 897 D AudioALSADeviceConfigManager: GetDeviceDescriptorbyname
02-01 20:20:24.871 317 897 D AudioALSADeviceConfigManager: CheckDeviceExist exist devicename = headphone_output
02-01 20:20:24.871 317 897 D AudioALSADeviceConfigManager: ApplyDeviceTurnonSequenceByName() DeviceName = headphone_output descriptor->DeviceStatusCounte = 0
02-01 20:20:24.871 317 897 D AudioALSADeviceConfigManager: cltname = Audio_Amp_R_Switch cltvalue = On
02-01 20:20:24.872 317 19143 W OMXCodec: FILL_BUFFER_DONE(buffer: 4072872640, size: 46080, flags: 0x00000000, timestamp: 1680000 us (1.68 secs))
02-01 20:20:24.872 317 19143 W OMXCodec: EMPTY_BUFFER_DONE(buffer: 4072870720)
02-01 20:20:24.873 317 19143 D OMXCodec: [OMX.MTK.AUDIO.DECODER.MP3] Calling emptyBuffer on buffer 0xf2c31340 (length 9600), timestamp 6480000 us (6.48 secs)
02-01 20:20:24.873 317 897 D AudioALSADeviceConfigManager: cltname = Audio_Amp_L_Switch cltvalue = On
02-01 20:20:24.873 317 897 D AudioALSADeviceConfigManager: GetDeviceDescriptorbyname
02-01 20:20:24.873 317 897 D AudioALSADeviceConfigManager: CheckDeviceExist exist devicename = ext_speaker_output
02-01 20:20:24.873 317 897 D AudioALSADeviceConfigManager: ApplyDeviceTurnonSequenceByName() DeviceName = ext_speaker_output descriptor->DeviceStatusCounte = 0
02-01 20:20:24.873 317 897 D AudioALSADeviceConfigManager: cltname = Ext_Speaker_Amp_Switch cltvalue = On
02-01 20:20:24.875 849 3163 D SensorService: Calling batch handle==1 flags=0rate=10000000 timeout== 0
02-01 20:20:24.875 849 3163 D SensorService: SensorDevice::batch: ident=0x7f61119cc0, handle=0x00000001, flags=0, period_ns=10000000 timeout=0
02-01 20:20:24.875 849 3163 D SensorService: >>> curr_period=66667000 min_period=10000000 curr_timeout=0 min_timeout=0
02-01 20:20:24.875 849 3163 D SensorService: Calling activate on 1
02-01 20:20:24.875 849 3163 D SensorService: SensorDevice::activate: ident=0x7f61119cc0, handle=0x00000001, enabled=1, count=2
02-01 20:20:24.875 849 3163 D SensorService: enable index=0
02-01 20:20:24.875 849 3163 D SensorService: >>> actuating h/w setDelay 1 10000000
02-01 20:20:24.875 849 3163 E Sensors : handleToDriver handle(0)
02-01 20:20:24.875 849 3163 D Accel : setDelay: (handle=0, ns=10000000)
02-01 20:20:24.875 849 3163 D Accel : no ACC setDelay control attr
02-01 20:20:24.875 849 3163 E Sensors : new setDelay handle(0),ns(10000000)m, error(-1), index(2)
02-01 20:20:24.875 849 3163 E Sensors : new setDelay handle(0),ns(10000000) err! go to hwmsen
02-01 20:20:24.875 849 3163 D Hwmsen_sensors: setDelay: (handle=0, ns=10000000)
02-01 20:20:24.875 849 3163 D Hwmsen_sensors: setDelay: (what=0, ms=10)
02-01 20:20:24.875 849 3163 D Hwmsen_sensors: really setDelay: (what=0, ms=10)
02-01 20:20:24.875 849 1694 D SensorService: Calling batch handle==2 flags=0rate=100000000 timeout== 0
02-01 20:20:24.875 849 1694 D SensorService: SensorDevice::batch: ident=0x7f61119cc0, handle=0x00000002, flags=0, period_ns=100000000 timeout=0
02-01 20:20:24.875 849 1694 D SensorService: >>> curr_period=-1 min_period=100000000 curr_timeout=-1 min_timeout=0
02-01 20:20:24.875 849 1694 D SensorService: Calling activate on 2
02-01 20:20:24.875 849 1694 D SensorService: SensorDevice::activate: ident=0x7f61119cc0, handle=0x00000002, enabled=1, count=1
02-01 20:20:24.875 849 1694 D SensorService: enable index=0
02-01 20:20:24.875 849 1694 D SensorService: >>> actuating h/w activate handle=2 enabled=1
02-01 20:20:24.875 849 1694 D Sensors : activate handle =1, enable = 1
02-01 20:20:24.875 849 1694 E Sensors : handleToDriver handle(1)
02-01 20:20:24.875 849 1694 D Sensors : use new sensor index=3, mSensors[index](7089b000)
02-01 20:20:24.875 849 1694 D Magnetic: fwq enable: handle:1, en:1
02-01 20:20:24.875 849 1694 D Magnetic: handle(1),path:magactive
02-01 20:20:24.875 849 1694 D Magnetic: no magntic enable attr
02-01 20:20:24.875 849 1694 D Sensors : use old sensor err(-1),index(3) go to old hwmsen
02-01 20:20:24.875 849 1694 D Hwmsen_sensors: Hwmsen_Enable: handle:1, en:1
02-01 20:20:24.876 849 1694 D Hwmsen_sensors: virtual int Hwmsen::enable(int32_t, int): handle 1, enable or disable 1!
02-01 20:20:24.877 317 19143 W OMXCodec: FILL_BUFFER_DONE(buffer: 4072872736, size: 46080, flags: 0x00000000, timestamp: 1920000 us (1.92 secs))
02-01 20:20:24.877 317 19143 W OMXCodec: EMPTY_BUFFER_DONE(buffer: 4072870816)
02-01 20:20:24.877 317 19143 D OMXCodec: [OMX.MTK.AUDIO.DECODER.MP3] Calling emptyBuffer on buffer 0xf2c313a0 (length 9600), timestamp 6720000 us (6.72 secs)
02-01 20:20:24.881 317 19143 W OMXCodec: FILL_BUFFER_DONE(buffer: 4072872832, size: 46080, flags: 0x00000000, timestamp: 2160000 us (2.16 secs))
02-01 20:20:24.881 317 19143 W OMXCodec: EMPTY_BUFFER_DONE(buffer: 4072870912)
02-01 20:20:24.881 317 19143 D OMXCodec: [OMX.MTK.AUDIO.DECODER.MP3] Calling emptyBuffer on buffer 0xf2c31400 (length 9600), timestamp 6960000 us (6.96 secs)
02-01 20:20:24.882 849 1694 D Hwmsen_sensors: active_sensors =13
02-01 20:20:24.882 849 1694 D SensorService: >>> actuating h/w setDelay 2 100000000
02-01 20:20:24.882 849 1694 E Sensors : handleToDriver handle(1)
02-01 20:20:24.882 849 1694 D Magnetic: no MAG setDelay control attr
02-01 20:20:24.882 849 1694 E Sensors : new setDelay handle(1),ns(100000000)m, error(-1), index(3)
02-01 20:20:24.882 849 1694 E Sensors : new setDelay handle(1),ns(100000000) err! go to hwmsen
02-01 20:20:24.882 849 1694 D Hwmsen_sensors: setDelay: (handle=1, ns=100000000)
02-01 20:20:24.882 849 1694 D Hwmsen_sensors: setDelay: (what=1, ms=100)
02-01 20:20:24.882 849 1694 D Hwmsen_sensors: really setDelay: (what=1, ms=100)
02-01 20:20:24.883 19093 19137 I System.out: **Heading: 0.0**
02-01 20:20:24.884 19093 19137 I System.out: Fin test compass
02-01 20:20:24.884 19093 19137 I System.out: Deb test orientation
02-01 20:20:24.885 317 19143 W OMXCodec: FILL_BUFFER_DONE(buffer: 4072872928, size: 46080, flags: 0x00000000, timestamp: 2400000 us (2.40 secs))
02-01 20:20:24.885 317 19143 W OMXCodec: EMPTY_BUFFER_DONE(buffer: 4072871008)
02-01 20:20:24.885 317 19143 D OMXCodec: [OMX.MTK.AUDIO.DECODER.MP3] Calling emptyBuffer on buffer 0xf2c31460 (length 9600), timestamp 7200000 us (7.20 secs)
02-01 20:20:24.889 19093 19137 I System.out: Fin test orientation
02-01 20:20:24.889 19093 19137 I System.out: Hello World! Debug avec adb - fin d'initialisation
02-01 20:20:24.889 317 19143 W OMXCodec: FILL_BUFFER_DONE(buffer: 4072873024, size: 46080, flags: 0x00000000, timestamp: 2640000 us (2.64 secs))
02-01 20:20:24.889 317 19143 W OMXCodec: EMPTY_BUFFER_DONE(buffer: 4072871104)
02-01 20:20:24.889 317 19143 D OMXCodec: [OMX.MTK.AUDIO.DECODER.MP3] Calling emptyBuffer on buffer 0xf2c314c0 (length 9600), timestamp 7440000 us (7.44 secs)
Given that both acceleration and heading change quickly over time, you should listen to changes in the properties AccelerometerService::accelerationProperty
and CompassService::headingProperty
, instead of getting a single value in a given instant (as it will be probably 0 or null) since the sensors might not be ready yet.
This is how you can listen to heading variations:
Services.get(CompassService.class)
.ifPresent(s -> s.headingProperty()
.addListener((obs, ov, nv) ->
labelGluonHeading.setText(String.format("Heading: %.2f\u00b0",
nv.doubleValue()))));
And to the accelerometer sensor:
Services.get(AccelerometerService.class)
.ifPresent(s -> s.accelerationProperty()
.addListener((obs, ov, nv) ->
labelGluonAcceleration.setText(String.format("%.1f %.1f %.1f",
nv.getX(), nv.getY(), nv.getZ()))));
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.