参考: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. [友盟微博分享]does not contain bitcode. You must rebuild it with

    1.我的 Xcode 明明打开了 bitcode 了,为什么还会报错呢?挺奇怪的. 2.上网一查,才知道,友盟需要 bitcode,Xcode 不支持,只要关闭bitcode就可以 了. 3.其实我也 ...

  2. FS_11C14温湿度传感器(二)

    作者:刘老师,华清远见嵌入式学院讲师. 在FS_11C14平台DHT11传感器程序: /******************************************************** ...

  3. IIS7.0+部署ARR负载均衡

    安装: 1.  安装IIS(需要附带相关的健康检查,需要原始的那个默认站点) 2.  安装ARR相关的文件 3.  安装好之后,IIS里会出现有Server Farms的节点,直接创建服务器. 站点对 ...

  4. DBLINK 创建的注意事项

    摘自:http://blog.csdn.net/xulei_19850322/article/details/8219023 配置DBLINK细节很重要,请重点关注下面几点 1.确定被连接数据库可以连 ...

  5. [LintCode] Parking Lot 停车场问题

    Design a parking lot. see CC150 OO Design for details.1) n levels, each level has m rows of spots an ...

  6. [LintCode] House Robber 打家劫舍

    You are a professional robber planning to rob houses along a street. Each house has a certain amount ...

  7. ArcGIS AddIN开发异常之--“ValidateAddInXMLTask”任务意外失败

     ArcGIS AddIN开发时,产生如下异常错误 2 “ValidateAddInXMLTask”任务意外失败.System.NullReferenceException: 未将对象引用设置到对象的 ...

  8. c#语句 随堂练习2

    1.方程ax²+bx+c=0是一元二次方程,求根. 2.输入一个年份 ,判断是不是闰年.(能被4整除但不能被100整除的年份是闰年,有的世纪年也是闰年) 3.标准体重:男士体重=身高-100±3:女士 ...

  9. svn学习笔记(1)入门学习----安装及创建运行仓库

    学习及使用svn有一段时间了,但是以前学习的时候不怎么用,现在用只是简单的更新上传,又把基本理论忘了.为了以后自己看自己的笔记回忆,特此记录 svn学习博客:http://www.cnblogs.co ...

  10. C++ STL

    1.stackstack 模板类的定义在<stack>头文件中.stack 模板类需要两个模板参数,一个是元素类型,一个容器类型,但只有元素类型是必要的,在不指定容器类型时,默认的容器类型 ...