Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Çözüldü - requestLegacyExternalStorage
#1
iyi günler.

Samsung A8 tablet 
Android 10 yüklü
Geliştirici modu açık
Usb hata aayıklaması açık
Delphi  ide Android 32 bit secili yanındaki listede tableti görebiliyorum.
aşağıdaki demoyu veya test amaçlı 1 label olan uygulamayı derlerken aşağıdaki hatayı veriyor.
Tablette veya başka bir yerde ayar mı var.
Fesih beyin daha önceki uyarıları yapıldı.

FMX (Multi platform uygulama geliştirme) alanında hepimiz acemi sayılırız. Bu anlamda kitap size ve sizin gibi bu işe gönül veren DelphiCan'lara oldukça faydası olacaktır.
Örnek uygulamalar bölümüne giriş yetkiniz tanımlanmıştır.

Not: Örnek uygulamaları Android platformunda çalıştırmadan önce mutlaka aşağıdaki işlem adımlarını uygulayın.
1- Android platformu için Project Manager > Android > Android SDK x.x > Libraries üzerinde sağ tuş tıklayıp, Revert System Files to Default menüsünü seçin.
2- Aynı zamanda Project > Deployment penceresinde Revert to Default butonuna tıklayın. 
3- Project Manager penceresinde proje üzerinde sağ tuşa tıklayın ve Clean menüsünü seçin.
4- Projeyi Build ile derleyin.
5- Daha sonra çalıştırın.

Delphi de Anroid ayarları
https://www.delphican.com/showthread.php...02#pid2602 


Alınan Hata : 

\zxing\demo\advancedTestApp\Android\Release\FmxAdvancedTestApp\AndroidManifest.xml:19: error: No resource identifier found for attribute 'requestLegacyExternalStorage' in package 'android'


xml dosyası içeriyi 
<?xml version="1.0" encoding="utf-8"?>
<!-- BEGIN_INCLUDE(manifest) -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
       package="%package%"
       android:versionCode="%versionCode%"
       android:versionName="%versionName%"
       android:installLocation="%installLocation%">

   <uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="%targetSdkVersion%" />
   <%uses-permission%>
   <uses-feature android:glEsVersion="0x00020000" android:required="True"/>
   <application android:persistent="%persistent%" 
       android:restoreAnyVersion="%restoreAnyVersion%" 
       android:label="%label%" 
       android:debuggable="%debuggable%" 
       android:largeHeap="%largeHeap%"
       android:icon="%icon%"
       android:theme="%theme%"
       android:hardwareAccelerated="%hardwareAccelerated%"
       android:resizeableActivity="false"
       android:requestLegacyExternalStorage="true">

       <%provider%>
       <%application-meta-data%>
       <%uses-libraries%>
       <%services%>
       <!-- Our activity is a subclass of the built-in NativeActivity framework class.
            This will take care of integrating with our NDK code. -->
       <activity android:name="com.embarcadero.firemonkey.FMXNativeActivity"
               android:label="%activityLabel%"
               android:configChanges="orientation|keyboard|keyboardHidden|screenSize"
               android:launchMode="singleTask">
           <!-- Tell NativeActivity the name of our .so -->
           <meta-data android:name="android.app.lib_name"
               android:value="%libNameValue%" />
           <intent-filter>  
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter> 
       </activity>
       <%activity%>
       <%receivers%>
   </application>
</manifest>
<!-- END_INCLUDE(manifest) -->
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Cevapla
#2
(13-09-2020, Saat: 14:08)cinarbil Adlı Kullanıcıdan Alıntı: iyi günler.

Samsung A8 tablet 
Android 10 yüklü
Geliştirici modu açık
Usb hata aayıklaması açık
Delphi  ide Android 32 bit secili yanındaki listede tableti görebiliyorum.
aşağıdaki demoyu veya test amaçlı 1 label olan uygulamayı derlerken aşağıdaki hatayı veriyor.
Tablette veya başka bir yerde ayar mı var.
Fesih beyin daha önceki uyarıları yapıldı.

FMX (Multi platform uygulama geliştirme) alanında hepimiz acemi sayılırız. Bu anlamda kitap size ve sizin gibi bu işe gönül veren DelphiCan'lara oldukça faydası olacaktır.
Örnek uygulamalar bölümüne giriş yetkiniz tanımlanmıştır.

