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_SEND和ACTION_SENDTO两人都没有工作,我也试过了sendIntent.setType("vnd.android-dir/mms-sms");,又没有什么工作.
我在stackoverflow 回答1和回答2中寻找了几个答案,但两个答案都没有处理我的要求.
我想做什么:
对于主持人:这不是一个重复的问题,因为问题,并没有问完全相同的事情,这里需要发送没有电话号码的短信,没有问题和答案处理.
nhe*_*nn1 78
我通过执行以下操作附加了解决问题的代码:
这是代码:
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 次 |
| 最近记录: |