在我的项目中,我想阅读特定的短信,并在通用Windows Phone 10中删除该信息。
在清单文件中使用聊天消息访问是否可行?
答案 0 :(得分:1)
您可以使用聊天消息api访问设备的短信。使用ChatMessageStore,您将能够创建/删除消息,但它可能不是您真正想要的。聊天消息api更适用于创建WhatsApp等消息传递应用程序。
如果您要接收的消息是面向应用的消息,您可以在它到达ChatMessageStore之前拦截它。通用Windows平台公开了一个新的(受限制的)API,用于在消息使用自定义过滤规则到达商店之前拦截消息。您可以查看此sample。它使用最新的SmsMessageReceivedTrigger后台任务触发器。
由于此API受到限制,您必须先要求Microsoft使用自动化才能将此类应用发布到商店
以下是有关如何将SmsMessageReceivedTrigger与后台任务入口点和注册
一起使用的示例public async void Run(IBackgroundTaskInstance taskInstance)
{
var smsDetails = taskInstance.TriggerDetails as SmsMessageReceivedTriggerDetails;
// consume sms
var from = smsDetails.TextMessage.From;
var body = smsDetails.TextMessage.Body;
// we acknoledege the reception of the message
smsDetails.Accept();
}
static IBackgroundTaskRegistration Register()
{
var taskNameAndEntryPoint = typeof(SmsInterceptor).FullName;
var task = BackgroundTaskRegistration.AllTasks.Values.FirstOrDefault(x => x.Name == taskNameAndEntryPoint);
if(task != null) return task;
var filterRule = new SmsFilterRule(SmsMessageType.App);
filterRule.SenderNumbers.Add("111111111");
filterRule.SenderNumbers.Add("222222222");
var filterRules = new SmsFilterRules(SmsFilterActionType.AcceptImmediately);
filterRules.Rules.Add(filterRule);
var taskBuilder = new BackgroundTaskBuilder();
taskBuilder.Name = taskNameAndEntryPoint;
taskBuilder.TaskEntryPoint = taskNameAndEntryPoint;
taskBuilder.SetTrigger(new SmsMessageReceivedTrigger(filterRules));
return taskBuilder.Register();
}
由于它使用受限制的API,您必须将以下限制功能添加到您的appx清单
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:r="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="uap mp r">
<Capabilities>
<r:Capability Name="cellularMessaging" />
</Capabilities>
</Package>
您会找到完整的示例here
如果您想使用ChatMessageStore API,可以查看此sample,这应该是一个良好的开端。