Not: Örnek uygulamaları Android platformunda çalıştırmadan önce mutlaka aşağıdaki işlem adımlarını uygulayın.
1- Android platformu için Project Manager > Android > Android SDK x.x > Libraries üzerinde sağ tuş tıklayıp, Revert System Files to Default menüsünü seçin.
2- Aynı zamanda Project > Deployment penceresinde Revert to Default butonuna tıklayın. 
3- Project Manager penceresinde proje üzerinde sağ tuşa tıklayın ve Clean menüsünü seçin.
4- Projeyi Build ile derleyin.
5- Daha sonra çalıştırın.

Delphi de Anroid ayarları
https://www.delphican.com/showthread.php...02#pid2602 


Alınan Hata : 

\zxing\demo\advancedTestApp\Android\Release\FmxAdvancedTestApp\AndroidManifest.xml:19: error: No resource identifier found for attribute 'requestLegacyExternalStorage' in package 'android'


xml dosyası içeriyi 
<?xml version="1.0" encoding="utf-8"?>
<!-- BEGIN_INCLUDE(manifest) -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
       package="%package%"
       android:versionCode="%versionCode%"
       android:versionName="%versionName%"
       android:installLocation="%installLocation%">

   <uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="%targetSdkVersion%" />
   <%uses-permission%>
   <uses-feature android:glEsVersion="0x00020000" android:required="True"/>
   <application android:persistent="%persistent%" 
       android:restoreAnyVersion="%restoreAnyVersion%" 
       android:label="%label%" 
       android:debuggable="%debuggable%" 
       android:largeHeap="%largeHeap%"
       android:icon="%icon%"
       android:theme="%theme%"
       android:hardwareAccelerated="%hardwareAccelerated%"
       android:resizeableActivity="false"
       android:requestLegacyExternalStorage="true">

       <%provider%>
       <%application-meta-data%>
       <%uses-libraries%>
       <%services%>
       <!-- Our activity is a subclass of the built-in NativeActivity framework class.
            This will take care of integrating with our NDK code. -->
       <activity android:name="com.embarcadero.firemonkey.FMXNativeActivity"
               android:label="%activityLabel%"
               android:configChanges="orientation|keyboard|keyboardHidden|screenSize"
               android:launchMode="singleTask">
           <!-- Tell NativeActivity the name of our .so -->
           <meta-data android:name="android.app.lib_name"
               android:value="%libNameValue%" />
           <intent-filter>  
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter> 
       </activity>
       <%activity%>
       <%receivers%>
   </application>
</manifest>
<!-- END_INCLUDE(manifest) -->

açıklama şurada;

https://developer.android.com/about/vers...cy/storage

yapmanız gereken manifest de
requestLegacyExternalStorage = True
 
Cevapla
#3
(14-09-2020, Saat: 02:19)hayalyilmaz43 Adlı Kullanıcıdan Alıntı:
(13-09-2020, Saat: 14:08)cinarbil Adlı Kullanıcıdan Alıntı: iyi günler.

Samsung A8 tablet 
Android 10 yüklü
Geliştirici modu açık
Usb hata aayıklaması açık
Delphi  ide Android 32 bit secili yanındaki listede tableti görebiliyorum.
aşağıdaki demoyu veya test amaçlı 1 label olan uygulamayı derlerken aşağıdaki hatayı veriyor.
Tablette veya başka bir yerde ayar mı var.
Fesih beyin daha önceki uyarıları yapıldı.

FMX (Multi platform uygulama geliştirme) alanında hepimiz acemi sayılırız. Bu anlamda kitap size ve sizin gibi bu işe gönül veren DelphiCan'lara oldukça faydası olacaktır.
Örnek uygulamalar bölümüne giriş yetkiniz tanımlanmıştır.

Not: Örnek uygulamaları Android platformunda çalıştırmadan önce mutlaka aşağıdaki işlem adımlarını uygulayın.
1- Android platformu için Project Manager > Android > Android SDK x.x > Libraries üzerinde sağ tuş tıklayıp, Revert System Files to Default menüsünü seçin.
2- Aynı zamanda Project > Deployment penceresinde Revert to Default butonuna tıklayın. 
3- Project Manager penceresinde proje üzerinde sağ tuşa tıklayın ve Clean menüsünü seçin.
4- Projeyi Build ile derleyin.
5- Daha sonra çalıştırın.

