Ich habe überall gesucht und ich kann nicht herausfinden, wie das geht; Ich bin so frustriert ...Sende SQLite DB-Datei aus der App
Wie kann ich dem Benutzer erlauben, die SQLite DB-Datei (per E-Mail) zu senden?
Das ist es in aller Kürze. Ich kann es in String und Anhang konvertieren, aber ich möchte die tatsächliche db-Datei senden. Und ich benutze ein neues Telefon, das keine externe SD-Karte hat.
Die App ist nur ein Formular, das der Benutzer ausfüllt, dann wird es in einer SQLite-Datenbank gespeichert. Das funktioniert wunderbar. Ebenso druckt die db nach string (Text) und sendet sie dann. Aber ich möchte, dass der Benutzer die tatsächliche DB-Datei per E-Mail sendet (damit ich C# zum Lesen, Verarbeiten und "Re-Erstellen" eines echten Formulars verwenden kann).
Oder sollte ich etwas anderes als SQLite verwenden?
Edit: Das ist so weit wie ich es gemacht habe. Es scheint zu funktionieren, aber es hängt nicht wirklich die Datei oder vielmehr die Datei ist "leer/leer". Debug-Protokoll sagt keine solche Datei oder Verzeichnis. Screenshot von Debug-Log hier: http://imgur.com/oyzdtuJ
//trying again to send a SQL db file
//this seems to work and shows that it's attaching a file, but the file is empty so it won't attach
//gmail will say "cant attach empty file"
private void sendFile(String email){
File myFile = this.getFileStreamPath("testresults.db");
if(myFile != null) {
Log.d("LOG PRINT SHARE DB", "File Found, Here is file location: " + myFile.toString());
}else {
Log.w("Tag", "file not found!");
}
Uri contentUri = FileProvider.getUriForFile(this, "com.columbiawestengineering.columbiawest.MainActivity", myFile);
Log.d("LOG PRINT SHARE DB", "contentUri got: here is contentUri: " + contentUri.toString());
//grant permision for app with package "com.columbiawestengineering.columbiawest", eg. before starting other app via intent
this.grantUriPermission("com.columbiawestengineering.columbiawest", contentUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
Log.d("LOG PRINT SHARE DB", "permission granted, here is contentUri: " + contentUri.toString());
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.setType("application/octet-stream");
shareIntent.putExtra(Intent.EXTRA_SUBJECT, "blaaa subject");
String to[] = { email };
shareIntent.putExtra(Intent.EXTRA_EMAIL, to);
shareIntent.putExtra(Intent.EXTRA_TEXT, "blah blah message");
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
shareIntent.putExtra(Intent.EXTRA_STREAM, contentUri);
startActivityForResult(Intent.createChooser(shareIntent, "Send mail..."), 1252);
//revoke permisions
this.revokeUriPermission(contentUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
}
Java-Code, um die db-Datei "zu bekommen"? Es ist meistens nur Text, Checkboxen usw., also ist es nicht wirklich so groß. –
Ich würde immer noch vorsichtig mit E-Mail sein, einige E-Mail-Clients und Server haben Grenzen, wie viele Daten sie zulassen usw. Wenn Sie einen Web-Service verwenden können, der die bevorzugte Route wäre, dann sehen Sie sich E-Mail oder FTP usw. – Harry
Wir haben unseren eigenen E-Mail-Client und Server, also ist es in Ordnung. Und die Datei ist wirklich klein (sehr wenig tatsächlicher Text). Aber ich kann nicht scheinen, die tatsächliche DB-Datei zu senden. Verdammt, ich kann mich nicht einmal darauf beziehen. Ich bin gerade jetzt so frustriert. –