ฉันกำลังมองหาวิธีการอย่างถูกต้องหุ้น (ไม่เปิด) ไฟล์ภายในกับโปรแกรมภายนอกใช้ห้องสมุดสนับสนุน Android ของFileProvider
ทำตามตัวอย่างในเอกสาร
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.example.android.supportv4.my_files"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/my_paths" />
</provider>
และใช้ ShareCompat เพื่อแชร์ไฟล์ไปยังแอปอื่นดังนี้:
ShareCompat.IntentBuilder.from(activity)
.setStream(uri) // uri from FileProvider
.setType("text/html")
.getIntent()
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
ไม่ทำงานเนื่องจาก FLAG_GRANT_READ_URI_PERMISSION จะให้สิทธิ์แก่ Uri ที่ระบุไว้ในdata
เจตนาเท่านั้นไม่ใช่มูลค่าของส่วนEXTRA_STREAM
เสริม (ตามที่กำหนดโดยsetStream
)
ผมพยายามที่จะรักษาความปลอดภัยการประนีประนอมโดยการตั้งค่าandroid:exported
ไปยังtrue
ผู้ให้บริการ แต่FileProvider
ภายในตรวจสอบว่าตัวเองจะถูกส่งออกเมื่อเป็นเช่นนั้นก็พ่นยกเว้น