Bir Intent'te dosya bağlantısı nasıl iletilir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Bir Intent içinde dosya bağlantısı iletmek için Uri kullanılır.
-
FileProviderkullanımı (Android N ve üzeri için önerilen yöntem):
En güvenli ve önerilen yöntemdir, çünkü Android'in en son sürümlerindeFileUriExposedException'ı önler.-
AndroidManifest.xmliçindeFileProvidertanımlanmalı ve dosyalara erişim yollarını içeren bir XML dosyası oluşturulmalıdır. -
FileProvider.getUriForFile()kullanılarakUrialınmalıdır. -
AndroidManifest.xml:<application> <provider android:name="androidx.core.content.FileProvider" android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths"/> </provider> </application> -
res/xml/provider_paths.xml:<paths> <external-path name="external_files" path="."/> </paths> -
Transfer kodu:
// 'file' nesnesinin java.io.File olduğu varsayılır Uri fileUri = FileProvider.getUriForFile( context, context.getPackageName() + ".provider", file ); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(fileUri, "application/pdf"); // Doğru MIME türünü belirtin intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // Okuma izni ver if (intent.resolveActivity(context.getPackageManager()) != null) { context.startActivity(intent); }
-
-
Uri.fromFile()kullanımı (Android N ile Deprecated):
Bu yöntem, güvenlik sorunları nedeniyle Android N ve sonrası sürümlerde önerilmez.-
Android N'den itibaren,
Intentaracılığıyla dosya URI'larının aktarılması, diğer uygulamalarla etkileşimdeFileUriExposedExceptionhatasına neden olur. -
Transfer kodu:
// 'file' nesnesinin java.io.File olduğu varsayılır Uri fileUri = Uri.fromFile(file); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(fileUri, "application/pdf"); // Doğru MIME türünü belirtin // Bu kod, Android N+ sürümlerinde diğer uygulamalarla etkileşimde `FileUriExposedException` hatası oluşturabilir if (intent.resolveActivity(context.getPackageManager()) != null) { context.startActivity(intent); }
-
Kısaca tablo:
| Yöntem | Tavsiye (Android N+) | Güvenlik |
|---|---|---|
FileProvider |
✅ | Yüksek (FileUriExposedException'ı önler) |
Uri.fromFile() |
❌ | Düşük (FileUriExposedException oluşturabilir) |
Her zaman Android N ve üzeri uygulamalar arasında dosya paylaşımı için FileProvider kullanın.