如何在univarsal windows phone 10中阅读特定的SMS消息

时间:2016-06-28 07:44:31

标签: c# windows-phone

在我的项目中,我想阅读特定的短信,并在通用Windows Phone 10中删除该信息。

在清单文件中使用聊天消息访问是否可行?

1 个答案:

答案 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,这应该是一个良好的开端。