Xamrin开发安卓笔记(二)

昨天调理一天AAPT.EXE 被推出的问题(错误代码 error MSB6006: "aapt.exe" exited with code -1073741819),纠结一天到底是什么原因,寝食难安,后来想通了可能是安卓模拟器的原因。今早换了一个安卓SDK,到现在没出现AAPT的错误。

并且可以可视化布局(之前可视化布局很丑陋)。然后接着写,暂时抛弃vs2015,因为2015的BUG直接影响我编写的感觉,所以先用vs2013 update4继续写。

首先解决的是真机调试的问题,之前没搞过安卓,不知道这么调试,其实超级简单。插上安卓机器,开发者模式的USB调试选项打开,找个什么手机管家之类的东西,把驱动安装上(有的手机型号不自动安装驱动,导致能识别他是个移动设备但是无法让VS认识他,所以最好找个什么管家之类的东西把驱动安装上)。

首先写的是跳转传值的事情,这个属于常用功能。布局就不多说了,就是一个按钮,拖进来改个名字。改个ID,生成(为了避免CS文件找不到这个ID,这个事情以后不在说了)

1 btnTo.Click += delegate
2             {
3                 //要跳转的地址
4                 var second = new Intent(this, typeof(SecondActivity));
5                 //带过去的参数(key,value)
6                 second.PutExtra("tel", txtPhone.Text);
7                //执行跳转
8                 StartActivity(second);
9             };

带参数跳转到另一个页面。另一个页面获取参数

1 Intent.GetStringExtra("tel");

通过KEY索检数据。我感觉跳转很简单。。

接下来说通知事件,通知事件有好几种实现方式,不过我写完之后VS告诉我使用的方法已经过时。这让我很伤心。

先说一下普通的通知吧,安卓的通知是可以闪灯,响声,震动。这些通过通知的属性来实现。

通知调用 Notification 类来实现。看下具体代码

 1   btnPush.Click += delegate {
 2                 Notification notify = new Notification(Resource.Drawable.Icon, "你有新的短消息");           //响声,震动,LED闪灯需要调用这个属性
 3                 notify.Defaults = NotificationDefaults.All;
 4                 //注意RingtoneManager这个需要引用 Android.Media;获取系统声音
 5                 Android.Net.Uri uri = RingtoneManager.GetDefaultUri(RingtoneType.Notification);
 6                 notify.Sound = uri;//铃声路径
 7                 //震动方式数组形式,{震动时间,间隔时间,震动时间}
 8                 notify.Vibrate = new long[] { 1000,300,1000};
 9                 //Color静态类需要引用这个 Android.Graphics
10                 //LED等是自动循环的不用像震动那样设置循环间隔
11                 notify.LedARGB = Color.Green;
12                 notify.LedOffMS = 1000;//显示时间
13                 notify.LedOnMS = 1000;//关闭时间
14                 notify.Flags = NotificationFlags.ShowLights | notify.Flags;
15                 var pIntent = PendingIntent.GetActivity(this, 0,
16                     new Intent(this, typeof(SecondActivity)), PendingIntentFlags.UpdateCurrent);
17                 notify.SetLatestEventInfo(this, "通知头", "通知内容", pIntent);
18                 Mgr.Notify(0, notify);//通知ID和通知
19             };

据说这个是2.0时代的代码,很古老。

Mgr的初始化写法是

var Mgr = (NotificationManager)GetSystemService(NotificationService);

当然你可以不实用弱变量,随意咯。

这里重点说一下这句话

var pIntent = PendingIntent.GetActivity(this, 0,new Intent(this, typeof(SecondActivity)), PendingIntentFlags.UpdateCurrent);

索检一个新的活动,第一个参数是上下文(貌似所有关于上下文的时候都是this)第二个参数巴拉巴拉说一大堆结果括号里面说暂时没啥用,但是你必须写。第三是点击通知启动哪个活动页面,第四个是发送标志。

这句话目的是当用户点击通知的时候执行那个页面。不写不行,因为通知必须指定到某个地方去。

最后执行通知。

另一个写法据说是3.0的写法。如下

 1 btnBuilder.Click += delegate
 2             {
 3                 var pIntent = PendingIntent.GetActivity(this, 0, new Intent(this, typeof(SecondActivity)), PendingIntentFlags.UpdateCurrent);
 4                 var notify = new Notification.Builder(this)
 5                     .SetTicker("你有新的短消息")
 6                     .SetSmallIcon(Resource.Drawable.Icon)
 7                     .SetContentTitle("通知头")
 8                     .SetContentText("通知内容")
 9                     .SetContentInfo("右下角");
10                 Mgr.Notify(0, notify.Notification);//通知ID重复则不会被取消貌似重复的话会变成另一个ID
11             };

我欣赏3.0的写法。简约而不简单。所有的东西都可以靠 点来完成,而且参数属性比2.0写法还要多。这个写法也可以写上震动,闪灯,声音,可以自己看看哪个是。

今天先更新这么多。下一次更新估计就开始系统的学习一些东西了。

总结一下这几天的体验,安装方面尽量找靠谱的模拟器,我就在模拟器上吃亏,Xamrin版本尽量最新。

代码执行风格类似MVC。

所有事件都是先 实例化,在去修改他的各种属性,最后执行。而不像以前写web那样,页面画一画CS代码直接写执行。几乎每个东西都需要去做实例化。

