我正在尝试让我的应用程序通过邮件,电报或任何其他可以管理常规文件的应用程序发送二进制文件。
代码:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.circuit_menu, menu);
MenuItem item = menu.findItem(R.id.menu_item_share);
// Fetch and store ShareActionProvider
ShareActionProvider mShareActionProvider = (ShareActionProvider) item.getActionProvider();
Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("*/*");
shareIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
File f = new File(getFilesDir(),circuit.getName() + ".obj");
if(f.exists()){
Log.d("FILE",f.getAbsolutePath());//Checking
}
Uri uri = Uri.parse(f.getAbsolutePath());
Log.d("URI",uri.toString());//Checking
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
Intent.createChooser(shareIntent, "Share via");
mShareActionProvider.setShareIntent(shareIntent);
return true;
}
当我选择邮件应用程序时,例如,发送它,它告诉我“无法添加此附件”。为什么?
答案 0 :(得分:0)
File f = new File(getFilesDir(),circuit.getName() + ".obj");
getFilesDir()返回应用程序私有目录。没有其他应用程序可以访问此目录。电子邮件应用程序也无法访问它。
您必须将文件复制到公共目录,以便电子邮件应用程序可以访问它。使用Environment.getExternalStorageDirectory()获取公共目录。您的电话将如下所示:
File f = new File(Environment.getExternalStorageDirectory(),circuit.getName() + ".obj");
答案 1 :(得分:-1)
这是我写的方法,它通常用于图像和二进制附件。我正在使用Android Jelly Beans。请参阅下面的代码。可能是您丢失邮件所需的额外字段。
public static void shareImagesIntent(ArrayList<Uri> imageUris,Context context,String SubjectTitle,String MessageBody)
{
if(imageUris == null || imageUris.size()==0)
{
return;
}
Intent shareIntent = new Intent();
Uri uri = imageUris.get(0);
shareIntent.putExtra(Intent.EXTRA_TEXT,MessageBody);
shareIntent.putExtra(Intent.EXTRA_TITLE, SubjectTitle);
shareIntent.putExtra(Intent.EXTRA_SUBJECT, SubjectTitle);
shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE);
shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);
shareIntent.setType("image/*");
context.startActivity(Intent.createChooser(shareIntent, MessageBody));
return;
}