Szukam sposobu na poprawne udostępnienie (nie OTWÓRZ) wewnętrznego pliku z zewnętrzną aplikacją za pomocą FileProvider biblioteki Android Support .
Idąc za przykładem w dokumentach,
<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>
i używając ShareCompat do udostępniania pliku innym aplikacjom w następujący sposób:
ShareCompat.IntentBuilder.from(activity)
.setStream(uri) // uri from FileProvider
.setType("text/html")
.getIntent()
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
nie działa, ponieważ FLAG_GRANT_READ_URI_PERMISSION udziela tylko pozwolenia na Uri podanego w data
intencji, a nie na wartość EXTRA_STREAM
dodatkowego (jak zostało ustawione przez setStream
).
Próbowałem bezpieczeństwa kompromisowego ustawiając android:exported
się true
do usługodawcy, ale FileProvider
wewnętrznie sprawdza, czy sama jest eksportowany, jeśli tak, to zgłasza wyjątek.