参考:http://www.cnblogs.com/yaozhenfa/

Main.axml

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:minWidth="25px"
android:minHeight="25px">
<TextView
android:text="{0} Calling"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/lblNote"
android:textAlignment="center" />
<EditText
android:inputType="phone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/txtPhoneNumber" />
<Button
android:text="Call"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btnCall" />
</LinearLayout>

Strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="Thinks">http://www.cnblogs.com/yaozhenfa/p/xamarin_android_quickstart.html</string>
<string name="Project">CallPhone</string>
<string name ="Title">Calling</string>
<string name="Messages">Call {0} ?</string>
<string name="Warnning_Title">Information</string>
<string name="Warnning_Value">Couldn`t be Empty!</string>
<string name="Warnning_IllegalValue">Illegal CallPhone Number!</string>
</resources>

MainActivity.cs

using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS; namespace PhoneCall
{
[Activity(Label = "PhoneCall", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
private string _note;
private EditText txtPhoneNumber;
private TextView lblNote;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle); // Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main); // Get our button from the layout resource,
// and attach an event to it
///根据ID找手机号输入框按钮
txtPhoneNumber = FindViewById(Resource.Id.txtPhoneNumber) as EditText;
lblNote = FindViewById<TextView>(Resource.Id.lblNote);
txtPhoneNumber.SetTextColor(Android.Graphics.Color.LightGreen);
txtPhoneNumber.AfterTextChanged += txtPhoneNumber_AfterTextChanged;
_note = lblNote.Text;
txtPhoneNumber_AfterTextChanged(txtPhoneNumber, null);
///根据ID找Call按钮
Button btnCall = FindViewById<Button>(Resource.Id.btnCall);
///为btnCall注册点击事件(Lambda)
btnCall.Click += (sender, e) =>
{
///设置MessageBox
AlertDialog _ad = new AlertDialog.Builder(this).Create();
///Check
if (string.IsNullOrWhiteSpace(txtPhoneNumber.Text))
{
_ad.SetTitle(Resource.String.Warnning_Title);
_ad.SetMessage(GetString(Resource.String.Warnning_Value));
_ad.SetButton("Ok", delegate { });
_ad.Show();
return;
}
///Confirm
if (!Phone.Check(txtPhoneNumber.Text))
{
txtPhoneNumber.Text = "";
_ad.SetTitle(Resource.String.Warnning_Title);
_ad.SetMessage(GetString(Resource.String.Warnning_IllegalValue));
_ad.SetButton("Ok", delegate { });
_ad.Show();
return;
}
_ad.SetTitle(Resource.String.Title);
_ad.SetMessage(string.Format(GetString(Resource.String.Messages), txtPhoneNumber.Text));
_ad.SetButton("Ok", new EventHandler<DialogClickEventArgs>(Call));
_ad.SetButton2("Cancel", delegate { });
_ad.Show();
}; }
private void Call(object sender, DialogClickEventArgs e)
{
StartActivity(Phone.Call(txtPhoneNumber.Text));
} void txtPhoneNumber_AfterTextChanged(object sender, Android.Text.AfterTextChangedEventArgs e)
{
lblNote.Text = string.Format(_note, (sender as EditText).Text);
}
}
}

Phone.cs

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget; using System.Text.RegularExpressions; namespace PhoneCall
{
public class Phone
{
public Phone()
{ } /// <summary>
/// 验证
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public static bool Check(string number)
{
if (Regex.IsMatch(number, @"1[3|5|7|8|][0-9]{9}"))
return true;
return false;
} /// <summary>
/// 电话呼叫
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public static Intent Call(string number)
{
Intent _it = new Intent(Intent.ActionCall);
_it.SetData(Android.Net.Uri.Parse("tel:"+number));
return _it;
}
}
}

问题:

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="PhoneCall.PhoneCall" android:versionCode="" android:versionName="1.0" android:installLocation="auto">
<uses-sdk />
<application android:label="PhoneCall" android:icon="@drawable/Icon"></application>
<uses-permission android:name="android.permission.CALL_PHONE" />
</manifest>

效果

Xamarin 编程之打电话的更多相关文章

  1. Xamarin Andro教程搭建Xamarin Androidid开发环境(一)

    Xamarin Andro教程搭建Xamarin Androidid开发环境(一) "工欲善其事,必先利其器".对于程序员来说,编程的环境就是其手中的利器.如果没有一个合适方便的编 ...

  2. 20145314郑凯杰 《Java程序设计》第10周学习总结

    20145314郑凯杰 <Java程序设计>第10周学习总结 代码托管: 学习内容总结 网络编程 会打手机吗? 第一个问题:会打手机吗?很多人可能说肯定会啊,不就是按按电话号码,拨打电话嘛 ...

  3. 【Xamarin开发 Android 系列 3】循序渐进的学习顺序

    原文:[Xamarin开发 Android 系列 3]循序渐进的学习顺序 指定合理的学习步骤,将各个技术点进行强化.慢慢 的就从点到线 到面的飞跃,一切仅仅是时间问题,开始前,请记住,学习是最佳的投资 ...

  4. Xamarin Android 之起始篇

    序言: 在博客园注册了已经有2年多了,快三年了.从开始学习这一行开始就在博客园注册了这个账号.至今也还没有写过一篇随笔,大多时候都是在园子里头潜水,看大牛写的文章,学习. 写博客不为啥,就是自己对自己 ...

  5. python网络编程-socket编程

     一.服务端和客户端 BS架构 (腾讯通软件:server+client) CS架构 (web网站) C/S架构与socket的关系: 我们学习socket就是为了完成C/S架构的开发 二.OSI七层 ...

  6. python网络编程

    Socket是网络编程的一个抽象的概念. 通常我们用一个Socket表示"打开了一个网络链接",而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可. 套 ...

  7. [译]:Xamarin.Android开发入门——Hello,Android快速上手

    返回索引目录 原文链接:Hello, Android_Quickstart. 译文链接:Xamarin.Android开发入门--Hello,Android快速上手 本部分介绍利用Xamarin开发A ...

  8. Python之路【第七篇】python基础 之socket网络编程

    本篇文章大部分借鉴 http://www.cnblogs.com/nulige/p/6235531.html python socket  网络编程 一.服务端和客户端 BS架构 (腾讯通软件:ser ...

  9. .Net中的反应式编程(Reactive Programming)

    系列主题:基于消息的软件架构模型演变 一.反应式编程(Reactive Programming) 1.什么是反应式编程:反应式编程(Reactive programming)简称Rx,他是一个使用LI ...

随机推荐

  1. Android -- ListView(SimpleAdapter) 自定义适配器

    aaarticlea/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA ...

  2. ThinkPHP3.2.2 Widget扩展以及widget demo实例

    Widget扩展一般用于页面组件的扩展. 先说明Widget被调用的方法,你只需要在你的模板文件中使用这样的语法:{:W("Demo/demo_widget_method",arr ...

  3. MYSQL加锁的测验

     存储引擎  支持的锁定级别 myisam      表级别 memory     表级别   inndb       行级别  bdb:        页级别 lock锁定类型 锁定方式       ...

  4. (转)C#特性学习与使用(为枚举定义Description)

    参考:http://blog.csdn.net/nndtdx/article/details/6905802#comments

  5. 字典的快速赋值 setValuesForKeysWithDictionary

    字典的快速赋值 setValuesForKeysWithDictionary ​ 前言 在学习解析数据的时候,我们经常是这么写的:PersonModel.h文件中    @property (nona ...

  6. JS中的window.setTimeout()详解

    相关用法: setTimeout (表达式,延时时间)setInterval (表达式,交互时间)其中延时时间/交互时间是以豪秒为单位的(1000ms=1s) setTimeout 在执行时,是在载入 ...

  7. 异常 java.util.regex.PatternSyntaxException:

    可变参数是在JDK1.5之后出来的一个行特性,也是一个比较好用的东西 想起好多jfinal还有其他框架的查询方法就有好多用到了可变参数,自己也写了个这样的方法 public class Test{   ...

  8. php以post方式向接口发送数据

    工作需要,我负责收集服务器数据,然后定时向中心服务器发送.我看到了接口信息,需要设置heads头信息,需要发送数据,且是post方式. 这里就用到了curl //发送post请求 function r ...

  9. SQL 语句调用这个存储过程,生成顺序编码

    一直很讨厌存储过程,没想到今天帮了我大忙啊,或许会因为今天让我慢慢喜欢上存储过程吧,不多说了,切入正题 在使用数据库的时候,难免要在使用过程中进行删除的操作,如果是使用int类型的字段,令其自增长,这 ...

  10. malloc_free_new_delete

    malloc, free    是c的库函数,只会分配内存大小,不会调用构造函数,析构函数 new, delete    C++关键字,操作符,不仅可以分配内存大小,还可以调用构造函数,析构函数 在执 ...