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
                        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
                        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: Rechtschreibfehler korrigiert: Andriod -> Android
Moderiert von  Th69: Delphi-Tags hinzugefügt
Th69: Delphi-Tags hinzugefügt