如何在Xamarin Android中无需点击发送按钮自动发送短信
自动发送短信实现方案
你当前使用的Sms.ComposeAsync是Xamarin.Essentials封装的系统短信界面调起API,设计定位就是生成短信草稿后跳转到系统短信页,必须用户手动确认才能发送,无法通过这个API实现自动发送逻辑。你可以通过编写平台特定的原生代码实现需求,具体方案如下:
第一步:共享项目定义跨平台调用接口
在公共代码项目中新增ISmsSender接口,用于跨平台调用:
public interface ISmsSender { Task SendSmsAsync(string phoneNumber, string content); }
第二步:Android端实现自动发送逻辑
- 权限配置:在Android项目的
AndroidManifest.xml中添加发送短信权限:
安卓6.0及以上版本需要额外在代码中动态申请<uses-permission android:name="android.permission.SEND_SMS" />SEND_SMS权限,仅授予短信读写权限无法满足发送要求。 - 接口实现:在Android项目中新增接口实现类:
[assembly: Dependency(typeof(SmsSenderAndroid))] namespace 你的应用命名空间.Droid { public class SmsSenderAndroid : ISmsSender { public Task SendSmsAsync(string phoneNumber, string content) { SmsManager.Default.SendTextMessage(phoneNumber, null, content, null, null); return Task.CompletedTask; } } }
注意:部分安卓定制系统会对第三方应用自动发送短信做风险拦截,即使有权限也可能发送失败,需要引导用户在系统安全设置中给应用开启自动发短信白名单权限。
第三步:iOS端限制说明
受苹果系统隐私政策限制,iOS不允许任何第三方应用后台自动发送短信,所有短信发送操作必须调起系统的短信发送页面,由用户手动点击发送才能完成,iOS端没有合规的自动发送短信实现方案。
第四步:跨平台调用
在需要发送短信的公共代码位置,直接调用依赖服务即可:
var smsSender = DependencyService.Get<ISmsSender>(); await smsSender.SendSmsAsync(Mobile_Number, SMS_Message);
内容的提问来源于stack exchange,提问作者Ibery Wong
相关产品推荐
相关产品推荐

