• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Fehler in acb_20170209 (3010)

cacheboxer

Geomaster
arbor95 schrieb:
Mit Version acb_3018_20170222.apk sollte die Kamera wieder tun.
Dafür scheint es jetzt mit älteren Android-Versionen (bei mir Note 2 mit 4.3) nicht mehr zu gehen. Die Kamera-App stürzt reproduzierbar ab, die Speichern/Abbrechen-Frage kommt nicht mehr:
Code:
03-06 21:37:55.191: W/System.err(32200): java.io.FileNotFoundException: /sys/class/power_supply/battery/camera: open failed: ENOENT (No such file or directory)
03-06 21:37:55.191: W/System.err(32200): 	at libcore.io.IoBridge.open(IoBridge.java:409)
03-06 21:37:55.191: W/System.err(32200): 	at java.io.FileOutputStream.<init>(FileOutputStream.java:88)
03-06 21:37:55.191: W/System.err(32200): 	at java.io.FileOutputStream.<init>(FileOutputStream.java:73)
03-06 21:37:55.191: W/System.err(32200): 	at com.sec.android.hardware.SecHardwareInterface.setBatteryADC(SecHardwareInterface.java:389)
03-06 21:37:55.196: W/System.err(32200): 	at com.sec.android.app.camera.Camera.onResume(Camera.java:1656)
03-06 21:37:55.196: W/System.err(32200): 	at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1209)
03-06 21:37:55.196: W/System.err(32200): 	at android.app.Activity.performResume(Activity.java:5450)
03-06 21:37:55.196: W/System.err(32200): 	at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2922)
03-06 21:37:55.196: W/System.err(32200): 	at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2966)
03-06 21:37:55.196: W/System.err(32200): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2367)
03-06 21:37:55.196: W/System.err(32200): 	at android.app.ActivityThread.access$700(ActivityThread.java:168)
03-06 21:37:55.196: W/System.err(32200): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1329)
03-06 21:37:55.196: W/System.err(32200): 	at android.os.Handler.dispatchMessage(Handler.java:99)
03-06 21:37:55.196: W/System.err(32200): 	at android.os.Looper.loop(Looper.java:137)
03-06 21:37:55.196: W/System.err(32200): 	at android.app.ActivityThread.main(ActivityThread.java:5493)
03-06 21:37:55.196: W/System.err(32200): 	at java.lang.reflect.Method.invokeNative(Native Method)
03-06 21:37:55.196: W/System.err(32200): 	at java.lang.reflect.Method.invoke(Method.java:525)
03-06 21:37:55.196: W/System.err(32200): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209)
03-06 21:37:55.196: W/System.err(32200): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025)
03-06 21:37:55.196: W/System.err(32200): 	at dalvik.system.NativeStart.main(Native Method)
03-06 21:37:55.196: W/System.err(32200): Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
03-06 21:37:55.196: W/System.err(32200): 	at libcore.io.Posix.open(Native Method)
03-06 21:37:55.196: W/System.err(32200): 	at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
03-06 21:37:55.196: W/System.err(32200): 	at libcore.io.IoBridge.open(IoBridge.java:393)
03-06 21:37:55.196: W/System.err(32200): 	... 19 more
Das aufgenommene Bild landet im normalen Verzeichnis der Kamera, nicht in cachebox/User/Media. Außerhalb von ACB funktioniert die Kamera einwandfrei, auch aus anderen Apps.
Die Video- und Soundrecorder-Funktionen sind nicht betroffen. Die funktionieren wie gehabt.

ACB 0.9.20170301 (Test svn 3019)
 

arbor95

Geoguru
Kannst du mal den Loglevel auf Info stellen und dann die logdatei posten?
(Vielleicht steht auch jetzt schon etwas (Fehler) mehr in der logdatei?)
Unter welchem Namen steht es im DCIM Verzeichnis ?
 

cacheboxer

