Android KitKat 4.4环聊无法处理发送短信意图

nhe*_*nn1 32 android android-intent hangout android-4.4-kitkat

用于发送完美工作的短信的代码,直到Android 4.3(Jelly Bean)自4.4以来停止工作(KitKat)

我只是为用户准备了短信,但他需要选择要发送的号码

我使用的代码是:

Intent sendIntent = new Intent(Intent.ACTION_VIEW);         
    sendIntent.setData(Uri.parse("sms:"));
    sendIntent.putExtra("sms_body", smsText);

    activity.startActivity(sendIntent);
Run Code Online (Sandbox Code Playgroud)

由于它停止工作我想也是ACTION_SENDACTION_SENDTO两人都没有工作,我也试过了sendIntent.setType("vnd.android-dir/mms-sms");,又没有什么工作.

我在stackoverflow 回答1回答2中寻找了几个答案,但两个答案都没有处理我的要求.

我想做什么:

  • 仅使用短信应用发送短信,而不是所有提供发送意图的应用
  • 为用户准备文本
  • 让用户选择要发送消息的电话号码

对于主持人:这不是一个重复的问题,因为问题,并没有问完全相同的事情,这里需要发送没有电话号码的短信,没有问题和答案处理.

nhe*_*nn1 78

我通过执行以下操作附加了解决问题的代码:

  • 检查操作系统版本
  • 如果是旧版本(在KitKat之前),请使用旧方法
  • 如果是新API,请检查默认的sms包.如果有,请将其设置为包,否则,让用户选择共享应用.

这是代码:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) //At least KitKat
    {
        String defaultSmsPackageName = Telephony.Sms.getDefaultSmsPackage(activity); //Need to change the build to API 19

        Intent sendIntent = new Intent(Intent.ACTION_SEND);
        sendIntent.setType("text/plain");
        sendIntent.putExtra(Intent.EXTRA_TEXT, smsText);

        if (defaultSmsPackageName != null)//Can be null in case that there is no default, then the user would be able to choose any app that support this intent.
        {
            sendIntent.setPackage(defaultSmsPackageName);
        }
        activity.startActivity(sendIntent);

    }
    else //For early versions, do what worked for you before.
    {
        Intent sendIntent = new Intent(Intent.ACTION_VIEW);
        sendIntent.setData(Uri.parse("sms:"));
        sendIntent.putExtra("sms_body", smsText);
        activity.startActivity(sendIntent);
    }
Run Code Online (Sandbox Code Playgroud)


Rob*_* B. 19

这个应该适用于所有Android版本和所有短信应用程序(包括环聊).

public static boolean sendSms(Context context, String text, String number) {
    return sendSms(context, text, Collections.singletonList(number));
}

public static boolean sendSms(Context context, String text, List<String> numbers) {

    String numbersStr = TextUtils.join(",", numbers);

    Uri uri = Uri.parse("sms:" + numbersStr);

    Intent intent = new Intent();
    intent.setData(uri);
    intent.putExtra(Intent.EXTRA_TEXT, text);
    intent.putExtra("sms_body", text);
    intent.putExtra("address", numbersStr);

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        intent.setAction(Intent.ACTION_SENDTO);
        String defaultSmsPackageName = Telephony.Sms.getDefaultSmsPackage(context);
        if(defaultSmsPackageName != null) {
            intent.setPackage(defaultSmsPackageName);
        }
    } else {
        intent.setAction(Intent.ACTION_VIEW);
        intent.setType("vnd.android-dir/mms-sms");
    }

    try {
        context.startActivity(intent);
    } catch (ActivityNotFoundException e) {
        e.printStackTrace();
        return false;
    }

    return true;
}
Run Code Online (Sandbox Code Playgroud)


joh*_*n18 17

结合提出的解决方案,以下提供预设接收者文本.

Intent intent;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) // Android 4.4 and up
{
    String defaultSmsPackageName = Telephony.Sms.getDefaultSmsPackage(activity);

    intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:" + Uri.encode(toContact.toString())));
    intent.putExtra("sms_body", text);

    if (defaultSmsPackageName != null) // Can be null in case that there is no default, then the user would be able to choose any app that supports this intent.
    {
        intent.setPackage(defaultSmsPackageName);
    }
}
else
{
    intent = new Intent(Intent.ACTION_VIEW);
    intent.setType("vnd.android-dir/mms-sms");
    intent.putExtra("address", toContact.toString());
    intent.putExtra("sms_body", text);
}
activity.startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

剩下的唯一问题是你最终会遇到环聊(Nexus 5),你可能需要多次按"后退"才能有效取消短信.


归档时间:

查看次数:

17619 次

最近记录:

11 年,4 月 前