Today i'm gonna show how to attach a file as attachment and send it over your smartphone using Android. This is specially good if you want users to send you feedbacks or you are trying to backup something.
I had specially problems with attachments because out there was a lot of content but no one completed. Just code snippets and fragments. Here you'll find a complete and working example!
Preparing Attachments
Before you can send attachments, you must create a file in an external directory of your choice before trying to send it. I tryed several approaches and no one has worked for me. Only this one! So, first of all save your data, for example, like this bellow: private static final String DATABASE_NAME = "yourDatabaseName.db";
private static final String SEPARATOR = File.separator;
public static final String BACKUP = SEPARATOR+DATABASE_NAME;
public final String packageName = context.getPackageName();
public static final String DB_FILEPATH = "/data/data/" + packageName + "/databases/"+DATABASE_NAME;
public void backupDatabase() throws IOException {
if (isSDCardWriteable()) {
// Open your local db as the input stream
String inFileName = DB_FILEPATH;
File dbFile = new File(inFileName);
FileInputStream fis = new FileInputStream(dbFile);
String outFileName = Environment.getExternalStorageDirectory()+ BACKUP;
// Open the empty db as the output stream
OutputStream output = new FileOutputStream(outFileName);
// transfer bytes from the inputfile to the outputfile
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
// Close the streams
output.flush();
output.close();
fis.close();
}
}
private boolean isSDCardWriteable() {
boolean rc = false;
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
rc = true;
}
return rc;
}
Email Intent
Das is the method responsible for sending emails. public void backupOverEmail(String[] toEmails) throws IOException {
backupDatabase();
String fileName = BACKUP;
File file = new File(Environment.getExternalStorageDirectory() + fileName);
Uri path = Uri.fromFile(file);
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("application/octet-stream");
intent.putExtra(Intent.EXTRA_SUBJECT, "Backup");
intent.putExtra(Intent.EXTRA_EMAIL, toEmails);
intent.putExtra(Intent.EXTRA_TEXT, "Backup database\n");
intent.putExtra(Intent.EXTRA_STREAM, path);
context.startActivity(Intent.createChooser(intent, "Send mail..."));
}
Importing Files
To import your files, you may use this: public void copyFile(FileInputStream fromFile, FileOutputStream toFile) throws IOException {
FileChannel fromChannel = null;
FileChannel toChannel = null;
try {
fromChannel = fromFile.getChannel();
toChannel = toFile.getChannel();
fromChannel.transferTo(0, fromChannel.size(), toChannel);
} finally {
try {
if (fromChannel != null) {
fromChannel.close();
}
} finally {
if (toChannel != null) {
toChannel.close();
}
}
}
}
public boolean importDatabase() throws IOException {
// import backup from download folder
String dbPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + BACKUP;
// Close the SQLiteOpenHelper so it will
// commit the created empty database to internal storage.
close();
File newDb = new File(dbPath);
File oldDb = new File(DB_FILEPATH);
if (newDb.exists()) {
copyFile(new FileInputStream(newDb), new FileOutputStream(oldDb));
// Access the copied database so SQLiteHelper
// will cache it and mark it as created.
getWritableDatabase().close();
return true;
}
return false;
}
That's alll. Hope you like it.
😱👇 PROMOTIONAL DISCOUNT: BOOKS AND IPODS PRO 😱👇
Be sure to read, it will change your life!
Show your work by Austin Kleon: https://amzn.to/34NVmwx
This book is a must read - it will put you in another level! (Expert)
Agile Software Development, Principles, Patterns, and Practices: https://amzn.to/30WQSm2
Write cleaner code and stand out!
Clean Code - A Handbook of Agile Software Craftsmanship: https://amzn.to/33RvaSv
This book is very practical, straightforward and to the point! Worth every penny!
Kotlin for Android App Development (Developer's Library): https://amzn.to/33VZ6gp
Needless to say, these are top right?
Apple AirPods Pro: https://amzn.to/2GOICxy
😱👆 PROMOTIONAL DISCOUNT: BOOKS AND IPODS PRO 😱👆