German welches Verzeichnis für welche Daten?

peternmb

Well-Known Member
Licensed User
Longtime User
Hallo,

bisher spreicherte ich die internene Einstellungen meiner App, auf die der Nutzer keinen direkten Zugriff haben sollte, als "config.ini" in File.DirInternal.
Die von der App erzeugten Daten mit direktem Nutzerzugriff kamen in ein Verzeichnis "MeineApp" in File.DirRootExternal.
Falls das nicht ging kamen die notgedrungen ebenfalls in File.DirInternal
Keine Ahnung ob das überhaupt so funktioniert hast, die App lief jedenfalls....
B4X:
If File.ExternalWritable Then
    AppDir = File.DirRootExternal & "/MeineApp"
    File.MakeDir(File.DirRootExternal,"MeineApp")
Else
    Msgbox2Async("Soll zum Speichern der interne Speicher verwendet werden?","Hinweis","Ja","","Abbruch",Null,False)
    Wait For Msgbox_Result (Result As Int)
    If Result=DialogResponse.POSITIVE Then
        MyAppDir = File.DirInternal & "/MeineApp"
        File.MakeDir(File.DirInternal,"MeineApp")
    Else
        ExitApplication
    End If
End If

Mit SDk 28 scheint das alles so nicht mehr zu funktionieren, was muss ich umstellen?
Ich habe so versucht, doch da finde ich mein Verzeichnis nicht einmal.
B4X:
Dim rp As RuntimePermissions
MyAppDir = rp.GetSafeDirDefaultExternal("MeineApp")
 

DonManfred

Expert
Licensed User
Longtime User
Was funktioniert nicht? Welche Fehlermeldung genau erhälst Du?
 

peternmb

Well-Known Member
Licensed User
Longtime User
Was funktioniert nicht? Welche Fehlermeldung genau erhälst Du?
Die App startet erst gar nicht mehr, ich erhalte sofort die Meldung "MeineApp wurde beendet".
Die Meldungen im Logger haben überhaupt nichts mit dem Appstart zu tun, da werden Appteile benannt die erst viel später zum Einsatz kommen
 

DonManfred

Expert
Licensed User
Longtime User
ich erhalte sofort die Meldung "MeineApp wurde beendet".
Connecte das Device mit USB Debugging und starte die app da. Poste den komplette Fehler den Du erhälst.

Ohne genaue Fehlermeldung kann Dir niemand helfen; geschweige denn einen kongreten Hinweis geben.
 

peternmb

Well-Known Member
Licensed User
Longtime User
Wieso erhalte ich hier die Meldung "kein Zugriff"???
B4X:
Dim rp As RuntimePermissions
rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE)
Wait For Activity_PermissionResult (Permission As String, istOK As Boolean)
If istOK Then
    'access here
    MsgboxAsync("Zugriff OK","Ich")
    MyListDir = rp.GetSafeDirDefaultExternal("MeineApp")
Else
    'no permission
    MsgboxAsync("kein Zugriff","Ich")
    MyListDir = File.DirInternal & "/MeineApp"
    File.MakeDir(File.DirInternal,"MeineApp")
End If
Meine Manifest sieht so aus:
B4X:
'This code will be applied to the manifest file during compilation.
'You do not need to modify it in most cases.
'See this link for for more information: http://www.b4x.com/forum/showthread.php?p=78136
'SdkVersion="14" = Android 4.0
'SdkVersion="28" = Android 9.0
AddManifestText(
<uses-sdk android:minSdkVersion="14"     
      android:targetSdkVersion="28"/>
<uses-permission
  android:name="android.permission.WRITE_EXTERNAL_STORAGE"
  android:maxSdkVersion="19" />
<supports-screens android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="false"
    android:anyDensity="true"/>)
SetApplicationAttribute(android:theme, "@android:style/Theme.Black")
SetApplicationAttribute(android:icon, "@drawable/icon")
SetApplicationAttribute(android:label, "$LABEL$")
AddApplicationText(
  <provider
  android:name="android.support.v4.content.FileProvider"
  android:authorities="$PACKAGE$.provider"
  android:exported="false"
  android:grantUriPermissions="true">
  <meta-data
  android:name="android.support.FILE_PROVIDER_PATHS"
  android:resource="@xml/provider_paths"/>
  </provider>
)
CreateResource(xml, provider_paths,
   <files-path name="name" path="shared" />
)
AddPermission(android.permission.REQUEST_INSTALL_PACKAGES)
 

