Да, мы можем прикрепить внутренние файлы, хранящиеся в каталоге файлов, к Gmail с помощью FileProvider. Используя FileProvider, мы можем предоставить временный доступ к некоторым внутренним файлам нашего приложения (как указано в filepaths.xml).
В манифесте, как указано в документации Android, добавьте FileProvider:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.package.name.fileprovider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
Теперь в папке res/xml вашего приложения создайте filepaths.xml и добавьте следующий код:
<paths>
<files-path path="." name="name" />
Примечание. Это даст доступ к корневому каталогу файлов, если вы хотите предоставить конкретный доступ к какому-либо подкаталогу, например изображениям, во внутренней памяти, укажите путь как «images/»
<paths>
<files-path path="images/" name="name" />
В коде:
File file=new File(context.getFilesDir(),"test.txt");
Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND_MULTIPLE);
shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,
"Test");
shareIntent.setType("text/plain");
shareIntent.putExtra(android.content.Intent.EXTRA_EMAIL,
new String[] {"email-address you want to send the file to"});
Uri uri = FileProvider.getUriForFile(context,"com.package.name.fileprovider",
file);
ArrayList<Uri> uris = new ArrayList<Uri>();
uris.add(uri);
shareIntent .putParcelableArrayListExtra(Intent.EXTRA_STREAM,
uris);
try {
context.startActivity(Intent.createChooser(shareIntent , "Email:").addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
}
catch(ActivityNotFoundException e) {
Toast.makeText(context,
"Sorry No email Application was found",
Toast.LENGTH_SHORT).show();
}
}
Это сработало для меня. Надеюсь, это поможет :)
person
Adarsh Chithran
schedule
28.10.2014