0

SDにファイルを書き込みます。ASTROアプリやGmailアプリ、Yahooアプリを使ってファイルを見て、そこから添付することもできるので、ファイルが問題ないことはわかっていますが、自分のアプリからファイルを添付しようとすると、事態はまったく異なります. gmail または yahoo アプリを選択すると、ファイルを読み取ることができません。しかし、デフォルトのアプリを選択すると、メールはファイルが添付された状態で正しく送信されます。

これが私のコードです。ありがとう!!

AndroidManifest uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" 内

ファイルを作成する場所

File ruta_sd = Environment.getExternalStorageDirectory();
File f;

// Creo la carpeta;
File folder = new File(ruta_sd.getAbsolutePath() + "/Torno");
folder.mkdirs();

f = new File(ruta_sd.getAbsolutePath() + "/Torno/","Torno.xml");

// Just trying
f.canRead();

OutputStreamWriter fout = new OutputStreamWriter(new FileOutputStream(f));
fout.write(c); <-- c is a String in xml format

// Just trying
fout.flush();

fout.close(); 

さて、取り付けてみたところ

String ruta = Environment.getExternalStorageDirectory().getPath() + "/Torno/Torno.xml";
Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.setType(getMimeType(ruta));
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(ruta));
sendIntent.putExtra(Intent.EXTRA_SUBJECT, "el tema");
sendIntent.putExtra(Intent.EXTRA_TEXT, "el cuerpo del mensaje");

// Just trying
sendIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

startActivity(Intent.createChooser(sendIntent, "Title:"));`
4

2 に答える 2

1

おそらくあなたのパスに何か問題があります。変化する:

String ruta = Environment.getExternalStorageDirectory().getPath() + "/Torno/Torno.xml";
...
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(ruta));

に:

File ruta = new File(Environment.getExternalStorageDirectory(), "/Torno/Torno.xml");
...
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(ruta));

そして、それが役立つかどうかを確認してください(を取り除くとともにFLAG_GRANT_READ_URI_PERMISSION、おそらく を試してみてくださいsync())。

于 2013-10-02T18:04:18.987 に答える
0

最後に、それは働いた!!! 何が起こっていたのかよくわかりません。アプリをインストールせずにEclipseを使用して携帯電話をエミュレーターとして使用しようとしましたが、例外のe.getMessage()は次のとおりでした:「/ storage/sdcard/Torno/Torno.xml: open failed: ENOENT (No such file or directory)」

最後に、アプリをインストールしようと思ったのですが、うまくいきました!! これは現在のコードです:

btnAceptar.setOnClickListener(new OnClickListener() {

                @Override 
             public void onClick(View arg0) { 
                     // TODO Auto-generated method stub 
                     String contenido="";

                     File fichero = null;

                   if (rdXML.isChecked()){ 
                          contenido = creaFichero(1,Integer.parseInt("" + txtAno.getText()),Integer.parseInt("" + txtMes.getText()));
                          fichero = grabarFichero(contenido, "Torno.xml");
                   } 
                   else{ 
                          contenido = creaFichero(2,Integer.parseInt("" + txtAno.getText()),Integer.parseInt("" + txtMes.getText()));
                          fichero = grabarFichero(contenido, "Torno.txt");
                   } 

                   if (fichero==null){ 
                           Toast toast = Toast.makeText(getApplicationContext(),"No hay datos para ese mes !!", Toast.LENGTH_LONG);
                           toast.show(); 
                   } 
                   else{
                       Intent sendIntent = new Intent(Intent.ACTION_SEND);
                       sendIntent.setType(getMimeType(fichero.getAbsolutePath()));

                       sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(fichero));
                       sendIntent.putExtra(Intent.EXTRA_SUBJECT, "el tema");
                       sendIntent.putExtra(Intent.EXTRA_TEXT, "el cuerpo del mensaje");
                       startActivity(Intent.createChooser(sendIntent, "Title:"));
                   } 
           } 
   });

public static String getMimeType(String url){
    String type = null;
    String extension = MimeTypeMap.getFileExtensionFromUrl(url);
    if (extension != null) {
        MimeTypeMap mime = MimeTypeMap.getSingleton();
        type = mime.getMimeTypeFromExtension(extension);
    }
    return type;
}

private File grabarFichero(String c,String n){

    File file = null;

    try {
        // Creo la carpeta;
        File folder = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Torno");
        folder.mkdirs();

        file = new File(Environment.getExternalStorageDirectory() + "/Torno", n);
        OutputStreamWriter outw = new OutputStreamWriter(new FileOutputStream(file));
        outw.write(c);
        outw.close();
    }
    catch (Exception e) {} 

    return file;
}

ありがとう!!!

于 2013-10-03T12:53:31.987 に答える