Geomaster
arbor95 schrieb:
Kannst du mal den Loglevel auf Info stellen und dann die logdatei posten?
Code:
19:32:11.460 [Thread-22327] INFO  CB_Utils.Log.CB_SLF4J - Set LogLevel to:INFO
19:32:11.498 [Thread-22327] INFO  de.cachebox_test.splash - initialize Database for CacheBox
19:32:11.500 [Thread-22327] INFO  de.cachebox_test.splash - initialize Database FieldNotes
19:32:11.502 [Thread-22327] INFO  de.cachebox_test.splash - finish activity
19:32:11.809 [Thread-22327] INFO  de.cachebox_test.splash - new Intent main.class com.badlogic.gdx.backends.android.AndroidApplication
19:32:11.813 [Thread-22327] INFO  de.cachebox_test.splash - Intent putExtras GcCode null name null guid null GpxPath null UI CB_UI_Base.Math.DevicesSizes@430ddb90
19:32:11.815 [Thread-22327] INFO  de.cachebox_test.splash - Start Main Intent
19:32:12.015 [main] INFO  de.cachebox_test.main - OnCreate Run from Splash
19:32:30.935 [GLThread 22338] INFO  CB_UI.GlobalCore - [GlobalCore]setSelectedWaypoint: cache=GC419GX
19:32:36.111 [main] INFO  de.cachebox_test.main - Show View with ID = 111
19:32:36.152 [main] INFO  de.cachebox_test.main - takePhoto start Cache:GC419GX
19:32:36.468 [main] INFO  de.cachebox_test.main - Main=> onPause
19:32:44.144 [main] INFO  de.cachebox_test.main - Intent Take Photo resultCode: 0
19:32:49.756 [main] INFO  de.cachebox_test.main - Main=> onPause
19:38:48.852 [main] INFO  CB_UI_Base.Energy - ENERGY setDisplayOff
arbor95 schrieb:
Unter welchem Namen steht es im DCIM Verzeichnis ?
/storage/extSdCard/DCIM/Camera/20170307_193243.jpg
arbor95 schrieb:
Kann es sein, dass dein Gerät keine interne SD hat?
Doch, hat es (/storage/emulated/0 bzw. /sdcard). Warum?
 

arbor95

Geoguru
Wenn das so ist, dann ist die Camera App Schrott.
Sie nimmt nicht den Dateinamen für die Aufnahme, den ACB vorgibt (per content://...) und
die sollte die Aufnahme auf der "internen" SD im Verzeichnis ../User/Media speichern.
Von dort würde ACB sie dann wegkopieren ins "eigene" ../User/Media Verzeichnis.
Ich bin etwas ratlos (aber nur etwas). Man könnte ja die Android - Version abfragen und jeweils speziellen Code schreiben, was einem eigentlich widerstrebt...
 

arbor95

Geoguru
Genauso ist es jetzt implementiert.

Das einzige was ich sehe, was fehlt, ist das vorherige Anlegen der Ausgabedatei.
Vielleicht hilft das ja.
 

cacheboxer

Geomaster
Sieht schon anders aus, stürzt aber immer noch ab. Magst Du im Manifest beim FileProvider evtl. noch "exported" auf "true" setzen? Oder ist vielleicht noch eine andere Kleinigkeit falsch - im Beispiel ist exported ja auch auf "false"?

Code:
03-08 18:53:19.494: W/ActivityManager(11277): Permission Denial: opening provider android.support.v4.content.FileProvider from ProcessRecord{43d265d0 16393:com.sec.android.app.camera/u0a10096} (pid=16393, uid=10096) that is not exported from uid 10182
03-08 18:53:19.509: E/AndroidRuntime(16393): java.lang.SecurityException: Permission Denial: opening provider android.support.v4.content.FileProvider from ProcessRecord{43d265d0 16393:com.sec.android.app.camera/u0a10096} (pid=16393, uid=10096) that is not exported from uid 10182
03-08 18:53:19.509: E/AndroidRuntime(16393): 	at com.sec.android.app.camera.Camera$LastContentUriCallback.onCompleted(Camera.java:5915)
03-08 18:53:19.509: E/AndroidRuntime(16393): 	at com.sec.android.app.camera.Camera.onLaunchGallery(Camera.java:5797)
03-08 18:53:19.509: E/AndroidRuntime(16393): 	at com.sec.android.app.camera.Camera.onImageStoringCompleted(Camera.java:5165)
03-08 18:53:19.509: E/AndroidRuntime(16393): 	at com.sec.android.app.camera.CameraEngine.imageStoringCompleted(CameraEngine.java:2326)
03-08 18:53:19.509: E/AndroidRuntime(16393): 	at com.sec.android.app.camera.CeStateInitialized.handleMessage(CeStateInitialized.java:47)
03-08 18:53:19.509: E/AndroidRuntime(16393): 	at com.sec.android.app.camera.CameraEngine$StateMessageHandler.handleMessage(CameraEngine.java:253)
 

arbor95

Geoguru
MIt Version acb_3022_20170308_1926.apk wird der android.support.v4.content.FileProvider exportiert. (Das ist ein potentielles Sicherheitsproblem, da ....)
 

cacheboxer

Geomaster
Mmh - da stürzt ACB gleich beim Start ab, weil der Provider nicht exportiert werden darf...
Code:
03-08 20:03:41.984: E/AndroidRuntime(22805): FATAL EXCEPTION: main
03-08 20:03:41.984: E/AndroidRuntime(22805): java.lang.RuntimeException: Unable to get provider android.support.v4.content.FileProvider: java.lang.SecurityException: Provider must not be exported
03-08 20:03:41.984: E/AndroidRuntime(22805): 	at android.app.ActivityThread.installProvider(ActivityThread.java:5196)
03-08 20:03:41.984: E/AndroidRuntime(22805): 	at android.app.ActivityThread.installContentProviders(ActivityThread.java:4799)
03-08 20:03:41.984: E/AndroidRuntime(22805): 	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4683)
03-08 20:03:41.984: E/AndroidRuntime(22805): 	at android.app.ActivityThread.access$1400(ActivityThread.java:168)
03-08 20:03:41.984: E/AndroidRuntime(22805): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1389)
03-08 20:03:41.984: E/AndroidRuntime(22805): 	at android.os.Handler.dispatchMessage(Handler.java:99)
03-08 20:03:41.984: E/AndroidRuntime(22805): 	at android.os.Looper.loop(Looper.java:137)
03-08 20:03:41.984: E/AndroidRuntime(22805): 	at android.app.ActivityThread.main(ActivityThread.java:5493)
03-08 20:03:41.984: E/AndroidRuntime(22805): 	at java.lang.reflect.Method.invokeNative(Native Method)
03-08 20:03:41.984: E/AndroidRuntime(22805): 	at java.lang.reflect.Method.invoke(Method.java:525)
03-08 20:03:41.984: E/AndroidRuntime(22805): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209)
03-08 20:03:41.984: E/AndroidRuntime(22805): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025)
03-08 20:03:41.984: E/AndroidRuntime(22805): 	at dalvik.system.NativeStart.main(Native Method)
03-08 20:03:41.984: E/AndroidRuntime(22805): Caused by: java.lang.SecurityException: Provider must not be exported
03-08 20:03:41.984: E/AndroidRuntime(22805): 	at android.support.v4.content.FileProvider.attachInfo(FileProvider.java:346)
03-08 20:03:41.984: E/AndroidRuntime(22805): 	at android.app.ActivityThread.installProvider(ActivityThread.java:5193)

