Как поделиться файлом внутреннего хранилища с Gmail Client

Я пытаюсь поделиться своим внутренним файлом хранения через клиент Gmail на моем Moto Razr, но каждый раз, когда я отправляю свою тестовую учетную запись gmail, я получаю все, кроме вложений.

Так я запускаю и запускаю gmail, а файл добавляю как вложение.

private void saveDaily() {
Intent intent = new Intent(android.content.Intent.ACTION_SEND_MULTIPLE);
intent.setType("text/plain");

intent.putExtra(Intent.EXTRA_EMAIL, new String[] { loadEmailAddress() });
intent.putExtra(Intent.EXTRA_SUBJECT, "Daily");
intent.putExtra(Intent.EXTRA_TEXT, "Daily Log");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

ArrayList uris = new ArrayList();
uris.add(saveDaily2File("dailyRecord.txt"));
Log.d(TAG_D, "Size: " + uris.size());
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
startActivity(Intent.createChooser(intent, "Send email"));
}

Вот как я реализую свой настраиваемый поставщик контента.}

public class SavedFileProvider extends ContentProvider {

private static final String TAG_D = "ContentProvider";
private static final HashMap MIME_TYPES = new HashMap();

static {
MIME_TYPES.put(".txt", "text/plain");
}

@Override
public String getType(Uri uri) {
String path = uri.toString();

for (String extension : MIME_TYPES.keySet()) {
    if (path.endsWith(extension)) {
    return (MIME_TYPES.get(extension));
    }
}

return (null);
}

@Override
public ParcelFileDescriptor openFile(Uri uri, String mode)
    throws FileNotFoundException {
Log.d(TAG_D, "openFile()");

File f = new File(getContext().getFilesDir(), uri.getPath());

Log.d(TAG_D, f.getAbsolutePath());
if (f.exists()) {
    return (ParcelFileDescriptor.open(f,
        ParcelFileDescriptor.MODE_READ_ONLY));
}

throw new FileNotFoundException(uri.getPath());
}

@Override
public Cursor query(Uri url, String[] projection, String selection,
    String[] selectionArgs, String sort) {
throw new RuntimeException("Operation not supported");
}

@Override
public Uri insert(Uri uri, ContentValues initialValues) {
throw new RuntimeException("Operation not supported");
}

@Override
public int update(Uri uri, ContentValues values, String where,
    String[] whereArgs) {
throw new RuntimeException("Operation not supported");
}

@Override
public int delete(Uri uri, String where, String[] whereArgs) {
throw new RuntimeException("Operation not supported");
}

private void copy(InputStream in, File dst) throws IOException {
FileOutputStream out = new FileOutputStream(dst);
byte[] buf = new byte[1024];
int len;

while ((len = in.read(buf)) > 0) {
    out.write(buf, 0, len);
}

in.close();
out.close();
}

@Override
public boolean onCreate() {
Log.d(TAG_D, "onCreate()");
File f = new File(getContext().getFilesDir(), "dailyRecord.txt");

if (!f.exists()) {
    AssetManager assets = getContext().getResources().getAssets();

    try {
    copy(assets.open("dailyRecord.txt"), f);
    } catch (IOException e) {
    Log.e("FileProvider", "Exception copying from assets", e);

    return (false);
    }
}
return (true);
}

Затем я добавляю следующие строки в мой файл AndroidManifest.xml.



Интересно, что мне здесь не хватает.

Я проверил ссылку:Link1,Link2