【问题标题】:Trying to attach .txt inside app but fails尝试在应用程序内附加 .txt 但失败
【发布时间】:2017-03-12 11:09:10
【问题描述】:

我正在使用 android studio 开发一个 android 移动应用程序,用户可以在其中发送 .txt 作为附件 ........它正在发送邮件但没有附件

电子邮件代码 .... 如果需要更改,请告诉我............ 当我尝试发送时没有显示附件 toast ......我认为这意味着我提供了正确的路径

      public void Send(View view){

    Uri docUri=Uri.parse("android.resource://com.example.shaz.geotag/files/GeotagDatabase.txt");
    intent =new Intent(Intent.ACTION_SEND);
    if(docUri!=null){
    intent.putExtra(Intent.EXTRA_STREAM,docUri);}
    else {
        Toast.makeText(this, "No attachment", Toast.LENGTH_LONG).show();
    }
    intent.setType("message/rfc822");
    intent.setData(Uri.parse("mailto:"));
    intent.setType("text/plain");
    intent.putExtra(Intent.EXTRA_TEXT,"Attached GeotagDatabase.txt");
    chooser=Intent.createChooser(intent,"Sending Email....");
    startActivity(chooser);
}

生成 .txt 的代码
生成 .txt 时,它显示路径为 txt/data/user/0/com.example.shaz.geotag/files/GeotagDatabase.txt

 public String Attach()
{
    SQLiteDatabase db =this.getWritableDatabase();
    String[] columns={CoL_1, CoL_2, CoL_3};
    Cursor cursor;
    cursor = db.query(TABLE_NAME,columns,null,null,null,null,null);
    StringBuffer stringBuffer= new StringBuffer();
    File file =null;
    FileOutputStream fileOutputStream=null;

    while (cursor.moveToNext()){
        int index1= cursor.getColumnIndex(CoL_1);
        int index2= cursor.getColumnIndex(CoL_2);
        int index3= cursor.getColumnIndex(CoL_3);
        int id =cursor.getInt(index1);
        String latitude =cursor.getString(index2);
        String longitude =cursor.getString(index3);
        try{
            file=c.getFilesDir();
            fileOutputStream = c.openFileOutput("GeotagDatabase.txt", Context.MODE_PRIVATE);
            String text1= Integer.toString(id)+" ";
            String text2=latitude+" ";
            String text3=longitude+"\n";
            fileOutputStream.write(text1.getBytes());
            fileOutputStream.write(text2.getBytes());
            fileOutputStream.write(text3.getBytes());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        finally {
            try {
                 fileOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        Toast.makeText(c, "ADDED to txt"+file+"/GeotagDatabase.txt", Toast.LENGTH_LONG).show();
     stringBuffer.append(id+" "+latitude+" "+longitude+"\n");
    }
    return stringBuffer.toString();

}

【问题讨论】:

    标签: android email-attachments


    【解决方案1】:

    GeotagDatabase.txt 不会被共享,因为它保存在只有您的应用程序可以访问的内部存储中。

    https://developer.android.com/guide/topics/data/data-storage.html#filesInternal

    您可以将其保存在外部存储区域或使用FileProvider

    【讨论】:

    【解决方案2】:

    您无法访问应用文件 所以我把文件写在外部存储中 现在我可以将其作为附件发送 代码的变化是:

     public String Attach()
    {
        SQLiteDatabase db =this.getWritableDatabase();
        String[] columns={CoL_1, CoL_2, CoL_3};
        Cursor cursor;
        cursor = db.query(TABLE_NAME,columns,null,null,null,null,null);
        StringBuffer stringBuffer= new StringBuffer();
        fileName= myFile+"." +"txt";
       // writing file on external storage
        try {
            File sdCard = Environment.getExternalStorageDirectory();
            File dir = new File(sdCard.getAbsolutePath() + "/Files");
            dir.mkdirs();
            if (dir.isDirectory()) {
                String[] children = dir.list();
                for (int i = 0; i < children.length; i++) {
                    new File(dir, children[i]).delete();
                }
            }
            file = new File(dir, fileName);
        }
        catch (Exception e){}
    
    
    
        while (cursor.moveToNext()) {
            int index1 = cursor.getColumnIndex(CoL_1);
            int index2 = cursor.getColumnIndex(CoL_2);
            int index3 = cursor.getColumnIndex(CoL_3);
            int id = cursor.getInt(index1);
            String latitude = cursor.getString(index2);
            String longitude = cursor.getString(index3);
    
            try {
                fileOutputStream = new FileOutputStream(file);
                fpath = file.toString();
    
                String text1 = Integer.toString(id) + " ";
                String text2 = latitude + " ";
                String text3 = longitude + "\n";
    
                fileOutputStream.write(text1.getBytes());
                fileOutputStream.write(text2.getBytes());
                fileOutputStream.write(text3.getBytes());
                fileOutputStream.flush();
                fileOutputStream.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    fileOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            Toast.makeText(c, "Add to" + fpath, Toast.LENGTH_LONG).show();
    
            stringBuffer.append(id + " " + latitude + " " + longitude + "\n");
        }
    
    
        return stringBuffer.toString();
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-28
      • 1970-01-01
      相关资源
      最近更新 更多