Delphi de Anroid ayarları
https://www.delphican.com/showthread.php...02#pid2602 


Alınan Hata : 

\zxing\demo\advancedTestApp\Android\Release\FmxAdvancedTestApp\AndroidManifest.xml:19: error: No resource identifier found for attribute 'requestLegacyExternalStorage' in package 'android'


xml dosyası içeriyi 
<?xml version="1.0" encoding="utf-8"?>
<!-- BEGIN_INCLUDE(manifest) -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
       package="%package%"
       android:versionCode="%versionCode%"
       android:versionName="%versionName%"
       android:installLocation="%installLocation%">

   <uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="%targetSdkVersion%" />
   <%uses-permission%>
   <uses-feature android:glEsVersion="0x00020000" android:required="True"/>
   <application android:persistent="%persistent%" 
       android:restoreAnyVersion="%restoreAnyVersion%" 
       android:label="%label%" 
       android:debuggable="%debuggable%" 
       android:largeHeap="%largeHeap%"
       android:icon="%icon%"
       android:theme="%theme%"
       android:hardwareAccelerated="%hardwareAccelerated%"
       android:resizeableActivity="false"
       android:requestLegacyExternalStorage="true">

       <%provider%>
       <%application-meta-data%>
       <%uses-libraries%>
       <%services%>
       <!-- Our activity is a subclass of the built-in NativeActivity framework class.
            This will take care of integrating with our NDK code. -->
       <activity android:name="com.embarcadero.firemonkey.FMXNativeActivity"
               android:label="%activityLabel%"
               android:configChanges="orientation|keyboard|keyboardHidden|screenSize"
               android:launchMode="singleTask">
           <!-- Tell NativeActivity the name of our .so -->
           <meta-data android:name="android.app.lib_name"
               android:value="%libNameValue%" />
           <intent-filter>  
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter> 
       </activity>
       <%activity%>
       <%receivers%>
   </application>
</manifest>
<!-- END_INCLUDE(manifest) -->

açıklama şurada;

https://developer.android.com/about/vers...cy/storage

yapmanız gereken manifest de
requestLegacyExternalStorage = True
 

Konuyu dikkatli okuyun. @cinarbil bu parametreyi zaten eklemiş.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#4
Yeni bir projede belirttiğiniz hatanın (No resource identifier found for attribute 'requestLegacyExternalStorage' in package 'android') ortaya çıkmaması gerekiyor.
Yeni bir proje, varsayılan olarak ExternalStorage iznine sahiptir.

   

Yeni bir proje açın.
Form üzerine birkaç bileşen yerleştirin.
Uygulamayı kaydedin ve compile edin.
Projenin bulunduğu dizindeki AndroidManifest.template.xml dosyasını bir metin editöründe açın ve aşağıdaki varsayılan AndroidManifest.template ile aynı olup olmadığını kontrol edin.
Eğer sizin AndroidManifest.template.xml ile buradaki AndroidManifest.template içeriği aynı ise geriye kalan tek şey EksternalStorage'a ulaşmaya çalıştığınız ilk anda dinamik izin talebinde bulunmak. (Dinamik izin talepleri formda bir çok başlık altında anlatılmıştı)
<?xml version="1.0" encoding="utf-8"?>
<!-- BEGIN_INCLUDE(manifest) -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
       package="%package%"
       android:versionCode="%versionCode%"
       android:versionName="%versionName%"
       android:installLocation="%installLocation%">

   <uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="%targetSdkVersion%" />
   <%uses-permission%>
   <uses-feature android:glEsVersion="0x00020000" android:required="True"/>
   <application android:persistent="%persistent%" 
       android:restoreAnyVersion="%restoreAnyVersion%" 
       android:label="%label%" 
       android:debuggable="%debuggable%" 
       android:largeHeap="%largeHeap%"
       android:icon="%icon%"
       android:theme="%theme%"
       android:hardwareAccelerated="%hardwareAccelerated%"
       android:resizeableActivity="false">

       <%provider%>
       <%application-meta-data%>
       <%uses-libraries%>
       <%services%>
       <!-- Our activity is a subclass of the built-in NativeActivity framework class.
            This will take care of integrating with our NDK code. -->
       <activity android:name="com.embarcadero.firemonkey.FMXNativeActivity"
               android:label="%activityLabel%"
               android:configChanges="orientation|keyboard|keyboardHidden|screenSize"
               android:launchMode="singleTask">
           <!-- Tell NativeActivity the name of our .so -->
           <meta-data android:name="android.app.lib_name"
               android:value="%libNameValue%" />
           <intent-filter>  
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter> 
       </activity>
       <%activity%>
       <%receivers%>
   </application>
