البرمجة

كيفية الحصول على content URI باستخدام FileProvider

To get a content URI for a file in the external storage public directory, you need to use a FileProvider. Here’s how you can do it:

First, make sure you have defined a FileProvider in your AndroidManifest.xml file:

xml
<application> ... <provider android:name="androidx.core.content.FileProvider" android:authorities="${applicationId}.fileprovider" android:grantUriPermissions="true" android:exported="false"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"/> provider> ... application>

Next, create a file_paths.xml file in your res/xml directory:

xml
<paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-path name="my_images" path="Pictures/MyAppFolder"/> paths>

Then, modify your code to use the FileProvider to get the content URI for your file:

java
private Uri getImageUri(File file) { return FileProvider.getUriForFile(this, getApplicationContext().getPackageName() + ".fileprovider", file); }

Finally, update your intent to use the content URI:

java
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (takePictureIntent.resolveActivity(getPackageManager()) != null) { File photoFile = null; try { photoFile = createImageFile(); } catch (IOException ex) { Log.e(TAG, "Error occurred while creating the File", ex); } if (photoFile != null) { Uri photoURI = getImageUri(photoFile); takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); } }

This should allow you to capture an image and get a content URI for it, which can be safely shared across apps on Android N and above.

المزيد من المعلومات

عند استخدام FileProvider للحصول على content URI لملف في الذاكرة التخزين الخارجية العامة في Android، يجب عليك مراعاة النقاط التالية:

  1. تعريف الـ FileProvider في ملف AndroidManifest.xml: يجب تعريف موفر الملف بشكل صحيح في ملف الـ AndroidManifest.xml كما هو موضح في المثال السابق. يجب استبدال ${applicationId} بمعرف التطبيق الخاص بك.

  2. إعداد ملف المسارات (file_paths.xml): يجب إنشاء ملف XML يحتوي على معلومات المسارات الخاصة بالملفات التي ترغب في مشاركتها. في المثال السابق، يتم تعريف مسار خارجي (external-path) يشير إلى مجلد الصور في الذاكرة التخزين الخارجية العامة.

  3. استخدام FileProvider للحصول على content URI: يجب استخدام دالة FileProvider.getUriForFile() للحصول على content URI للملف. يتم تمرير اسم السلطة (authority) الذي تم تعريفه في ملف الـ AndroidManifest.xml واسم الملف الذي ترغب في الحصول على content URI له.

  4. تمرير الـ URI للغاية المطلوبة: بمجرد الحصول على content URI، يمكنك استخدامه في أي نشاط (Intent) ترغب في مشاركة الملف به. في حالة التصوير بالكاميرا، يمكنك استخدام الـ URI المحصل عليه لتخزين الصورة التي تم التقاطها.

  5. التحقق من وجود تطبيق يمكنه التعامل مع العملية: قبل استخدام الـ Intent للتصوير، يجب التحقق من وجود تطبيق يمكنه التعامل مع هذا النوع من الـ Intent. يمكنك القيام بذلك باستخدام الدالة resolveActivity() كما هو موضح في المثال السابق.

باستخدام هذه النصائح، يمكنك استخدام FileProvider بشكل صحيح للحصول على content URI لملف في الذاكرة التخزين الخارجية العامة في Android.

زر الذهاب إلى الأعلى