Ich erstelle eine Reihe von Textdateien, die ich wie im folgenden Code erstellt habe. Ich habe diese Dateien im internen Speicher gespeichert. Mein Ziel ist es jetzt, es in ListView anzuzeigen und wenn der Benutzer auf ein Element klickt, das es öffnen soll, oder die Datei per Absicht senden (z. B. E-Mail).Share Text-Datei über Intent aus dem internen Speicher
static void createFile (Context context) {
mTimeStamp = String.valueOf(System.currentTimeMillis()/1000);
try {
String fileName = "File_" + mTimeStamp + ".txt";
mContext = context;
mOutputStreamWriter = new
OutputStreamWriter(context.openFileOutput(fileName ,Context.MODE_PRIVATE));
String path = mContext.getFilesDir().getAbsolutePath();
Toast.makeText(mContext, "Creating file: " + path,
Toast.LENGTH_LONG).show();
} catch (FileNotFoundException e) {
Log.e(TAG,"Error with creating file writer...");
e.printStackTrace();
}
}
static void writeToFileData(String dataToSave) {
try {
Toast.makeText(mContext, "Saving data to file: " + dataToSave, Toast.LENGTH_SHORT).show();
mOutputStreamWriter.write(dataToSave);
} catch (IOException e) {
Log.e(TAG,"Error with writing to file...");
e.printStackTrace();
}
}
static void closeFileWriter() {
try {
Toast.makeText(mContext, "Closing file... ", Toast.LENGTH_SHORT).show();
mOutputStreamWriter.close();
} catch (IOException e) {
Log.e(TAG,"Error with closing file writer...");
e.printStackTrace();
}
}
Dann führe ich meine alle Dateien wie diese (nicht in Listview aber nur für Test jetzt):
static void testDispFiles (Context context) {
mContext = context;
String path = mContext.getFilesDir().getAbsolutePath();
Log.v(TAG, "testDisp path: " + path);
File dirFile = new File(path);
File[] files = dirFile.listFiles();
Log.v(TAG, "testDisp length: " + files.length);
for (File f: files) {
Log.v(TAG, "testDisp file: " + f.getName());
}
}
Und nun möchte ich eine der Dateien teilen, indem sie durch beispielsweise das Senden Email. Wie sende ich die Textdatei aus dem internen Speicher mit Absicht?
// Edit:
ich schaffen eine Absicht, die den Toast Rückkehr-Nachricht von Google Mail-App „Sie können diese Datei nicht hinzufügen“.
String path = mContext.getFilesDir().getAbsolutePath();
File f = new File(path);
File[] files = f.listFiles();
Uri data = Uri.fromFile(files[0]);
Intent i = new Intent(Intent.ACTION_SEND);
i.putExtra(Intent.EXTRA_STREAM,data);
i.setType("plain/text");
i.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
i.setFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
startActivity(i);
Sie können TinyDB verwenden String in den internen Speicher zu speichern, und dann kann es bekommen: TinyDB.class [hier] (https : //github.com/kcochibili/TinyDB--Android-Shared-Preferences-Turbo/blob/master/TinyDB.java) –
Verwenden Sie 'FileProvider': https://developer.android.com/reference/android/support/ v4/content/FileProvider.html – CommonsWare
@CommonsWare Könnten Sie mir dabei helfen? Ich benutze nie den FileProvider. – chebad