0

嗨,我有一个数字列表。

ArrayList<String> numbers;

我想一起使用 Intent 向所有这些号码发送消息。我用电子邮件做到了这一点,例如向多人发送电子邮件,如何处理消息?

public static void send(Context ctx, String[] addy, String subject,
        String body,File attachment) {
    try {
        Intent sendIntent = new Intent(Intent.ACTION_VIEW);
        sendIntent.setType("vnd.android-dir/mms-sms");
        sendIntent.putExtra(android.content.Intent.EXTRA_PHONE_NUMBER,
                addy);
        sendIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
        sendIntent.putExtra(android.content.Intent.EXTRA_TEXT, body);
        //sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(attachment));
        ctx.startActivity(Intent.createChooser(sendIntent,
                "Send via which Application?"));
    } catch (Exception e) {
        Toast.makeText(ctx, "No activity was found to handle this action",
                Toast.LENGTH_SHORT).show();
    }
}

这是打开消息应用程序,但存储在 addy 中的号码未列在发送到列的消息中

4

2 回答 2

1

我用电子邮件做到了这一点,比如向多人发送电子邮件

假设您通过操作使用了第三方应用程序Intent,这是否有效取决于第三方应用程序的作者。您无法知道数百个 Android 电子邮件应用程序中的每一个是否都支持指定多个地址,除非您全部测试它们。

发消息怎么办?

您一次发送一个。

您的代码很糟糕,使用未记录的 MIME 类型,不一定会在所有设备上得到尊重,但EXTRA_PHONE_NUMBER应该是 a String,而不是String[].

ACTION_SEND,或ACTION_SENDTO使用smsto:地址,同样只能保证支持单个号码,并且会给您带来与以这种方式发送电子邮件相同的问题。

SmsManager有直接发送短信的方法;他们也一次只支持一个电​​话号码。

于 2013-10-03T11:06:37.473 回答
1

供 Java 开发人员使用

public static void send(Context ctx, String[] address, String subject,
                        String body, File attachment) {

    List<String> mylist = Arrays.asList(address);
    Intent sendIntent = new Intent(Intent.ACTION_VIEW);

    StringJoiner sj = new StringJoiner(";", "smsto:", "");
    mylist.forEach(sj::add);
    sendIntent.setData(Uri.parse(sj.toString()));

    sendIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
    sendIntent.putExtra(android.content.Intent.EXTRA_TEXT, body);

    if(sendIntent.resolveActivity(ctx.getPackageManager()) != null) {
        ctx.startActivity(sendIntent);
    }
}

对于那些使用 kotlin 的人,请使用

fun send(ctx: Context, address: Array<String>, subject: String, body: String, attachment: File) {

    val sendIntent = Intent(Intent.ACTION_VIEW)

    val data = address.toList().joinToString(";", "smsto:")

    sendIntent.data = Uri.parse(data)
    sendIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject)
    sendIntent.putExtra(android.content.Intent.EXTRA_TEXT, body)

    if(sendIntent.resolveActivity(ctx.packageManager) != null) {
        ctx.startActivity(sendIntent)
    }
}
于 2020-06-02T15:17:27.163 回答