У меня есть приложение (приложение A), в котором я сохранил текстовый файл (testfile.txt) во внутреннем хранилище (data/data/com.example.mockapp/files) через код.Почему я не могу отправить текстовый файл, хранящийся во внутреннем хранилище моего приложения?
// Create a file in the Internal Storage
String content = "hello world";
String filename="testfile.txt";
File file = null;
FileOutputStream outputStream;
try {
file = new File(getFilesDir(), filename);
outputStream = new FileOutputStream(file);
outputStream.write(content.getBytes());
outputStream.close();
} catch (IOException e) {
Log.d("InternalfileException", "we are here in exception");
e.printStackTrace();
}
Он подтвердил, что файл был создан успешно, и он существует (я проверил)
Примечание: с помощью поставщику файлов для обмена текстового файла.
// XML
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<files-path path="." name="mockfiles" />
</paths>
// МАНИФЕСТ
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.example.mock.fileprovider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
// ЭТО КОДЕКС В ГЛАВНОМ АКТИВНОСТИ ОТПРАВИТЬ Intent
Uri uri = FileProvider.getUriForFile(this, "com.example.mock.fileprovider", file);
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_STREAM, uri);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(intent, null));
Теперь, когда я запустить приложение , он выводит диалог выбора с watsapp, gmail, message и т. д. для опций, но
при нажатии на любую из них он просто показывает ..
1) в случае watsapp - показывает текстовый файл, но он никогда не завершает загрузку
2) в случае Gmail - - показывает txt-файл, который никогда не прикрепляется как вложение, отправляется пустая почта.
Что мне не хватает?
Это сошло с ума до сих пор.
любезно помочь ..
Прочтите здесь информацию о получении правильного URI и предоставлении временных разрешений: https://developer.android.com/reference/android/support/v4/content/FileProvider.html#Permissions –
Если вы работаете на уровне API 15 или ниже, [у вас есть больше работы, чтобы предоставить разрешения] (https://commonsware.com/blog/2016/08/31/granting-permissions-uri-intent-extra.html). Кроме того, [мой 'LegacyCompatCursorWrapper'] (https://github.com/commonsguy/cwac-provider#usage-legacycompatcursorwrapper) помогает некоторым некорректным клиентам. – CommonsWare
@KenWolf, intent.addFlags (Intent.FLAG_GRANT_READ_URI_PERMISSION); этого недостаточно.? – eRaisedToX