Log-Datei von der Vorversion:
Code:
18:39:48.817 [Thread-27904] INFO  CB_Utils.Log.CB_SLF4J - Set LogLevel to:INFO
18:39:48.820 [Thread-27904] INFO  de.cachebox_test.splash - android.os.Build.VERSION.SDK_INT= 18
18:39:48.822 [Thread-27904] INFO  de.cachebox_test.splash - workPath set to /storage/extSdCard/CacheBox
18:39:48.825 [Thread-27904] INFO  de.cachebox_test.splash - getFilesDir()= /data/data/de.cachebox_test/files
18:39:48.826 [Thread-27904] INFO  de.cachebox_test.splash - Environment.getExternalStoragePublicDirectory()= /storage/emulated/0
18:39:48.827 [Thread-27904] INFO  de.cachebox_test.splash - Environment.getExternalStorageDirectory()= /storage/emulated/0
18:39:48.831 [Thread-27904] INFO  de.cachebox_test.splash - getExternalFilesDir(null)= /storage/emulated/0/Android/data/de.cachebox_test/files
18:39:48.832 [Thread-27904] INFO  CB_Utils.Log.CB_SLF4J - Set LogLevel to:ERROR
18:39:55.968 [Thread-27904] INFO  de.cachebox_test.splash - initialize Database for CacheBox
18:39:55.970 [Thread-27904] INFO  de.cachebox_test.splash - initialize Database FieldNotes
18:39:55.974 [Thread-27904] INFO  de.cachebox_test.splash - finish activity
18:39:56.345 [Thread-27904] INFO  de.cachebox_test.splash - new Intent main.class com.badlogic.gdx.backends.android.AndroidApplication
18:39:56.346 [Thread-27904] INFO  de.cachebox_test.splash - Intent putExtras GcCode null name null guid null GpxPath null UI CB_UI_Base.Math.DevicesSizes@4307ca90
18:39:56.348 [Thread-27904] INFO  de.cachebox_test.splash - Start Main Intent
18:39:56.551 [main] INFO  de.cachebox_test.main - OnCreate Run from Splash
18:40:25.585 [GLThread 27918] INFO  CB_UI.GlobalCore - [GlobalCore]setSelectedWaypoint: cache=GC419GX
18:40:29.868 [main] INFO  de.cachebox_test.main - Show View with ID = 111
18:40:29.883 [main] INFO  de.cachebox_test.main - takePhoto start Cache:GC419GX
18:40:30.144 [main] INFO  de.cachebox_test.main - Main=> onPause
18:40:37.667 [main] INFO  de.cachebox_test.main - Return from activity  with requestCode 61216516
18:40:37.675 [main] ERROR de.cachebox_test.main - Intent Take Photo resultCode: 0
18:43:30.538 [GLThread 27918] INFO  CB_UI.GL_UI.Views.DescriptionView - getNewCacheInfo
18:43:30.600 [main] INFO  de.cachebox_test.main - Show View with ID = 4
18:43:32.526 [main] INFO  de.cachebox_test.main - Hide View with ID = 4
18:45:46.024 [main] INFO  CB_UI.GlobalCore - [GlobalCore]setSelectedWaypoint: cache=GC5ZAPK
18:45:46.549 [main] INFO  CB_UI.GlobalCore - [GlobalCore]setSelectedWaypoint: cache=GC419GX
18:46:45.704 [main] INFO  de.cachebox_test.main - Show View with ID = 111
18:46:45.713 [main] INFO  de.cachebox_test.main - takePhoto start Cache:GC419GX
18:46:46.035 [main] INFO  de.cachebox_test.main - Main=> onPause
18:48:48.734 [main] INFO  de.cachebox_test.main - Return from activity  with requestCode 61216516
18:48:48.742 [main] ERROR de.cachebox_test.main - Intent Take Photo resultCode: 0
18:51:41.607 [main] INFO  de.cachebox_test.main - Show View with ID = 111
18:51:41.613 [main] INFO  de.cachebox_test.main - takePhoto start Cache:GC419GX
18:51:42.096 [main] INFO  de.cachebox_test.main - Main=> onPause
18:53:21.949 [main] INFO  de.cachebox_test.main - Return from activity  with requestCode 61216516
18:53:22.016 [main] ERROR de.cachebox_test.main - Intent Take Photo resultCode: 0
19:01:17.198 [main] INFO  de.cachebox_test.main - Main=> onPause
19:02:31.216 [main] INFO  CB_UI_Base.Energy - ENERGY setDisplayOff
19:04:54.006 [main] INFO  CB_UI_Base.Energy - ENERGY setDisplayOn
19:05:02.144 [main] INFO  de.cachebox_test.main - Main=> onPause
19:05:02.509 [main] INFO  de.cachebox_test.main - Sent files to MediaScanner
19:05:02.511 [main] INFO  de.cachebox_test.main - Main=> onDestroy
19:05:02.514 [main] INFO  de.cachebox_test.main - Main=> onDestroy isFinishing
 

