上篇文章地址:
C# 开发移动应用系列 (1. 环境搭建)
C# 开发移动应用系列 (2. 使用 webView 搭建 WebApp 应用)
C# 开发移动应用系列 (3. 使用照相机扫描二维码 + 各种基础知识)
写完这篇.. 本系列基本也就结束了.
看完这些, 基本做个 Webapp 应该是毫无问题的了.. 其实略微有点伤感, Xamarin 确实是好东西..
奈何, 生不逢时.. 等完善了. 开源了.. 社区化了..APP 应用 (指的是安装包类客户端) 已经逐渐没落了..
算了, 话不多说. 开始正文
确定一下本篇的学习目标:
1. 学会调用各类系统应用
2. 学会调用相册并取得选择的照片
3. 学会被调用 (嗯.. 就是让别人调用你..)..
效果图:
我们都知道, 安卓有很多系统自带的应用.. 比如, 打电话. 发短信, 相册, 地图. Email. 等等..
今天我们就来一个个的调用, 并传值.
首先我们还是添加一个按钮, 来测试调用第三方的应用.
如图:
然后, 我们编写这个按钮的点击事件:
- protected override void OnCreate(Bundle bundle)
- {
- //获取按钮
- varbtn3 = FindViewById(Resource.Id.button3);
- //添加点击事件btn3.Click +=delegate
- {
- //do...
- }
- }
准备工作搞定, 我们来编写相关调用代码, 来调用系统应用
1.1 调用电话
- Android.Net.Uri uri = Android.Net.Uri.Parse("tel:18678445447");
- Intent it =new Intent(Intent.ActionDial, uri);
- StartActivity(it);
代码很简单.. 就三句话.. tel 后面调用你想拨打的电话.
1.2 调用短信
- // 发送短信Android.Net.Uri uri = Android.Net.Uri.Parse("smsto:10010");
- Intent it =new Intent(Intent.ActionSendto, uri);
- it.PutExtra("sms_body","你妹妹,我没欠费 你给我停机!");
- StartActivity(it);
嗯.. 你妹妹是你要发的短信.. smsto 后面是你要发送给谁..
1.3 调用地图
- Android.Net.Uri uri = Android.Net.Uri.Parse("geo:38.899533,-77.036476");
- Intent it =new Intent(Intent.ActionView, uri);
- StartActivity(it);
geo 后面给坐标
1.4 调用 Email
- Android.Net.Uri uri = Android.Net.Uri.Parse("mailto:777@qq.com?cc=aa@qq.com&subject=标题&body=内容");
- varintent =new Intent(Intent.ActionView,uri);
- StartActivity(intent);
1.5 调用通讯录
- //第一种(建议使用第一种)Android.Net.Uri uri = Android.Net.Uri.Parse("content://contacts/people");
- Intent it =new Intent(Intent.ActionPick, uri);
- StartActivityForResult(it, 11);
- //第二种 Intent i =new Intent();
- i.SetAction(Intent.ActionGetContent);
- i.SetType("vnd.android.cursor.item/phone");
- StartActivityForResult(i, 11);
1.6.(暂时就这些.. 没了 哈哈哈)
我们进入下个环节..
同样, 我们在点击事件中, 修改代码如下:
- Intent i =new Intent();
- i.SetType("image/*");
- i.SetAction(Intent.ActionPick);
- StartActivityForResult(i,11);
细心的朋友已经发现了.. 在 1.4 之前我们最后一句, 都是 StartActivity 来打开应用的, 1.5 我们则用到了 StartActivityForResult
大家一看方法名就很明白了.. 这个是打开应用之后, 应用会给你返回值的打开方式.
那么, 我们如何获得返回值呢?, 其实前面一篇已经提到过了.. 我们的 OnActivityResult 方法, 就是获取返回值的.
所以我们编写代码如下:
- protected override voidOnActivityResult(int requestCode, Result resultCode, Intent data)
- {
- //base.OnActivityResult(requestCode, resultCode, data);
- //如果当初的发的requestCode =1
- if(requestCode ==1&& resultCode == Result.Ok)
- {
- webView.LoadUrl(data.GetStringExtra("code"));
- Toast.MakeText(this,"扫描结果:"+ data.GetStringExtra("code"), ToastLength.Short).Show();
- }
- if(requestCode ==11&& resultCode == Result.Ok)
- {
- //获得返回值Android.Net.Uri uri = data.Data;
- //转换返回值,得到文件地址
- varsdCardPath = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath;
- varfilePath = System.IO.Path.Combine(sdCardPath, data.DataString);
- ContentResolver resolver =this.ContentResolver;
- string[] pojo = { MediaStore.Images.Media.InterfaceConsts.Data };
- varcursor =this.ContentResolver.Query(uri, pojo,null,null,null);
- intcolumn_index = cursor.GetColumnIndex(MediaStore.Images.Media.InterfaceConsts.Data);
- cursor.MoveToFirst();
- varpath = cursor.GetString(column_index);
- //通过文件地址获得文件流FileStream fs =new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read);
- BinaryReader r =new BinaryReader(fs);
- r.BaseStream.Seek(0, SeekOrigin.Begin);//将文件指针设置到文件开
- byte[] pReadByte = r.ReadBytes((int)r.BaseStream.Length);
- ShowMessage("读取到文件,字节长度:"+ pReadByte.Length);
- }
- }
获取照片的步骤分为 3 步.
1. 获取返回的值.(这是一个路径, 但是不能直接拿来用)
2. 将返回值转换成我们想要的文件路径 (重点~ 直接复制我代码就好了..)
3. 通过文件流读取文件, 并得到字节 (和. NET 的 IO 操作一模一样)
这样, 我们就完成了整个读取照片的过程..
嗯.. 这里也许会比较难理解..
我们举个栗子, 大家都用 windows 系统, 压缩包肯定都知道.. 那打开压缩包.. 其实有很多软件.. rar zip 7z 什么的.. 我们有的时候安装多了.. 就会要选择一个默认的软件打开..
安卓里面也是一样, 比如你碰到一个 txt 文件, 你的 APP 不支持打开.. 那么就要选择一个第三方的打开, 正好你写的 APP 是可以打开 TXT 的.. 所以 你要告诉别人, 我可以打开.. 选我,. 选我..
类似这样 - - , 不知道讲清楚没有..
我们上代码吧..
我们首先新建一个 APP 项目如下:
然后在 MainActivity 编写意图过滤特性, 如下:
这里两个属性的意思是: Intent.ActionSend 当用户的意图是发送操作的时候, 类别设置为默认
这样我们就稍微过滤了一下意图..
然后, 我们把这个 APP 部署在模拟器上, 如图:
然后我们编写原来的点击事件, 来调用这个 APP, 代码如下:
- // 打开发送属性的应用
- varite =new Intent(Intent.ActionSend);
- ite.PutExtra(Intent.ExtraText, "发送数据:XXXXX");
- StartActivity(Intent.CreateChooser(ite, "选择应用程序"));
我们点击按钮, 就会调用到 APP3, 如图:
上图中, 我的 APP3 已经获取到 WebApp 测试发过来的数据., 所以下面, 我们讲如何得到其他应用发过来的数据:
App3 中的代码如下:
- if(Intent.ActionSend == action)
- {
- //得到发过来的数据
- varsendtext =this.Intent.Extras.GetString(Intent.ExtraText);
- //弹出显示Toast.MakeText(this, sendtext, ToastLength.Long).Show();
- //显示到文本控件
- vartextview = FindViewById(Resource.Id.textView1);
- textview.Text = sendtext;
- }
好了, 至此, 我们整个 C# 开发移动应用系列就结束了.. 谢谢大家的支持
其实, 几篇博文下来, 大家可以发现, 我们的 Xamarin 已经是相当的成熟了.. 代码也没什么难度, 无非就是多理解一种新应用的跳转, 打开和相关概念..
嗯.. 本系列到此结束.. 下面开始研究 Asp.net core 了..
来源: http://www.cnblogs.com/GuZhenYin/p/7127529.html