peternmb

Well-Known Member
Licensed User
Longtime User
Connecte das Device mit USB Debugging und starte die app da. Poste den komplette Fehler den Du erhälst.

Ohne genaue Fehlermeldung kann Dir niemand helfen; geschweige denn einen kongreten Hinweis geben.
was muss ich da machen? Bisher nutze ich B4A-Bridge.
 

DonManfred

Expert
Licensed User
Longtime User
Wieso erhalte ich hier die Meldung "kein Zugriff"???
Weil Du die Permission nicht im Manifest stehen hast.

füge das hier deinem Manifest hinzu:
B4X:
AddPermission(android.permission.WRITE_EXTERNAL_STORAGE) ' Allows an application to write to external storage.
 

peternmb

Well-Known Member
Licensed User
Longtime User
Weil Du die Permission nicht im Manifest stehen hast.

füge das hier deinem Manifest hinzu:
B4X:
AddPermission(android.permission.WRITE_EXTERNAL_STORAGE) ' Allows an application to write to external storage.
und für was steht dann das in der Manifestdatei???
B4X:
<uses-permission
  android:name="android.permission.WRITE_EXTERNAL_STORAGE"
  android:maxSdkVersion="19" />
Ich glaube das kapiere ich nie :confused:
 

DonManfred

Expert
Licensed User
Longtime User
das wird benötigt, wenn Du RuntimePermissions.GetSafeDirDefaultExternal("") benutzt. Und NUR DIESEN Pfad. Für den Pfad brauchst du auch keine Runtimpermissionsabfrage.

File.DirRootExternal, was du allerdings benutzt, ist was anderes. Hier brauchst Du A) den Manifesteintrag wie von mir gepostet und B) musst du die Permission vor dem Benutzen auch erfragen.
 

peternmb

Well-Known Member
Licensed User
Longtime User
Ich kann es mir einfach nicht erklären.
Ich habe jetzt als Breakpoints einighe Msgbox2Async gesetzt um genau zu sehen wie weit die App vor dem Absturz kommt
B4X:
    Msgbox2Async("Test", "1", "", "OK", "", Null, False)
    Wait For Msgbox_Result (Result As Int)
    '   
    'gespeicherte Variablen für Grundeinstellungen aus ini-Datei laden
    LoadVar
    '
    ...   
    
Sub LoadVar
    '
    Msgbox2Async("Test", "2", "", "OK", "", Null, False)
    Wait For Msgbox_Result (Result As Int)
    '   
    Dim rp As RuntimePermissions
    rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE)
    Wait For Activity_PermissionResult (Permission As String, istOK As Boolean)
    If istOK Then
        'access here
    ...
1 wird gezeigt, dann wird die App beendet.
 

peternmb

Well-Known Member
Licensed User
Longtime User
Logger verbunden mit: ONDA V10 4G
--------- beginning of crash
--------- beginning of main
main_neu5 (java line: 13967)
java.io.FileNotFoundException: Mitspieler.txt (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:146)
at anywheresoftware.b4a.objects.streams.File.OpenInput(File.java:214)
at anywheresoftware.b4a.objects.streams.File.ReadList(File.java:238)
at pbit.skat.listenfuehrer2.main._neu5(main.java:13967)
at pbit.skat.listenfuehrer2.main$ResumableSub_Activity_Create.resume(main.java:1907)
at anywheresoftware.b4a.BA.checkAndRunWaitForEvent(BA.java:250)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:190)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:176)
at anywheresoftware.b4a.keywords.Common$1.onClick(Common.java:492)
at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:169)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:203)
at android.app.ActivityThread.main(ActivityThread.java:6251)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924)
main_neu5 (java line: 13967)
java.io.FileNotFoundException: Mitspieler.txt (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:146)
at anywheresoftware.b4a.objects.streams.File.OpenInput(File.java:214)
at anywheresoftware.b4a.objects.streams.File.ReadList(File.java:238)
at pbit.skat.listenfuehrer2.main._neu5(main.java:13967)
at pbit.skat.listenfuehrer2.main$ResumableSub_Activity_Create.resume(main.java:1907)
at anywheresoftware.b4a.BA.checkAndRunWaitForEvent(BA.java:250)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:190)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:176)
at anywheresoftware.b4a.keywords.Common$1.onClick(Common.java:492)
at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:169)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:203)
at android.app.ActivityThread.main(ActivityThread.java:6251)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924)
 
Top