Android: Intent.ACTION_SEND mit EXTRA_STREAM befestigen kein Bild, wenn Google Mail-App auf HTC Hero Auswahl

StackOverflow https://stackoverflow.com/questions/2206397

Frage

Auf dem Emulator mit einem Standard-Mail-App alles funktioniert gut. Aber ich habe nicht an, wenn Ich bin eine E-Mail empfangen, die ich von meinem Held geschickt haben mit einem Google Mail-App. Der Standard-Mail-App auf dem Helden funktioniert gut.

Wie kann ich diesen Code arbeitet mit Google Mail-App auf Helden?
Sie können den Code unten.

    private void startSendIntent() {
        Bitmap bitmap = Bitmap.createBitmap(editableImageView.getWidth(), editableImageView.getHeight(), Bitmap.Config.RGB_565);
        editableImageView.draw(new Canvas(bitmap));
        File png = getFileStreamPath(getString(R.string.file_name));
        FileOutputStream out = null;
        try {
            out = openFileOutput(getString(R.string.file_name), MODE_WORLD_READABLE);
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
            out.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (out != null) out.close();
            }
            catch (IOException ignore) {}
        }
        final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
        emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(png));
        emailIntent.setType("image/png");
        startActivity(Intent.createChooser(emailIntent, getString(R.string.send_intent_name)));
}

in Logs sehe ich folgendes:

02-05 17:03:37.526: DEBUG/Gmail(11511): URI FOUND:file:///sdcard/DCIM/100MEDIA/IMAG0001.jpg
02-05 17:03:37.535: DEBUG/Gmail(11511): ComposeActivity added to message:0 attachment:|IMAG0001.jpg|image/jpeg|0|image/jpeg|LOCAL_FILE|file:///sdcard/DCIM/100MEDIA/IMAG0001.jpg size:0
02-05 17:03:37.585: INFO/Gmail(11511): >>>>> Attachment uri: file:///sdcard/DCIM/100MEDIA/IMAG0001.jpg
02-05 17:03:37.585: INFO/Gmail(11511): >>>>>           type: image/jpeg
02-05 17:03:37.585: INFO/Gmail(11511): >>>>>           name: IMAG0001.jpg
02-05 17:03:37.585: INFO/Gmail(11511): >>>>>           size: 0

Vielen Dank für die Antwort.

War es hilfreich?

Lösung

Für mich ist das Problem mit den folgenden Codezeilen gelöst wurde:

Bitmap screenshot = Bitmap.createBitmap(_rootView.getWidth(), _rootView.getHeight(), Bitmap.Config.RGB_565);
_rootView.draw(new Canvas(screenshot));

String path = Images.Media.insertImage(getContentResolver(), screenshot, "title", null);
Uri screenshotUri = Uri.parse(path);

final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
emailIntent.putExtra(Intent.EXTRA_STREAM, screenshotUri);
emailIntent.setType("image/png");

startActivity(Intent.createChooser(emailIntent, "Send email using"));

Das Wichtigste ist, dass ich den Bildschirm-shot in die Medienbibliothek bin Speicher und dann kann es erfolgreich eine Datei von dort aus senden.

Andere Tipps

getFileStreamPath() oder openFileOutput() werden die Dateien in einem eigenen Verzeichnis erstellen, die zu anderen Anwendungen nicht zugänglich ist (das heißt Gmail). Verwenden externe Speicher erstellen öffentlich zugängliche Dateien:

private static final int REQUEST_SHARE = 39714;

private File png = null;

private void startSendIntent() {
    png = new File(new File(Environment.getExternalStorageDirectory(), "Pictures"), getString(R.string.file_name));

    FileOutputStream out = null;
    try {
        out = new FileOutputStream(png);
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
        out.flush();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if (out != null) out.close();
        }
         catch (IOException ignore) {}
        }
        final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
        emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(png));
        emailIntent.setType("image/png");
        startActivityForResult(Intent.createChooser(emailIntent, getString(R.string.send_intent_name)), REQUEST_SHARE);
    }
}

Das wird nicht funktionieren, wenn der externe Speicher nicht verfügbar ist, wie wenn es als USB-Laufwerk montiert ist. Sehen Sie sich die Lagerung API-Handbuch mehr über Erkennung, ob extern Speicher verfügbar ist.

Wenn Sie Ihre Mindest API-Ebene 8 oder höher ist, können Sie Context.getExternalCacheDir() oder Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) als das übergeordnete Verzeichnis verwenden können.

Wenn Sie getExternalCacheDir() am Ende mit, stellen Sie sicher, dass Sie einen eindeutigen Dateinamen verwenden eine der Benutzer Dateien zu verhindern, dass versehentlich überschrieben zu werden.

Schließlich können Sie onActivityResult() außer Kraft setzen, die Datei zu löschen, nachdem die Aktie Vorgang abgeschlossen ist:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if(requestCode == REQUEST_SHARE) {
        if(this.png == null) {
            return;
        }

        this.png.delete();
    }
}

Ich hatte die gleichen Symptome. In meinem Fall war es, weil ich anfangs wurde die Anlage mit den Berechtigungen MODE_PRIVATE speichern. Sobald ich änderte es MODE_WORLD_READABLE es Google Mail war scheint dann in der Lage auf die Datei zugreifen und richtig die Anlage senden. Obwohl ich im Code sehen Snippet Sie MODE_WORLD_READABLE wurden mit ... seltsam.

http://developer.android.com/reference/android/ content / Context.html # MODE_WORLD_READABLE

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top