</manifest>
<!-- END_INCLUDE(manifest) -->
Yukarıdaki işlem adımları ile yeni proje Android 10 SDK sürümünde çalışıyorsa, asıl sorun mevcut projenizdeki  AndroidManifest.template.xml dosyasındaki tanımlamalardan kaynaklanıyor demektir. Bu durumda yukarıdaki varsayılan AndroidManifest.template.xml dosyasını kullanın ve uygulamayı çalıştırın. Alınmayan izinler ile ilgili dinamik hata uyarıları ile karşılaşacaksınız. Bu uyarıları bizimle paylaşırsanız, birlikte bir çözüm üretmeye çalışırız.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#5
(14-09-2020, Saat: 13:46)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Yeni bir projede belirttiğiniz hatanın (No resource identifier found for attribute 'requestLegacyExternalStorage' in package 'android') ortaya çıkmaması gerekiyor.
Yeni bir proje, varsayılan olarak ExternalStorage iznine sahiptir.



Yeni bir proje açın.
Form üzerine birkaç bileşen yerleştirin.
Uygulamayı kaydedin ve compile edin.
Projenin bulunduğu dizindeki AndroidManifest.template.xml dosyasını bir metin editöründe açın ve aşağıdaki varsayılan AndroidManifest.template ile aynı olup olmadığını kontrol edin.
Eğer sizin AndroidManifest.template.xml ile buradaki AndroidManifest.template içeriği aynı ise geriye kalan tek şey EksternalStorage'a ulaşmaya çalıştığınız ilk anda dinamik izin talebinde bulunmak. (Dinamik izin talepleri formda bir çok başlık altında anlatılmıştı)
<?xml version="1.0" encoding="utf-8"?>
<!-- BEGIN_INCLUDE(manifest) -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
       package="%package%"
       android:versionCode="%versionCode%"
       android:versionName="%versionName%"
       android:installLocation="%installLocation%">

   <uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="%targetSdkVersion%" />
   <%uses-permission%>
   <uses-feature android:glEsVersion="0x00020000" android:required="True"/>
   <application android:persistent="%persistent%" 
       android:restoreAnyVersion="%restoreAnyVersion%" 
       android:label="%label%" 
       android:debuggable="%debuggable%" 
       android:largeHeap="%largeHeap%"
       android:icon="%icon%"
       android:theme="%theme%"
       android:hardwareAccelerated="%hardwareAccelerated%"
       android:resizeableActivity="false">

       <%provider%>
       <%application-meta-data%>
       <%uses-libraries%>
       <%services%>
       <!-- Our activity is a subclass of the built-in NativeActivity framework class.
            This will take care of integrating with our NDK code. -->
       <activity android:name="com.embarcadero.firemonkey.FMXNativeActivity"
               android:label="%activityLabel%"
               android:configChanges="orientation|keyboard|keyboardHidden|screenSize"
               android:launchMode="singleTask">
           <!-- Tell NativeActivity the name of our .so -->
           <meta-data android:name="android.app.lib_name"
               android:value="%libNameValue%" />
           <intent-filter>  
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter> 
       </activity>
       <%activity%>
       <%receivers%>
   </application>
</manifest>
<!-- END_INCLUDE(manifest) -->
Yukarıdaki işlem adımları ile yeni proje Android 10 SDK sürümünde çalışıyorsa, asıl sorun mevcut projenizdeki  AndroidManifest.template.xml dosyasındaki tanımlamalardan kaynaklanıyor demektir. Bu durumda yukarıdaki varsayılan AndroidManifest.template.xml dosyasını kullanın ve uygulamayı çalıştırın. Alınmayan izinler ile ilgili dinamik hata uyarıları ile karşılaşacaksınız. Bu uyarıları bizimle paylaşırsanız, birlikte bir çözüm üretmeye çalışırız.

