【发布时间】: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