หากต้องการเสนอไฟล์จากแอปไปยังแอปอื่นอย่างปลอดภัย คุณต้องกำหนดค่าแอปให้เสนอ
แฮนเดิลที่ปลอดภัยกับไฟล์ในรูปแบบ URI เนื้อหา Android
คอมโพเนนต์ FileProvider
สร้าง URI เนื้อหาสำหรับ
ตามข้อมูลจำเพาะที่คุณระบุไว้ใน XML บทเรียนนี้แสดงวิธีเพิ่ม
การนำ FileProvider
มาใช้ในแอปและวิธี
ระบุไฟล์ที่คุณต้องการเสนอให้แอปอื่นๆ
หมายเหตุ: ชั้นเรียน FileProvider
เป็นส่วนหนึ่งของ
AndroidX Core Library สำหรับข้อมูล
เกี่ยวกับการรวมไลบรารีนี้ในแอปพลิเคชันของคุณ โปรดดู
การประกาศทรัพยากร Dependency
ระบุ FileProvider
การกำหนด FileProvider
สำหรับแอปของคุณต้องมีการป้อนข้อมูลใน
ไฟล์ Manifest รายการนี้ระบุสิทธิ์ที่จะใช้ในการสร้าง URI เนื้อหา และ
ชื่อไฟล์ XML ที่ระบุไดเรกทอรีที่แอปของคุณแชร์ได้
ข้อมูลโค้ดต่อไปนี้แสดงวิธีเพิ่มลงในไฟล์ Manifest
<provider>
ที่ระบุ
FileProvider
คลาส สิทธิ์ และ
ชื่อไฟล์ XML:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapp"> <application ...> <provider android:name="androidx.core.content.FileProvider" android:authorities="com.example.myapp.fileprovider" android:grantUriPermissions="true" android:exported="false"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/filepaths" /> </provider> ... </application> </manifest>
ในตัวอย่างนี้ แอตทริบิวต์ android:authorities
ระบุสิทธิ์ URI
ที่คุณต้องการใช้สำหรับ URI เนื้อหาที่สร้างโดย
FileProvider
ในตัวอย่างนี้ สิทธิ์คือ com.example.myapp.fileprovider
เพื่อการใช้งานของคุณเอง
ให้ระบุสิทธิ์ที่ประกอบด้วย
ค่า android:package
ที่มีสตริง "fileprovider" ต่อท้าย เพื่อดูข้อมูลเพิ่มเติม
เกี่ยวกับค่าอำนาจหน้าที่ โปรดดูหัวข้อ
URL เนื้อหา และเอกสารประกอบสำหรับ
android:authorities
องค์ประกอบย่อย <meta-data>
ของ
<provider>
ชี้ไปที่ไฟล์ XML ที่ระบุไดเรกทอรีที่คุณต้องการ
แชร์ แอตทริบิวต์ android:resource
คือเส้นทางและชื่อไฟล์ ไม่มี
ส่วนขยาย .xml
เนื้อหาของไฟล์นี้จะอธิบายในส่วนถัดไป
ระบุไดเรกทอรีที่แชร์ได้
เมื่อเพิ่ม FileProvider
ลงในไฟล์ Manifest ของแอปแล้ว
คุณต้องระบุไดเรกทอรีที่มีไฟล์ที่คุณต้องการแชร์ หากต้องการระบุ
ไดเรกทอรี ให้เริ่มต้นด้วยการสร้างไฟล์ filepaths.xml
ใน res/xml/
ไดเรกทอรีย่อยของโปรเจ็กต์ ในไฟล์นี้ ให้ระบุไดเรกทอรีโดยเพิ่มองค์ประกอบ XML สำหรับ
แต่ละไดเรกทอรี ข้อมูลโค้ดต่อไปนี้จะแสดงตัวอย่างเนื้อหาของ
res/xml/filepaths.xml
ข้อมูลโค้ดยังแสดงวิธีแชร์ไดเรกทอรีย่อยอีกด้วย
ของไดเรกทอรี files/
ในพื้นที่ที่จัดเก็บข้อมูลภายในของคุณ:
<paths> <files-path path="images/" name="myimages" /> </paths>
ในตัวอย่างนี้ แท็ก <files-path>
จะแชร์ไดเรกทอรีภายในแท็ก
ไดเรกทอรี files/
ของที่จัดเก็บข้อมูลภายในของแอป แอตทริบิวต์ path
แชร์ไดเรกทอรีย่อย images/
ของ files/
name
ให้ FileProvider
เพิ่มส่วนของเส้นทาง
myimages
ไปยัง URI เนื้อหาสำหรับไฟล์ในไดเรกทอรีย่อย files/images/
องค์ประกอบ <paths>
สามารถมีได้หลายคน โดยแต่ละองค์ประกอบระบุ
ไดเรกทอรีที่จะแชร์ นอกจากองค์ประกอบ <files-path>
แล้ว คุณยังสามารถ
ใช้องค์ประกอบ <external-path>
เพื่อแชร์ไดเรกทอรีในที่จัดเก็บข้อมูลภายนอก และ
เอลิเมนต์ <cache-path>
สำหรับแชร์ไดเรกทอรีในแคชภายใน
ไดเรกทอรี หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับองค์ประกอบย่อยที่ระบุไดเรกทอรีที่แชร์ โปรดดูที่
เอกสารอ้างอิง FileProvider
รายการ
หมายเหตุ: ไฟล์ XML เป็นวิธีเดียวที่คุณสามารถระบุไดเรกทอรีที่ต้องการ แชร์; คุณจะเพิ่มไดเรกทอรีแบบเป็นโปรแกรมไม่ได้
ตอนนี้คุณมีข้อมูลจำเพาะทั้งหมดของ FileProvider
ที่สร้าง URI เนื้อหาสำหรับไฟล์ในไดเรกทอรี files/
ของแอป
ที่จัดเก็บข้อมูลภายในหรือสำหรับไฟล์ในไดเรกทอรีย่อยของ files/
เวลาที่แอปสร้าง
URI เนื้อหาสำหรับไฟล์ มีการระบุสิทธิ์ที่ระบุใน
องค์ประกอบ <provider>
(com.example.myapp.fileprovider
)
เส้นทาง myimages/
และชื่อไฟล์
ตัวอย่างเช่น หากคุณกำหนด FileProvider
ตาม
ตัวอย่างในบทเรียนนี้ และคุณขอ URI เนื้อหาสำหรับไฟล์
default_image.jpg
, FileProvider
จะแสดงผล
URI ต่อไปนี้:
content://com.example.myapp.fileprovider/myimages/default_image.jpg
ดูข้อมูลที่เกี่ยวข้องเพิ่มเติมได้ที่