@Fesih ARSLAN  hocam  ilaç gibisiniz. Dediklerinizi yapınca yeni deneme projesi çalıştı.

eski projenin xml dosyasını sildim.
resimdeki gibi ihtiyaç olan izinleri verdim.
1- Android platformu için Project Manager > Android > Android SDK x.x > Libraries üzerinde sağ tuş tıklayıp, Revert System Files to Default menüsünü seçin.
2- Aynı zamanda Project > Deployment penceresinde Revert to Default butonuna tıklayın. 
3- Project Manager penceresinde proje üzerinde sağ tuşa tıklayın ve Clean menüsünü seçin.
4- Projeyi Build ile derleyin.
5- Daha sonra çalıştırın.

işlemleri yaptım çalıştı.
Teşekkür ederim Allah c.c razı olsun.
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Cevapla
#6
(14-09-2020, Saat: 13:46)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Yeni bir projede belirttiğiniz hatanın (No resource identifier found for attribute 'requestLegacyExternalStorage' in package 'android') ortaya çıkmaması gerekiyor.
Yeni bir proje, varsayılan olarak ExternalStorage iznine sahiptir.
...
Yukarıdaki işlem adımları ile yeni proje Android 10 SDK sürümünde çalışıyorsa, asıl sorun mevcut projenizdeki  AndroidManifest.template.xml dosyasındaki tanımlamalardan kaynaklanıyor demektir. Bu durumda yukarıdaki varsayılan AndroidManifest.template.xml dosyasını kullanın ve uygulamayı çalıştırın. Alınmayan izinler ile ilgili dinamik hata uyarıları ile karşılaşacaksınız. Bu uyarıları bizimle paylaşırsanız, birlikte bir çözüm üretmeye çalışırız.

Merhabalar, Fesih beyin yukarıda bildirdiklerinden ve https://developer.android.com/about/vers...cy/storage bağlantısından şunlar anlaşılıyor doğru mudur?
  1. Internal'da (TPath.GetPublicPath, ...) izinsiz dosya kaydı yapılabiliyor
  2. External'da (TPath.GetSharedDownloadsPath, ...) kayıt için 10.3 Rio ve sonraki sürümlerde manifeste requestLegacyExternalStorage eklemeye lüzum yok, varsayılan açılıyor
  3. Android 10'dan itibaren requestLegacyExternalStorage eklemek gerekiyor
  4. Android 11'de requestLegacyExternalStorage desteği geçici olarak devam ediyor fakat uygulama hedefi Android 11 seçilirse requestLegacyExternalStorage işe yaramıyor galiba Storage access with Android 11 
  5. Google'ın gelişitiricilerin artan şikayetlerine rağmen dosyaları external klasörlere taşımayı her sürümde daha da zorlaştırması düşündüğü söyleniyor. Belki ileride uygulamalar Downloads vs. external klasörlere ulaşamayacak. Böyle bir ihtimal var mıdır, siz ne dersiniz.
saygılar mustafa ֍zgün 
Cevapla
#7
(17-09-2020, Saat: 07:01)emozgun Adlı Kullanıcıdan Alıntı:
(14-09-2020, Saat: 13:46)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Yeni bir projede belirttiğiniz hatanın (No resource identifier found for attribute 'requestLegacyExternalStorage' in package 'android') ortaya çıkmaması gerekiyor.
Yeni bir proje, varsayılan olarak ExternalStorage iznine sahiptir.
...
Yukarıdaki işlem adımları ile yeni proje Android 10 SDK sürümünde çalışıyorsa, asıl sorun mevcut projenizdeki  AndroidManifest.template.xml dosyasındaki tanımlamalardan kaynaklanıyor demektir. Bu durumda yukarıdaki varsayılan AndroidManifest.template.xml dosyasını kullanın ve uygulamayı çalıştırın. Alınmayan izinler ile ilgili dinamik hata uyarıları ile karşılaşacaksınız. Bu uyarıları bizimle paylaşırsanız, birlikte bir çözüm üretmeye çalışırız.