arbor95

Geoguru
Da fällt mir nur noch ein die Android Versionsabfrage und dann den bisher verwendeten uri file:/// zu verwenden.
 

cacheboxer

Geomaster
Wäre als Woraround für mich OK. Wobei mich irgendwie auch interessiert, was genau jetzt falsch ist... Mein Bauchgefühl meint, dass es nur noch eine Kleinigkeit ist.

BTW: Ist es Absicht, dass die leeren Dummy-Dateien unter /storage/emulated/0/Android/data/de.cachebox_test/files/User/Media angelegt werden, also im internen Speicher die Ordnerstruktur im Cachebox-Verzeichnis auf der externen SD-Karte nochmal abgebildet wird?
 

arbor95

Geoguru
Ja das ist Absicht.
Auf /storage/emulated/0/Android/data/de.cachebox_test/files hat die App de.cachebox_test Schreibzugriff (entweder explizit gewährt oder per se ab Android Version xx)
Dahin läßt man die anderen APPs schreiben und verschiebt dann das Ganze in das gewünschte Verzeichnis (.../User/Media).
 

cacheboxer

Geomaster
Guck 'mal hier und im dort verlinkten Artikel. Ultragrob zusammengefasst scheint addFlags() erst ab Lollipop die Berechtigungen zu erteilen, so dass man hier manuell den in Frage kommenden Empfängern die Berechtigung erteilen und nachher wieder entziehen muss.
 

cacheboxer

Geomaster
arbor95 schrieb:
Ja das ist Absicht.
Auf /storage/emulated/0/Android/data/de.cachebox_test/files hat die App de.cachebox_test Schreibzugriff (entweder explizit gewährt oder per se ab Android Version xx)
Dahin läßt man die anderen APPs schreiben und verschiebt dann das Ganze in das gewünschte Verzeichnis (.../User/Media).
Das ist mir klar. Mich wunderte, dass die Datei nicht direkt in files steht, sondern unterhalb nochmal ein User/Media aufgemacht wird.
 
Oben