【问题标题】:Content provider "couldnt send attachment"内容提供商“无法发送附件”
【发布时间】:2015-10-29 14:23:52
【问题描述】:

所以当我点击这个按钮时,我想将文本发送到电子邮件,但是当我发送它时,附件不会附带它“无法发送附件”。

所以我可以将电子邮件发送到其他电子邮件,但他们不会只收到附件和电子邮件。

我该怎么做才能使附件正常工作?

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;
    }

}

【问题讨论】:

  • 您可以尝试融入我的LegacyCompatCursorWrapper,这有助于FileProvider 处理不兼容的客户端。该类是my CWAC-Provider library 的一部分,here is a sample app 说明了它的使用。只需子类FileProvider,覆盖query() 以使用LegacyCompatCursorWrapper,然后在<provider> 元素中注册您的类。如果这没有帮助,请考虑发布与您的问题相关的 Java 堆栈跟踪。

标签: java android android-contentprovider


【解决方案1】:

哇通过改变解决了它

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

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

【讨论】:

    猜你喜欢
    • 2021-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多