代码之家  ›  专栏  ›  技术社区  ›  Denis

Android Studio,Genymotion-发送带有txt文件附件的电子邮件:显示在gmail中,但不发送

  •  -1
  • Denis  · 技术社区  · 9 年前

    Java、Android Studio、Genymotion。

    各位同事,

    我正在从android应用程序发送带有txt附件的电子邮件(Intent)。Txt文件是应用程序先前创建的。 在gmail客户端的genymotion中,这个附件(文件大约1Kb)正在显示,但真正的邮件没有附件。

    代码段:

        // file creating 
        ...
            final String FILENAME = "file";
        ...
    
        try {
                // отрываем поток для записи
                BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(openFileOutput(FILENAME, MODE_PRIVATE)));
    
                // writing any data
    
                bw.write ("\n");
    ...
                Log.d(LOG_TAG, "file is created");
    
    
                bw.close();
    }
    
    // sending email with intent 
    
        public void sendEmailwithMailClient (){
    
            Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); 
    // sending email
    
            emailIntent.setType("plain/text"); 
            emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{"example@rambler.ru"}); 
            emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, getString(R.string.app_name)); 
            emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Hello!");
    
    
            File file = new File(getFilesDir(), FILENAME);
    
     //       if (!file.exists() || !file.canRead()) {
     //           return;}
    
    
    
            Uri uri = Uri.fromFile(file);
            emailIntent.putExtra(Intent.EXTRA_STREAM, uri);
    
            startActivity(Intent.createChooser(emailIntent, "Pick an Email provider"));
    
    
        }
    

    我是否通过getFilesDir()和FILENAME正确定义了附件的Uri? 为什么电子邮件在发送过程中会丢失附件?这是《源语》的问题,或者实际上我没有在邮件中附加任何内容,而且在《源语”中附加的显示只是假的?

    提前谢谢!

    1 回复  |  直到 9 年前
        1
  •  1
  •   Sanjeet A    9 年前

    无法从应用程序专用存储中附加文件。 您需要将其保存到外部存储,然后连接。

    File file = new File(getFilesDir(), FILENAME);
    

    正在中创建文件 /data/data/package_name/files 目录 其他应用程序无法访问。 如果您仍然希望共享应用程序专用存储中的文件,则需要创建 ContentProvider .