Windows Phone开发(24):启动器与选择器之发送短信

原文:Windows Phone开发(24):启动器与选择器之发送短信

本节我们通过一个简单的发送短信示例来演示一下如果配合使用PhoneNumberChooserTask和SmsComposeTask类。

PhoneNumberChooserTask是选择器,它用于从你的电话簿里选择你要发送短信的电话号码;

SmsComposeTask就是用来启动发送短信组件并显示发送窗口。

注意,这些操作都在用户的操控之中,发送短信一定会显示可视化页面的,而且不会偷偷地在后台发送,因为Windows phone是以用户体验和安全为原则的,后台发送是不允许的,而且发送过程是由用户控制的,你可以选择取消或退出。

SmsComposeTask类的To属性就是目标电话号码,Body就是你要发送的短信的正文。

同样,你会很轻松地就完成这个任务,不信,看看代码吧。

<phone:PhoneApplicationPage
    x:Class="SMSSample.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="Portrait" Orientation="Portrait"
    shell:SystemTray.IsVisible="True">

    <!--LayoutRoot 是包含所有页面内容的根网格-->
    <Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <!--TitlePanel 包含应用程序的名称和页标题-->
        <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
            <TextBlock x:Name="ApplicationTitle" Text="我的应用程序" Style="{StaticResource PhoneTextNormalStyle}"/>
            <TextBlock x:Name="PageTitle" Text="发送短信" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
        </StackPanel>

        <!--ContentPanel - 在此处放置其他内容-->
        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <TextBlock Height="40" HorizontalAlignment="Left" Margin="33,69,0,0" Name="textBlock1" Text="接收者:" VerticalAlignment="Top" FontSize="30" Width="144" />
            <TextBox Height="72" HorizontalAlignment="Left" Margin="12,116,0,0" Name="txtPhoneNumber" Text="" VerticalAlignment="Top" Width="418" >
                <TextBox.InputScope>
                    <InputScope>
                        <InputScopeName NameValue="Number"/>
                    </InputScope>
                </TextBox.InputScope>
            </TextBox>
            <TextBlock FontSize="30" Height="40" HorizontalAlignment="Left" Margin="33,235,0,0" Name="textBlock2" Text="短信内容:" VerticalAlignment="Top" Width="213" />
            <TextBox Height="233" HorizontalAlignment="Left" Margin="12,283,0,0" Name="txtMessage" Text="" VerticalAlignment="Top" Width="418" TextWrapping="Wrap" />
            <Button Content="发送" Height="79" HorizontalAlignment="Left" Margin="48,522,0,0" Name="btnSend" VerticalAlignment="Top" Width="357" Click="btnSend_Click" />
            <Button Content="选择电话号码" Height="72" HorizontalAlignment="Left" Margin="185,45,0,0" Name="btnChoose" VerticalAlignment="Top" Width="220" Click="btnChoose_Click" />
        </Grid>
    </Grid>

</phone:PhoneApplicationPage>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;

using Microsoft.Phone.Tasks;

namespace SMSSample
{
    public partial class MainPage : PhoneApplicationPage
    {
        PhoneNumberChooserTask myChooser = new PhoneNumberChooserTask();
        SmsComposeTask SMS = null;

        // 构造函数
        public MainPage()
        {
            InitializeComponent();
            // 实例化
            SMS = new SmsComposeTask();
            // 注册回调事件
            myChooser.Completed += (sender, e) => {
                if (e.TaskResult== TaskResult.OK)
                {
                    Dispatcher.BeginInvoke(() => { this.txtPhoneNumber.Text = e.PhoneNumber; });
                }
            };
        }

        // 选择联系人
        private void btnChoose_Click(object sender, RoutedEventArgs e)
        {
            if (myChooser == null)
            {
                myChooser = new PhoneNumberChooserTask();
            }
            myChooser.Show();
        }

