如何在Android设备上发送自定义发信人短信
在Android设备上发送短信时,默认情况下会使用设备的SIM卡号码作为发信人,在某些特定场景下,例如应用程序需要发送通知或验证信息,可能需要设置一个自定义的发信人名称,本文将详细介绍如何在Android应用中实现这一功能。
1. 准备工作
1 环境配置
开发环境:Android Studio
目标平台:Android 5.0 (API Level 21) 及以上版本
所需权限:SEND_SMS
2 添加权限
在AndroidManifest.xml
文件中添加发送短信所需的权限:
<uses-permission android:name="android.permission.SEND_SMS"/>
2. 创建短信发送功能
1 创建SMS Manager实例
需要获取系统的SmsManager
实例,这是发送短信的核心类。
import android.telephony.SmsManager; public class SmsSender { private SmsManager smsManager; public SmsSender() { smsManager = SmsManager.getDefault(); } }
2 定义发送方法
定义一个方法来发送短信,这个方法将接收目标电话号码、短信内容和发信人名称作为参数。
public void sendSms(String destinationAddress, String message, String senderName) { // 分割长短信 ArrayList<String> parts = smsManager.divideMessage(message); String sender = null; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { sender = "+" + senderName; // Android 6.0+ 支持自定义发信人 } // 遍历所有部分并发送 for (String part : parts) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { smsManager.sendTextMessage(destinationAddress, sender, part, null, null); } else { smsManager.sendTextMessage(destinationAddress, null, part, null, null); } } }
3. 处理长短信分割
1 分割长短信
如果短信内容超过160个字符(或其他限制),则需要将其分割成多个部分。SmsManager
提供了divideMessage
方法来实现这一点。
ArrayList<String> parts = smsManager.divideMessage(message);
2 发送每个部分
遍历分割后的短信部分,并逐个发送。
for (String part : parts) { smsManager.sendTextMessage(destinationAddress, sender, part, null, null); }
4. 示例代码
以下是一个完整的示例代码,展示了如何创建一个SmsSender
类并使用它发送短信。
import android.os.Build; import android.telephony.SmsManager; import java.util.ArrayList; public class SmsSender { private SmsManager smsManager; public SmsSender() { smsManager = SmsManager.getDefault(); } public void sendSms(String destinationAddress, String message, String senderName) { ArrayList<String> parts = smsManager.divideMessage(message); String sender = null; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { sender = "+" + senderName; // Android 6.0+ 支持自定义发信人 } for (String part : parts) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { smsManager.sendTextMessage(destinationAddress, sender, part, null, null); } else { smsManager.sendTextMessage(destinationAddress, null, part, null, null); } } } }
5. 测试发送短信功能
为了测试上述功能,可以编写一个简单的活动(Activity)来调用SmsSender
并发送短信。
import android.os.Bundle; import android.widget.Button; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button sendButton = findViewById(R.id.sendButton); sendButton.setOnClickListener(v -> { String destinationAddress = "1234567890"; // 替换为目标电话号码 String message = "Hello, this is a test message!"; String senderName = "MyCustomSender"; SmsSender smsSender = new SmsSender(); smsSender.sendSms(destinationAddress, message, senderName); }); } }
6. 注意事项
用户权限:从Android 6.0(API Level 23)开始,用户需要在运行时授予发送短信的权限,确保在应用中正确处理权限请求。
运营商限制:某些运营商可能不允许自定义发信人名称,在这种情况下,即使设置了自定义发信人,实际发送的短信仍然会显示SIM卡号码。
兼容性问题:自定义发信人名称的功能仅在Android 6.0及以上版本中受支持,对于更早版本的Android设备,此功能不可用。
通过以上步骤,您可以在Android应用中实现发送带有自定义发信人名称的短信功能,这在某些特定应用场景下非常有用,例如企业通知、验证码发送等,希望本文对您有所帮助!
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1264212.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复