2015-04-07 58 views
0

所以,當我點擊這個按鈕,我想發送文本到電子郵件,但是當我發送它的附件不會附帶它「無法發送附件」。內容提供商「無法發送附件」

因此,我可以發送電子郵件到其他電子郵件,但他們不會只獲得附件和電子郵件。

我能做些什麼來獲得附件的工作?

import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.content.Intent; 
import android.net.Uri; 
import android.support.v4.app.ShareCompat; 
import android.support.v4.content.FileProvider; 
import android.text.TextUtils; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.StringReader; 

public class MainActivity extends ActionBarActivity 
     implements View.OnClickListener { 
    private EditText editText; 
    private Button buttonSaveAndShare; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     this.setContentView(R.layout.activity_main); 
     this.editText = (EditText) this.findViewById(R.id.editText); 
     this.buttonSaveAndShare = (Button) this.findViewById(R.id.button_save_and_share); 
     this.buttonSaveAndShare.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View inView) { 
     { 
      final String text = this.editText.getText().toString(); 
      if (!TextUtils.isEmpty(text))//Returns true if the string is null or 0-length 
      { 

       File file = new File(getCacheDir(), "documents.txt"); 
       writeStringToFile(text, file); 
       shareDocument(file); 

      } 
     } 
    } 

    public void shareDocument(File inFile) { 

     final Uri uri = FileProvider.getUriForFile(this, "com.visuals.mobile.filep", inFile); 
     ShareCompat.IntentBuilder intentBuilder = ShareCompat.IntentBuilder.from(this); 
     intentBuilder.setType("text/plain"); 
     intentBuilder.setSubject(this.getString(R.string.share_subject)); 
     intentBuilder.setStream(uri); 
     intentBuilder.setChooserTitle(R.string.share_title); 
     intentBuilder.createChooserIntent(); 
     Intent intent = intentBuilder.getIntent(); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 
     intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 

     this.startActivity(intent); 
    } 


    public boolean writeStringToFile(final String inData, final File toFile) { 
     if(toFile != null){ 
      final File parentDir = toFile.getParentFile(); 

      if((parentDir != null) && !parentDir.exists()){ 
       parentDir.mkdirs(); 
      } 
     } 



     if (toFile == null) return false; 

     BufferedWriter output = null; 
     BufferedReader input = null; 
     try { 
      input = new BufferedReader(new StringReader(inData)); 
      output = new BufferedWriter(new FileWriter(toFile)); 
      int n = 0; 
      while (n != -1) { 
       n = input.read(); 
       output.write(n); 
      } 

      return true; 
     } catch (Exception e) { 
     } finally { 
      try { 

       input.close(); 
       output.close(); 

      } catch (IOException e) { 
      } 

     } 
     return false; 
    } 

} 
+0

您可以嘗試在我的'LegacyCompatCursorWrapper',這有助於'不兼容的客戶FileProvider'交易混合。該類是[我的CWAC提供程序庫](https://github.com/commonsguy/cwac-provider)的一部分,[這裏是示例應用程序](https://github.com/commonsguy/cw-omnibus/tree/master/ContentProvider/V4FileProvider)說明它的使用。只是子類'FileProvider',重寫'query()'以使用'LegacyCompatCursorWrapper',然後在''元素中註冊你的類。如果這沒有幫助,請考慮發佈與您的問題相關的Java堆棧跟蹤。 – CommonsWare

回答

0

哇解決它通過改變

File file = new File(getCacheDir(), "documents.txt"); 

File file = new File(getCacheDir(), "documents/share.txt");