Eigenes Bild in email einfügen

  • Antworten:47
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 27

15.05.2015, 00:38:13 via Website

Hey Leute,
ich schreib gerade an ner app um ein eben gemachtes bild als eMail zu versenden.
könnte mir einer sagen wie das mit dem bild funktioniert?

Soweit bin ich.

Code:

enter code here

@Override
public void onClick(View v) {
String emailaddress[] = { emailAdresse };
String message = "Sehr geehrte Damen und Herren, "
+ text....;

Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, emailaddress);
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Bild";
emailIntent.setType("plain/text");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, message);

enter code here

Danke schonmal

Antworten
  • Forum-Beiträge: 27

15.05.2015, 13:44:18 via Website

Hey danke schonmal aber der benutzt n festen pfad zu nem bild ich will n eigenes aufnehmen.
Ich erklär kurz was ich gemacht hab:

Ich mach n Foto hier:
Code:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (resultCode==RESULT_OK){
Bundle extras = data.getExtras();
bmp = (Bitmap) extras.get("data");
image.setImageBitmap(bmp);
}
}

und das image würde ich jetzt gerne meinem Intent zufügen.

Code:

emailIntent.putExtra(Intent.EXTRA_STREAM, image);

aber dann kommt der Fehler:

Zitat:
The method putExtra(String, boolean) in the type Intent is not applicable for the arguments (String, ImageView)

Was kann ich machen?

Antworten
  • Forum-Beiträge: 2.492

15.05.2015, 14:15:11 via Website

Du übergibst, wie der Fehler schon sagt ein ImageView und kein Bild.
Wenn du das Image übergeben willst musst du bmp statt image nehmen, ob man ein Bitmap als Extra setzen kann weiß ich so nicht, kannst du aber ja ausprobieren.

Antworten
  • Forum-Beiträge: 27

15.05.2015, 16:44:58 via Website

Ne des geht leider nicht.
hast du ne ahnung wie ich dann das Bild das ich aufgenommen hab verwenden kann?
also umwandeln und so meinem Intent anfügen kann

grüße

Antworten
  • Forum-Beiträge: 1.904

15.05.2015, 17:39:05 via App

Temporär speichern und den Pfad übergeben, danach das Bild löschen.

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.168

15.05.2015, 18:18:06 via Website

Das kommt darauf an wie du das Bild machst. Ich sende ein Intent an meine Kamera app, welche dann das Bild macht und mir den gespeicherten Pfad zurückgibt. Wenn es es genauso machst, dann kannst du ja einfach den Pfad verwenden den du im ActivityReult bekommst

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 27

15.05.2015, 18:35:41 via Website

Ich bin in die materie mit der Kamera nicht ganz eingedrungen. Ich hab nicht ganz verstanden wie das funktioniert.

also bislang ist es so das ich eine app habe mit 2 buttons und einigen Textviews.
Zuerst schreibt man in die Textviews etwas rein.
Button1 soll ein bild aufnehmen.
Button2 soll dann die eMail erstellen und das bild am ende hinzufügen.


Code:
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()){
case R.id.bSendeEmail:

        convertEditTextVarsIntoStringsAndYesThisIsAMethodWeCreated();
        String emailaddress[] = { emailAdresse };
        String message = "Hi Leute "
                + text

    //  emailIntent = new Intent(android.content.Intent.ACTION_SEND);
    //  emailIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    //  startActivityForResult(emailIntent, cameraData);
        emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, emailaddress);
        emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Urlaubsbild" );
        emailIntent.setType("plain/text");
        emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, message);
    //  emailIntent.putExtra(Intent.EXTRA_STREAM,image);
        //emailIntent.setType("image");
        //emailIntent.putExtra(android.content.Intent.E
        startActivity(emailIntent);

        break;

    case R.id.bAddUnterschrift:
        emailIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(emailIntent, cameraData);
        break;

}

}


Wann genau die onActivityResult() aufgerufen wird versteh ich auch nicht vorallem weil das ImageView iv nie verwendet wird.
aber so hab ich das in einem turorial gesehen


Code:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (resultCode==RESULT_OK){
Bundle extras = data.getExtras();
bmp = (Bitmap) extras.get("data");
iv.setImageBitmap(bmp);
// image = (Uri) extras.get("data");
// Uri imageUri = Uri.writeToParcel(out, bmp);
}
}


Falls jmd einen weg kennt das ich an meine eMail ein bild (das ich in dem Moment mit meinem handy aufnahmen möchte) der eMail anhängt bitte ich um ein Beispiel bzw eine verbesserung meines Codes.

PS: ich hab das auskommentierte mal drinne gelassen vielleicht hilfts ja jmd

Danke Leute

Antworten
  • Forum-Beiträge: 2.492

15.05.2015, 18:44:51 via Website

Die onActivityResult startet, sobald das Foto geschossen wurde, bzw. die Kamera App wieder zu ist.
Da hast du jetzt dein Bitmap bmp geholt.

Mit

public Uri getImageUri(Context inContext, Bitmap inImage) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
String path = Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
return Uri.parse(path);
}