        // 发送
        private void btnSend_Click(object sender, RoutedEventArgs e)
        {
            if (txtPhoneNumber.Text == "" || txtMessage.Text == "")
            {
                MessageBox.Show("接收号码和短信内容不能为空。");
                return;
            }
            if (SMS == null)
            {
                SMS = new SmsComposeTask();
            }
            // 赋值
            SMS.To = txtPhoneNumber.Text;
            SMS.Body = txtMessage.Text;

            try
            {
                SMS.Show();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}

时间: 2024-07-29 19:32:01

Windows Phone开发(24):启动器与选择器之发送短信的相关文章

Windows Phone开发(22):启动器与选择器之BingMapsDirectionsTask

原文:Windows Phone开发(22):启动器与选择器之BingMapsDirectionsTask 从今天开发始,我们又开始新的征程,接下来的课程我们要熟悉一下启动器和选择器,其实二者是一样的,没有根本的区别,启动器是有返回结果的,如打开搜索应用程序进行搜索,而选择器是有返回内容的,如选择一张照片.   那么,启动器和选择器是啥玩意儿呢?其实我们可以很简单去理解,说白了,就是使用系自带的组件或应用程序.对的,就是这样,我说过,有时候很多概念只是名字上吓人罢了,实际用起来是非常简单的,比如

Windows Phone开发(23):启动器与选择器之CameraCaptureTask和PhotoChooserTask

原文:Windows Phone开发(23):启动器与选择器之CameraCaptureTask和PhotoChooserTask 这两个组件都属于选择器,而且它们也有很多相似的地方,最明显的上一点,它们都是用来选择图片.     一.CameraCaptureTask选择器.   它用于启动照相机,当你拍下照片后,自动把照的字节流返回给调用方应用程序.前文说过,启动器和选择的使用方法和步骤都是一样的.对于CameraCaptureTask组件也如此,不过注意的一点是,处理Completed事件

Windows Phone开发(25):启动器与选择器之WebBrowserTask

原文:Windows Phone开发(25):启动器与选择器之WebBrowserTask 从名字上就看出来,这个家伙就是打开浏览并浏览到指定页面. 它有两个用途完全一样的属性:Uri属性是System.Uri类型,这是新写进的属性: URL是字符串类型,但如果使用该属性,会发出警告"已过时",所以建议使用前者. 下面这个例子,点击按钮后都是打开WEB浏览器并定位到文本框中输入的地址,但分别用了上面所说的两个属性,当程序运行后,你会发现其效果是一样的. <phone:PhoneA

Windows Phone开发(26):启动器与选择器之MediaPlayerLauncher和SearchTask

原文:Windows Phone开发(26):启动器与选择器之MediaPlayerLauncher和SearchTask 启动器与选择器简单的地方在于,它们的使用方法几乎一模一样,从前面几节中,我相信大家基本上都知道如何使用它们了. 这里还是哆嗦一下吧,使用启动器和选择器的步骤如下: 1.实例化,new一个: 2.准备各参数,对相关的属性赋值: 3.Show: 4.对于启动器,不需要这步,但选择器有返回数据,所以需要处理完成事件. 本节再举两例子,启动器和选择器就可以完成了,然后我们下一节开始

java开发关于控件(alasunsmscon.ocx)的短信接口程序,思路和做法?

问题描述 最近公司要求用JAVA开发一个使用控件(alasunsmscon.ocx)发送短信的接口程序.主要目的是通过接口程序定时的发送短信至某个指定的手机. 但是我对这方面的东西,不是很了解.对控件(alasunsmscon.ocx)就更不了解了.我按照文档上的步骤将alasunsmscon.ocx和mscomm32.ocx安装好了后,就不知道如何动手了.查了很多资料,很多人用了不同的JAR包,而且有些还配了环境变量,还要重启电脑!我觉得挺复杂的,不知道有没有简单点的做法.所以希望各位大虾给点

Android开发中实现发送短信的小程序示例_Android

上图为代码结构图. 现在我们看下具体的代码. Send.java package cn.com.sms.send; import java.util.ArrayList; import java.util.Iterator; import android.app.Activity; import android.app.PendingIntent; import android.content.Intent; import android.os.Bundle; import android.te

.net使用联通SGIP协议开发发送短信的程序

问题描述 谁开发过.net使用联通SGIP协议开发发送短信的程序呀.帮帮忙 解决方案 解决方案二:看看是不是你要找的资料http://blog.csdn.net/adama119/article/details/6266848解决方案三:引用1楼jrl5365的回复: 看看是不是你要找的资料http://blog.csdn.net/adama119/article/details/6266848 你那里有这个程序的源码吗解决方案四:一定很捉急..解决方案五:引用3楼ThisMemoryTime的

android-Androi软件开发中资深的发送短信问题

问题描述 Androi软件开发中资深的发送短信问题 我自己写了一个发送短信的APK,但是当我第一次用这个软件,点了发送按钮,有个杀毒软件会提示我是否发送,虽然之后点发送按钮不会提示,但是我想第一次就不提示直接发送则么办?换句话说就是跳过杀毒软件直接发送....求大神 解决方案 这个比较难了,你卸载杀毒软件吧,要么你的代码把杀毒软件干掉 解决方案二: 首杀毒软件一般有较高权限,所以你很难绕过它.不然它能轻易卸载,还怎么保护 解决方案三: LZ这个是实现不了的,因为你申请的权限属于使用时询问,就算没

开发安卓android发送短信监听器

问题描述 开发安卓android发送短信监听器 发送者发送俩条短信,怎么屏蔽第二条,就是隐藏发送.最好详细一些,谢谢 解决方案 自己记录发送的条数http://www.linuxidc.com/Linux/2011-10/46071.htm 解决方案二: 屏蔽第二条?你是想让他不显示在手机上?让用手机的人不知道?