Android Studio Email senden

Mango216

Newbie
Registriert
Juni 2020
Beiträge
2
Moin,
und zwar habe ich das Problem bei meiner App, dass ich eine Textdatei erstelle und diese im Internen Speicher speichere, aber es nicht hin bekomme die Datei als Anhang mit zu schicken. Jedes mal kann wird nur gesagt, dass das File leer sei, obwohl in der *.txt Datei etwas steht.
Wäre gut wenn mir einer helfen könnte, verzweifel den ganzen Tag schon dran.

Schönen Tag euch allen noch.
 
Zuletzt bearbeitet:
Ohne mich mit android groß auszukennen, klingt nach fehlender Berechtigung?
Hast du mal getestet, ob er bei com.example.bsg/files/bsg_notexisting.txt das selbe anzeigt?
Hast du eine Unterteilung drin die dafür sorgen könnte, dass du es an einer Stelle schreiben, an ner anderen aber nicht lesen kannst?
 
Java:
package com.example.bsg;

import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.media.Image;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.file.Files;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class Main2Activity extends Activity implements View.OnClickListener {

    Button btnLesen;
    Button btnFertig;
    ImageButton btnFertig2;
    TextView editNr;
    Spinner spinner;
    TextView editAusgabe;
    String text;
    String number;
    Spinner mySpinner;
    Calendar kalender = Calendar.getInstance();
    SimpleDateFormat datumsformat = new SimpleDateFormat("ddMMyyyy");
    SimpleDateFormat zeitformat = new SimpleDateFormat("HHmm");
    String value;
    String ausgabe = "";
    int i = 0;
    Context cxt = this;
    private static final int CAMERA_PERMISSION_CODE=101;

    private static final String FILE_NAME = "bsg.txt";

    EditText mEditText;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        mEditText = findViewById(R.id.editNr);




        mySpinner = (Spinner) findViewById(R.id.spinner);
        ArrayAdapter<String> Adapter = new ArrayAdapter<String>(Main2Activity.this, android.R.layout.simple_list_item_1,
                getResources().getStringArray(R.array.Sportstaette));
        Adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        mySpinner.setAdapter(Adapter);


        btnLesen = (Button) findViewById(R.id.btnLesen);
        btnLesen.setOnClickListener(this);

        btnFertig = (Button) findViewById(R.id.btnFertig);
        btnFertig.setOnClickListener(this);

        btnFertig2 = (ImageButton) findViewById(R.id.btnFertig2);
        btnFertig2.setOnClickListener(this);





        editNr = (TextView) findViewById(R.id.editNr);

        editAusgabe = (TextView) findViewById(R.id.editAusgabe);


    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btnLesen: {


                text = mySpinner.getSelectedItem().toString();

                editAusgabe.setText("");
                String text2 = editNr.getText().toString();
                if (text.equals("Kegeln")) {
                    number = "7";
                } else if (text.equals("H2o")) {
                    number = "2";
                } else if (text.equals("Friedenstal")) {
                    number = "4";
                }
                editAusgabe.setText(number + ";00" + text2 + "02" + datumsformat.format(kalender.getTime()) + zeitformat.format(kalender.getTime()));
                ausgabe = ausgabe + " \n" + (String) editAusgabe.getText();
                editNr.setText("");
                break;
            }

            case R.id.btnFertig: {

                String message = ausgabe;
                try {
                    FileOutputStream out = openFileOutput("bsg.txt", Context.MODE_PRIVATE);
                    out.write(message.getBytes());
                    out.close();
                    File dir = getFilesDir();

                    Toast.makeText(this, "Saved to"+getFilesDir()+"/"+FILE_NAME, Toast.LENGTH_SHORT).show();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                sendMail();
                editNr.setText("");
                break;


            }

            case R.id.btnFertig2 : {
                openScanner();
                break;
            }
        }
    }

    private void openScanner() {
        new IntentIntegrator(Main2Activity.this).initiateScan();


    }

    private void sendMail(){
        Intent i = new Intent(Intent.ACTION_SEND);
        i.setType("message/rfc822");
        i.putExtra(Intent.EXTRA_EMAIL  , new String[]{"max.mustermann@muster.de"});
        i.putExtra(Intent.EXTRA_SUBJECT, ""+datumsformat.format(kalender.getTime()));
        i.putExtra(Intent.EXTRA_TEXT   , ""+ausgabe);
        i.putExtra(Intent.EXTRA_STREAM, Uri.parse("/data/user/0/com.example.bsg/files/bsg.txt"));
        try {
            startActivity(Intent.createChooser(i, "Sende Mail..."));
        } catch (android.content.ActivityNotFoundException ex) {

        }

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode,data);
        if(result!=null){
            if(result.getContents()==null){
                Toast.makeText(this, "Blank", Toast.LENGTH_SHORT).show();
            }else{
                editNr.setText(result.getContents());
            }

        }else{
            Toast.makeText(this, "Blank", Toast.LENGTH_SHORT).show();
        }
    }

    private boolean checkPermission(String permission){
        int result = ContextCompat.checkSelfPermission( Main2Activity.this, permission);
        if(result == PackageManager.PERMISSION_GRANTED) {
            return true;
        }
        else{
            return false;
        }
    }

    private void requestPermission (String permission, int code){
        if(ActivityCompat.shouldShowRequestPermissionRationale(Main2Activity.this,permission)){

        }else{
            ActivityCompat.requestPermissions(Main2Activity.this,new String[] {permission},code);
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch(requestCode){
            case CAMERA_PERMISSION_CODE:
                if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                    openScanner();
                }
        }
    }

}
Ergänzung ()

ZuseZ3 schrieb:
Ohne mich mit android groß auszukennen, klingt nach fehlender Berechtigung?
Hast du mal getestet, ob er bei com.example.bsg/files/bsg_notexisting.txt das selbe anzeigt?
Hast du eine Unterteilung drin die dafür sorgen könnte, dass du es an einer Stelle schreiben, an ner anderen aber nicht lesen kannst?

Also ich habe in der AndroidManifest.xml die Berechtigung für den externen Speicher gegeben. Soweit ich weiß, braucht man das für den internen Speicher nicht, weil nur die App selber darauf zugreifen kann.

Code:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.bsg">


<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>




    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".Main2Activity"></activity>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
 
Zuletzt bearbeitet:
bitte keine absoluten pfade benutzen. android hat hierfuer 'ne ganz passable loesung. sprich: mit zeile 166 machst du's dir mglw. etwas zu leicht. permissions koennten auch das problem sein.
 
Zurück
Oben