Merhabalar, Fesih beyin yukarıda bildirdiklerinden ve https://developer.android.com/about/vers...cy/storage bağlantısından şunlar anlaşılıyor doğru mudur?
  1. Internal'da (TPath.GetPublicPath, ...) izinsiz dosya kaydı yapılabiliyor
  2. External'da (TPath.GetSharedDownloadsPath, ...) kayıt için 10.3 Rio ve sonraki sürümlerde manifeste requestLegacyExternalStorage eklemeye lüzum yok, varsayılan açılıyor
  3. Android 10'dan itibaren requestLegacyExternalStorage eklemek gerekiyor
  4. Android 11'de requestLegacyExternalStorage desteği geçici olarak devam ediyor fakat uygulama hedefi Android 11 seçilirse requestLegacyExternalStorage işe yaramıyor galiba Storage access with Android 11 
  5. Google'ın gelişitiricilerin artan şikayetlerine rağmen dosyaları external klasörlere taşımayı her sürümde daha da zorlaştırması düşündüğü söyleniyor. Belki ileride uygulamalar Downloads vs. external klasörlere ulaşamayacak. Böyle bir ihtimal var mıdır, siz ne dersiniz.

Merhaba,
Tüm yazdıklarınıza katılıyorum. Android platformunda varsayılan dizin ve harici diskin kullanımına yönelik tüm detayları sıralamışsınız. Teşekkür ederiz.
Android veya diğer platformlar hangi politikaları zorunlu hale getirirse getirsin Delphi IDE'si bunu bizim adımıza uyguluyor. Sonradan bir müdahaleyi en aza indiriyor. 
Örneğin bahsettiğiniz requestLegacyExternalStorage özelliği, Delphi 10.4 IDE'si tarafından varsayılan uygulama parametreleri kısmına doğrudan ekleniyor.

   

Özetle en güncel Delphi sürümü, en güncel SDK ve platform politikalarını barındırıyor.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#8
(17-09-2020, Saat: 09:44)Fesih ARSLAN Adlı Kullanıcıdan Alıntı:
(17-09-2020, Saat: 07:01)emozgun Adlı Kullanıcıdan Alıntı: Merhabalar, Fesih beyin yukarıda bildirdiklerinden ve https://developer.android.com/about/vers...cy/storage bağlantısından şunlar anlaşılıyor doğru mudur?
  1. Internal'da (TPath.GetPublicPath, ...) izinsiz dosya kaydı yapılabiliyor
  2. External'da (TPath.GetSharedDownloadsPath, ...) kayıt için 10.3 Rio ve sonraki sürümlerde manifeste requestLegacyExternalStorage eklemeye lüzum yok, varsayılan açılıyor
  3. Android 10'dan itibaren requestLegacyExternalStorage eklemek gerekiyor
  4. Android 11'de requestLegacyExternalStorage desteği geçici olarak devam ediyor fakat uygulama hedefi Android 11 seçilirse requestLegacyExternalStorage işe yaramıyor galiba Storage access with Android 11 
  5. Google'ın gelişitiricilerin artan şikayetlerine rağmen dosyaları external klasörlere taşımayı her sürümde daha da zorlaştırması düşündüğü söyleniyor. Belki ileride uygulamalar Downloads vs. external klasörlere ulaşamayacak. Böyle bir ihtimal var mıdır, siz ne dersiniz.

Merhaba,
Tüm yazdıklarınıza katılıyorum. Android platformunda varsayılan dizin ve harici diskin kullanımına yönelik tüm detayları sıralamışsınız. Teşekkür ederiz.
Android veya diğer platformlar hangi politikaları zorunlu hale getirirse getirsin Delphi IDE'si bunu bizim adımıza uyguluyor. Sonradan bir müdahaleyi en aza indiriyor. 
Örneğin bahsettiğiniz requestLegacyExternalStorage özelliği, Delphi 10.4 IDE'si tarafından varsayılan uygulama parametreleri kısmına doğrudan ekleniyor.



Özetle en güncel Delphi sürümü, en güncel SDK ve platform politikalarını barındırıyor.

Cevabınız için teşekkürler Fesih bey. Uygulamamı external kullanmayacak şekilde değiştiriyorum. Dediğiniz gibi bize sanki Delphi zorlaştırıyor gibi geliyor aslında işi zorlaştıran Google. Bu arada bir sorum daha olacaktı:

internal'a deployment ile dosya yüklemeye çalışıyorum fakat dosyalar bulunamıyor. Delphi'nin XE5 vb. eski sürümlerinde deployment olan örnekler mevcut, fakat son sürümlerinde örnek bulamadım. Sqlite örneklerinde de veritabanı dosyalarını uygulama yüklendikten sonra oluşturmak için genellikle bu kodu eklemişler: 
procedure TFireDAC_SQLiteForm.FDConnection1AfterConnect(Sender: TObject);
begin
 FDConnection1.ExecSQL ('CREATE TABLE IF NOT EXISTS Task (TaskName TEXT NOT NULL)');
end;
Acaba Android 9 veya 10'dan itibaren Deployment ile ./assests/internal ile artık dosya yüklenemiyor mu?
saygılar mustafa ֍zgün 
Cevapla
#9
(18-09-2020, Saat: 17:38)emozgun Adlı Kullanıcıdan Alıntı:
(17-09-2020, Saat: 09:44)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Merhaba,
Tüm yazdıklarınıza katılıyorum. Android platformunda varsayılan dizin ve harici diskin kullanımına yönelik tüm detayları sıralamışsınız. Teşekkür ederiz.
Android veya diğer platformlar hangi politikaları zorunlu hale getirirse getirsin Delphi IDE'si bunu bizim adımıza uyguluyor. Sonradan bir müdahaleyi en aza indiriyor. 
Örneğin bahsettiğiniz requestLegacyExternalStorage özelliği, Delphi 10.4 IDE'si tarafından varsayılan uygulama parametreleri kısmına doğrudan ekleniyor.



Özetle en güncel Delphi sürümü, en güncel SDK ve platform politikalarını barındırıyor.

Cevabınız için teşekkürler Fesih bey. Uygulamamı external kullanmayacak şekilde değiştiriyorum. Dediğiniz gibi bize sanki Delphi zorlaştırıyor gibi geliyor aslında işi zorlaştıran Google. Bu arada bir sorum daha olacaktı:

internal'a deployment ile dosya yüklemeye çalışıyorum fakat dosyalar bulunamıyor. Delphi'nin XE5 vb. eski sürümlerinde deployment olan örnekler mevcut, fakat son sürümlerinde örnek bulamadım. Sqlite örneklerinde de veritabanı dosyalarını uygulama yüklendikten sonra oluşturmak için genellikle bu kodu eklemişler: 
procedure TFireDAC_SQLiteForm.FDConnection1AfterConnect(Sender: TObject);
begin
 FDConnection1.ExecSQL ('CREATE TABLE IF NOT EXISTS Task (TaskName TEXT NOT NULL)');
end;
Acaba Android 9 veya 10'dan itibaren Deployment ile ./assests/internal ile artık dosya yüklenemiyor mu?

Deployment yüklemede sıkıntı yokmuş. Dahili klasörler koruma altında olduğu (ve root yapılmadığı) için Android dosya yöneticisi göstermiyormuş. FileExists ile yüklenen dosyalar bulunabiliyormuş  Blush 
 
 if(FileExists(TPath.Combine(TPath.GetDocumentsPath, dosya1)))then
   memo1.Lines.Add(dosya1 + ' var')
 else
   memo1.Lines.Add(dosya1 + ' yok');
saygılar mustafa ֍zgün 
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Uygulama imzalama sorunu[ÇÖZÜLDÜ] codder71 5 301 22-09-2020, Saat: 13:12
Son Yorum: codder71
  [ ÇÖZÜLDÜ ] Play Console İmza Sorunu ? Delphi 10.3 Mr.Developer 12 4.501 07-09-2020, Saat: 12:52
Son Yorum: codder71
  [ÇÖZÜLDÜ]Android derleme hatası[ÇÖZÜLDÜ] arsl01 3 604 15-07-2020, Saat: 22:18
Son Yorum: arsl01
  TEdit hakkında - Çözüldü ekank 10 1.401 15-07-2020, Saat: 13:36
Son Yorum: ekank
  Image Height ve Width boyutu- çözüldü Nese 2 461 13-07-2020, Saat: 00:44
Son Yorum: Nese



Konuyu Okuyanlar: 1 Ziyaretçi