- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
起初您会想“等等,这个问题是重复的!”。继续阅读。
我正在尝试使用 Intent ACTION_SENDTO
(将电子邮件 URI 作为数据)以便让电子邮件应用程序响应只是。
(使用 ACTION_SEND
启动标准的“SEND”选择器,没有数据 URI,这意味着非电子邮件应用程序(例如 Google 云端硬盘)也会响应)。
我的问题是附件可以在所有设备上使用 ACTION_SEND
,但是 - 当使用 ACTION_SENDTO
时,只有一些设备可以正确附加文件。 Nexus 7 可用,但 Samsung Galaxy Tab 和 Acer Iconia 不。
您可以在下面并排看到不同的方法:
String email = getActivity().getResources().getString(R.string.supportEmail);
String subject = getActivity().getResources().getString(R.string.sFeedback);
subject = String.format(subject,
getActivity().getResources().getString(R.string.productName));
String content = getActivity().getResources().getString(R.string.whatFeedbackWouldYouLikeToProvide) + "\n\n" +
mMessage.getText().toString();
File toSend = new File(outfile);
if(toSend.exists()) {
Log.e("Feedback", "File path: " + toSend.getAbsolutePath());
Intent emailIntent = new Intent(android.content.Intent.ACTION_SENDTO);
emailIntent.setData(Uri.parse("mailto:" +email));
emailIntent.putExtra(android.content.Intent.EXTRA_STREAM, Uri.fromFile(toSend));
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, content);
/* Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.setType("message/rfc822");
emailIntent.putExtra(Intent.EXTRA_EMAIL , new String[]{email});
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(Intent.EXTRA_TEXT , content);
emailIntent.putExtra(Intent.EXTRA_STREAM , Uri.fromFile(toSend)); */
try {
startActivity(emailIntent);
} catch (ActivityNotFoundException anfe) {
Toast.makeText(getActivity(), getResources().getString(R.string.pleaseInstallAnEmailClientInOrderToSendUsFeedback), 8000).show();
}
}
您可以看到文件路径似乎不是问题所在,我在一些日志中添加了报告:
三星给予:
04-11 11:40:09.953: E/Feedback(6286): File path: /storage/sdcard0/logs.zip
Nexus 提供:
04-11 11:38:59.249: E/Feedback(12702): File path: /storage/emulated/0/logs.zip
(两者都基于 getExternalStorageDirectory()
以确保跨应用程序访问)。
有人知道为什么不一样吗?
最佳答案
我想到的唯一解决方案是以下一个。它是我在寻找完整答案时发现的其他一些内容的混合体。以下将仅显示电子邮件应用程序并允许包含附件。最重要的部分在这里找到:https://stackoverflow.com/a/8550043/4927659
ArrayList<Uri> uris = new ArrayList<>();
uris.add(Uri.parse("file://" + filepath));
//filepath is something like that: /mnt/sdcard/DCIM/DSC0001.JPG
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
"mailto", "example@gmail.com", null));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Mail subject");
List<ResolveInfo> resolveInfos = getPackageManager().queryIntentActivities(emailIntent, 0);
List<LabeledIntent> intents = new ArrayList<>();
for (ResolveInfo info : resolveInfos) {
Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE);
intent.setComponent(new ComponentName(info.activityInfo.packageName, info.activityInfo.name));
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"example@gmail.com"});
intent.putExtra(Intent.EXTRA_SUBJECT, "Mail subject");
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); //ArrayList<Uri> of attachment Uri's
intents.add(new LabeledIntent(intent, info.activityInfo.packageName, info.loadLabel(getPackageManager()), info.icon));
}
Intent chooser = Intent.createChooser(intents.remove(intents.size() - 1), "Send email with attachments...");
chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, intents.toArray(new LabeledIntent[intents.size()]));
startActivity(chooser);
关于android - 在某些设备上使用 SENDTO 发送带附件的电子邮件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15946297/
我在 udp 套接字客户端中调用 sendto,如下所示: if((num_w = sendto(cli_udp_sock, buffer, strlen(buffer), 0, (struct so
在 C 中使用 sendto() 时,我遇到了一个奇怪的问题。我有以下代码: struct sockaddr_in currSocket; int currSocketLength = sizeof(
我目前正在尝试在两台计算机之间设置 UDP 协议(protocol)。第一个是 Windows 驱动的计算机,第二个是带有 Raspbian 操作系统的 Raspberry Pi。 问题是我能够将信息
我正在为一个大学项目创建一个并发 UDP 套接字。客户端等待 stdin 命令,然后使用函数 child_job 创建一个新进程和一个新套接字。服务器接收来自客户端的命令,创建一个新进程来初始化新套接
我正在尝试在没有 tcp 有效负载的情况下进行客户端-服务器通信。我只是使用 tcp 的 header 作为有效负载字段,默认情况下为 20 字节。我刚刚意识到传输大文件时 CPU 使用率非常高,我尝
我尝试使用以下代码通过 UDP 发送,但得到了奇怪的结果。 if((sendto(newSocket, sendBuf, totalLength, 0, (SOCKADDR *)&sendAd
我有两个相互通信的程序。 客户端:先发送消息,然后监听回复。服务器:监听回复然后发送消息。 我能够完美地从客户端发送消息并在服务器中监听。但是当我尝试从服务器发送消息时出现问题。 struct hos
我目前正在处理一项网络作业。我们希望客户端自动获得分配给 TCP 套接字的 IP 和端口,并将 UDP 套接字绑定(bind)到与 TCP 套接字相同的地址和端口。这样,UDP 和 TCP 共享相同的
我有服务器和客户端通过 Windows 套接字发送/接收字符串。 客户端代码(发件人): string c = "Haha"; sprintf(temp.Buffer, c.c_str()); tem
您好,我有以下代码: if ((fd = socket(PF_INET, SOCK_DGRAM, 0)) sin_family = AF_INET; sin->sin_port = htons(
我是 python(3.3) 网络编程的新手,所以一开始我尝试编写一个基本的跟踪路由程序。其中一行代码是: send_socket.sendto(512, '', (dest_name, port))
在我最近的项目中,我需要使用UDP协议(protocol)来传输数据。如果我使用 size = s.sendto(data, (, )) 发送数据,UDP协议(protocol)会保证数据打包成一个U
我有 2 个程序在运行(程序 1、程序 2),它们都使用我初始化的套接字相互发送和接收 UDP 数据包。 我的问题是,如果我从 program1 的 TRANSMIT(TX) 套接字发送广播,prog
ioctl(socketFd_, SIOCOUTQ, &outstandingBytes); getsockopt(socketFd_, SOL_SOCKET, SO_SNDBUF, &sendBu
我正在编写一个通过套接字(从客户端到服务器)发送数据的应用程序。我观察到非常奇怪的行为:当我杀死服务器时,先发送然后杀死就像服务器存在一样。下一个返回 EPIPE。你能解释一下为什么吗? 这是来自客户
我有一个程序,它通过 UDP 接受坐标,移动一些设备,然后在工作完成时进行回复。 我似乎和这个人有同样的问题: Python sendto doesn't seem to send 我的代码在这里:
ssize_t sendto(int socket, const void *message, size_t length, int flags, const struct sockaddr *des
我如何以编程方式 (.net) 调用 Windows 资源管理器 SendTo 上下文菜单选项上的命令? 最佳答案 sendto 项是文件系统对象这一事实是一个实现细节,菜单由 sendto shel
我是 Python 的新手,正在尝试使用套接字将字节数组作为原始数据包发送。我的 IP 是 192.168.0.116,我要发送到的设备是 192.168.0.64。这个客户端设备是一个基于微 Con
在SendTo文件夹里加上一文件夹的快捷方式后,在右键发送到这个文件夹的是这些文件的一个副本,实际上是一个复制的过程,有时候我们只希望是快捷方式,那就得另想办法了。 把如下代码内容保存为sho
我是一名优秀的程序员,十分优秀!