var变量和强类型,自己把握用哪个,我个人觉得var其实不错。

就这样吧。接下来会继续更新的。

如果有哪里描述不清楚或者错误,请指出,我会马上更改的,毕竟我也是第一次用这个东西。

转载请注明出处。

时间: 2024-08-28 16:58:25

Xamrin开发安卓笔记(二)的相关文章

Xamrin开发安卓笔记(三)

安装片 Xamrin开发安卓笔记(一) Xamrin开发安卓笔记(二) 这次记录的是滚动条跟sqlite创建.存储和读取. 先说滚动条相关,这个是比较简单的知识点. 当有一屏的东西需要填写的时候例如下图 我们都知道如果点击第一个文本框则会出现输入法.但是如果没有滚动条的话,只能依靠输入法中的回车一个一个的向下移动(虽然现在输入法都带自我关闭功能),很不友好,那么就需要滚动条,看了一下布局属性有滚动条,但是使用起来不好使.隐约想起来,安卓有滚动条控件,就在左边找了一下,果真找到这个玩意了.如下图

android开发学习笔记(二)-activity的生命周期

一:activity的生命周期: 二:created->resumed 当一个应用程序的启动图标被用户点击后,应用程序开始从Activity的onCreate()方法开始执行.(当有多个activity文件时,执行Manifest文件中指定的主activity文件). 当执行完onCreate()方法后,迅速调用onStart(),onResume()方法,用户就可以进行相关的操作. 在onCreate()方法中尽量少执行操作,防止程序运行很久都进入不了界面. 三:Resumed->Pause

iOS开发学习笔记二:UITableView

一:TableViewController 1:删掉默认的ViewController 拖动一个TableViewController 2:新建一个Cocoa Touch Class,命名为:TableViewController 3:将1邦定至2 4:拖动一个Label,TAG设为1,将CELL的ID设为cell 相关代码: 1 override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 2 3 retu

XE8开发安卓之二:按钮和 TEdit 控件的几个常用的属性

按钮和 TEdit 控件的几个常用的属性 Android程序开发必然要用到按钮,按钮的一个比较重要的属性就是 StyleLookup,预置了一系列常用的图标样式,美工不好的,可要多加利用啊,如下图: 另外 2 个常用属性就是 GroupName 和 IsPressed:一组按钮取一个相同的 GroupName,控制其中只能有一个被按下. 按钮的分布一般有以下几种形式: 1.自由摆放,也就是在Form上自由放置. 2.放置在TGridLayout控件中,由TGridLayout自动排列,通过 It

前端开发学习笔记二

前几天把之前做的购物网页的js效果写了出来. 如图所示,分别为以下几个效果: 搜索按钮的文字效果 轮播图 模拟下拉菜单 鼠标点击按钮,图片进行左右滚动 在学习过程中,思想很重要.写一个效果之前,现对其进行设计,然后分析,最后再实现. 比如很简单的一个轮播图,让图片淡入淡出的切换.它的原理就是,先让所有的图片淡出,然后让当前要显示的图片淡入就可以了.理解了它的工作原理,写起来就很简单了. 1 shop.app.Banner=function(){ //Banner轮播图效果 2 var ad=do

ECharts实例开发学习笔记二——时间轴

记录一下ECharts时间轴的使用,首先是照着官方的示例做一遍,在这里不要忘了引入timelineOption.js,后面介绍如何动态创建时间轴的记录数,即根据需求可伸缩显示有多少天或者年月等轴标记数. 官网demo: [html] view plain copy <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html;chars

基于.NET的CAD二次开发学习笔记二:AutoCAD .NET中的对象

1.CAD对象:一个CAD文件(DWG文件)即对应一个数据库,数据库中的所有组成部分,看的见(包括点.多段线.文字.圆等)和看不见(图层.线型.颜色等)的都是对象,数据库本身也是一个对象. 直线.圆弧.文字和标注等图形对象都是对象. 线型与标注样式等样式设置都是对象. 图层.编组和块等组织结构都是对象. 视图与视口等图形显示都是对象. 甚至图形和 AutoCAD 应用程序本身也是对象. 2.CAD中的容器:对于任何一个DWG文件,都会创建下列容器对像:九个固定的符号表(如下)和有名对像字典(包含

前端开发学习笔记二--HTML5

1.什么是 Canvas? <canvas> 标签用于在网页上绘制图像,<canvas> 元素本身并没有绘制能力(它仅仅是图形的容器) , 必须使用脚本(通常是 JavaScript)来完成实际的绘图任务. 2.HTML 5 Canvas 参考手册 http://www.w3school.com.cn/html5/html5_ref_canvas.asp http://www.w3school.com.cn/html5/html5_ref_canvas.asp http://www

安卓开发复习笔记——Fragment+FragmentTabHost组件(实现新浪微博底部菜单)

记得之前写过2篇关于底部菜单的实现,由于使用的是过时的TabHost类,虽然一样可以实现我们想要的效果,但作为学习,还是需要来了解下这个新引入类FragmentTabHost 之前2篇文章的链接: 安卓开发复习笔记——TabHost组件(一)(实现底部菜单导航) 安卓开发复习笔记——TabHost组件(二)(实现底部菜单导航) 关于Fragment类在之前的安卓开发复习笔记——Fragment+ViewPager组件(高仿微信界面)也介绍过,这里就不再重复阐述了. 国际惯例,先来张效果图: 下面