Hi Leute,
Als Hobby-Programmierfan möchte ich weiter an meine Android App unter Delphi 11 herumbasteln bzw. erstellen.
Leider stosse ich immer wieder auf das Problem mit der Android Permission, sei in Handhabung bzw. Ausführung.
Dachte mit Delphi Mobile wäre das nicht so schwierig. Habe auch keine so richtige Ahnung von Android und Java.
Trotzdem habe ich schon einige kleine Apps in Delphi (Android) lauffähig auf die Handy (Android 11+12) gebracht.
Meine Probleme sind besonders die Zugriffe auf Dateien.
Hier mein erstes Problem:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure Texportimport.AddFilesImport(MyImportListbox: TListbox); Var SDIm : TStringDynArray; i,ii : Integer; LBI: TListBoxItem; begin SDA := TDirectory.GetFiles(TPath.GetDocumentsPath + PathDelim,'*.db'); for i := Low(SDA) to High(SDA) do begin ii := MyImportListBox.Items.Add(ExtractFileName(SDA[i])); LBI := MyImportListbox.ListItems[ii]; LBI.ItemData.Detail := SDA, [i]; end; end;
Listbox1.Clear; AddFilesImport(Listbox1); |
Wenn ich auf
GetHomePath mit der Liste zugreife, dann funktioniert die Auflistung.
Bei den Zugriff auf die anderen Verzeichnisse (
GetSharedDucomentsPath oder
GetDocumentsPath) wird nichts angezeigt.
Was mache ich da falsch? Oder welche Permission muss ich bei Delphi Berechtigung einstellen.
Hier meine komplette AndroidManifest.xml:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65:
| <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="de.jmbausoft" android:versionCode="2" android:versionName="1.0.1" android:installLocation="auto"> <uses-sdk android:minSdkVersion="23" android:targetSdkVersion="32" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-feature android:glEsVersion="0x00020000" android:required="true"/> <queries>
</queries> <application android:persistent="False" android:restoreAnyVersion="False" android:label="JM-Rommy" android:debuggable="true" android:largeHeap="False" android:icon="@drawable/ic_launcher" android:theme="@style/AppTheme" android:hardwareAccelerated="true" android:resizeableActivity="false" android:requestLegacyExternalStorage="true"> <provider android:name="androidx.core.content.FileProvider" android:authorities="de.jmbausoft.fileprovider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths" /> </provider>
<activity android:name="com.embarcadero.firemonkey.FMXNativeActivity" android:exported="true" android:label="JM-Rommy" android:configChanges="orientation|keyboard|keyboardHidden|screenSize" android:launchMode="singleTask"> <meta-data android:name="android.app.lib_name" android:value="romapp" />
<intent-filter> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
<receiver android:name="com.embarcadero.rtl.notifications.NotificationAlarm" />
</application> </manifest> |
Zweites Problem in diesem Zusammenhang:
Dateien in den
GetHomePath kopieren bzw. überschreiben.
Thema hatte ich schon mal hier gehabt, aber keine Lösung.
Hier der Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| procedure Texportimport.btn_dbdatei_importClick(Sender: TObject); var del_datei1 : String; begin del_datei1 := System.IOUtils.TPath.GetHomePath + PathDelim + lbl_loaddatei_import.Text;
begin PermissionsService.RequestPermissions(['android.permission.READ_EXTERNAL_STORAGE','android.permission.WRITE_INTERNAL_STORAGE'], procedure(const APermissions: TClassicStringDynArray; const AGrantResults: TClassicPermissionStatusDynArray) begin if FileExists(del_datei1) then begin DeleteFile(del_datei1); TFile.Copy(TPath.GetSharedDocumentsPath + PathDelim + lbl_loaddatei_import.Text, TPath.GetHomePath + PathDelim +lbl_loaddatei_import.Text) ; end else begin TFile.Copy(TPath.GetSharedDocumentsPath + PathDelim + lbl_loaddatei_import.Text, TPath.GetHomePath + PathDelim +lbl_loaddatei_import.Text) ; end; end); ShowMessage('Daten wurden importiert.'); end; exportimport.btn_db_delete.Enabled := False; exportimport.btn_dbdatei_import.Enabled := False; end; |
Die Dateien sind SQlite-DB, aber keine ist geöffnet bzw. wird gerade von der App verwendet. Diese Prozedur gehört wie oben bei Auslesen der Liste zur selben App.
Die App läuft ohne Probleme speichert und lädt, kopiert auch Dateien ins Verzeichnis
GetSharedDocumentsPath, aber eben nur das Problem mit diesen Zugriff wie oben beschrieben.
Komme einfach nicht weiter.
Bräuchte eine Lösung wie man sowas mit Delphi auch lösen kann.
Vielen Dank im Voraus.
JmHobby
Moderiert von Th69: Rechtschreibfehler korrigiert: Andriod -> Android
Moderiert von Th69: Delphi-Tags hinzugefügt