Kannst du jetzt versuchen daraus eine Uri zu machen. Die Funktion mit Uri bmpUri = getImageUri(this, bmp);o.ä. aufrufen.

Die Uri kannst du dann an deine Email anhängen

emailIntent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
emailIntent1.putExtra(Intent.EXTRA_STREAM, bmpUri);
emailIntent1.setType("image/png");

Probiers mal aus.

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.168

15.05.2015, 18:45:08 via Website

!. Die Activity Reult stimmt irgendwie nicht.

  1. um die Kamera App zu starten muss du das aufrufen,hast du ja soweit ausch schon:

    Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    // request code

            startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);
    

CAMERA_PIC_REQUEST ist eine global definerte interger Konstante, da kannst du nehmen was du willst.

Und in der onActivityResult kannst du dann das machen:

 if( requestCode == CAMERA_PIC_REQUEST)
{
//  data.getExtras()
    Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
    ImageView image =(ImageView) findViewById(R.id.PhotoCaptured);
    image.setImageBitmap(thumbnail);
   Uri selectedImage = data.getData();
  String path =  getPath(selectedImage); //Dein Pfad zum Bild im Dateisystem
}

Jetzt brauchst du noch den pfad des bildes:

 public String getPath(Uri uri) 
    {
        String[] projection = { MediaStore.Images.Media.DATA };
        Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
        if (cursor == null) return null;
        int column_index =             cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        String s=cursor.getString(column_index);
        cursor.close();
        return s;
    }

Zum Nachlesen: http://stackoverflow.com/questions/3574313/using-intent-to-use-camera-in-android

LG

Edit: @Lars: Wenn man das so macht wie du hat man das Bild 2 mal gespeichert und man braucht File Write Permissions

— geändert am 15.05.2015, 18:46:08

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 27

15.05.2015, 19:11:02 via Website

Ich bin gerade am versuchen das umzusetzen von Pascal. Pascal nach was sucht man bei dem Aufruf?
weil er bei mir unter R.id.PhotoCaptured (natürlich) so nix findet

iv =(ImageView) findViewById(R.id.PhotoCaptured);

Da m Lars seins nach m foto machen leider abgestürzt ist

— geändert am 15.05.2015, 19:12:46

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.168

15.05.2015, 19:27:15 via Website

Ja du musst erst wieder einen Button n der XML definieren und diesen dann in deine OnClick einbinden. In dieser kannst du dann dein KameraIntent starten.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 27

15.05.2015, 19:41:43 via Website

Kann ichs dir noch mal kurz alles aufzeigen was ich bisher habe?
Weil wenn ichs auf m handy teste brichts direkt nach m foto machen ab.

ich hab in meiner xml 1 TextView und 2 buttons
Bei klick auf button1 wird

emailIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(emailIntent, CAMERA_PIC_REQUEST);
        break;

ausgeführt und anschließend, dass womit du mir gerade geholfen hast

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if( requestCode == CAMERA_PIC_REQUEST)
    {
    data.getExtras();
       bmp = (Bitmap) data.getExtras().get("data");
        iv =(ImageView) findViewById(R.id.bAddBild);
        iv.setImageBitmap(bmp);


      image = data.getData();
      path =  getPath(image); //Dein Pfad zum Bild im Dateisystem
    }

public String getPath(Uri uri) 
{
    String[] projection = { MediaStore.Images.Media.DATA };
    Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
    if (cursor == null) return null;
    int column_index =      cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    String s=cursor.getString(column_index);
    cursor.close();
    return s;
}

R.id.bAddBild verweisst jetzt auf den button 1 (ist das richtig?)
Warum stürzt es ab?

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.168

15.05.2015, 20:23:31 via Website

  1. Es ist richtig wenn dein Button in der xml die id BAddBild stehen hat.
  2. Das kann ch dir nciht sagen.
    Was sagt LogCat dazu?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 27

15.05.2015, 20:39:46 via Website

ich kann das programm nicht am rechner laufen lassen ich muss es immer aufs handy zeiehn muss irgendwie an der eMail funktion liegen

hm.... irgendwas muss es doch geben das es net abspürzt...

Antworten
  • Forum-Beiträge: 72

15.05.2015, 20:43:26 via Website

Besitzt du denn ein ImageView in deiner layout file?
Mit startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST) startest du die Camera App, welche ein Bild macht und den Pfad dann zurück gibt.
Das Bild wird automatisch gespeichert und der Path ist in den Extras gespeichert.
Du benötigst dafür kein ImageView.
In der Android Documentation gibt es sogar ein Beispiel dazu.

Antworten
  • Forum-Beiträge: 27

15.05.2015, 20:50:49 via Website

ich hab in meiner xml 1 TextView und 2 buttons

es ist ein imageView drinnen unten rechts im bild aber das verwende ich zu keinem augenblick.
meinst du das ändert was?
ich möchte dass das gemachte bild nur und ausschließlich in der email angebracht wird

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.168

15.05.2015, 20:54:52 via Website

Macht kein Unterschied, lass es erstmal so sonst verwirrt es dich nur.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten

Empfohlene Artikel