C#开发移动应用系列(4.调用系统应用,以及第三方应用(调用与被调用))
上篇文章地址:
C#开发移动应用系列(2.使用WebView搭建WebApp应用)
C#开发移动应用系列(3.使用照相机扫描二维码+各种基础知识)
写完这篇..本系列基本也就结束了.
看完这些,基本做个Webapp应该是毫无问题的了..其实略微有点伤感,Xamarin确实是好东西..
奈何,生不逢时..等完善了. 开源了..社区化了..APP应用(指的是安装包类客户端)已经逐渐没落了..
算了,话不多说.开始正文
确定一下本篇的学习目标:
1.学会调用各类系统应用
2.学会调用相册并取得选择的照片
3.学会被调用(嗯..就是让别人调用你..)..
效果图:
1.学会调用各类系统应用
我们都知道,安卓有很多系统自带的应用..比如,打电话.发短信,相册,地图.Email.等等..
今天我们就来一个个的调用,并传值.
首先我们还是添加一个按钮,来测试调用第三方的应用.
如图:
然后,我们编写这个按钮的点击事件:
protected override void OnCreate(Bundle bundle) { //获取按钮 var btn3 = FindViewById<Button>(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=内容"); var intent = 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.(暂时就这些..没了 哈哈哈)
我们进入下个环节..
2.学会调用相册并取得选择的照片
同样,我们在点击事件中,修改代码如下:
Intent i = new Intent(); i.SetType("image/*"); i.SetAction(Intent.ActionPick); StartActivityForResult(i,11);
细心的朋友已经发现了..在1.4之前我们最后一句,都是StartActivity来打开应用的,1.5我们则用到了StartActivityForResult
大家一看方法名就很明白了..这个是打开应用之后,应用会给你返回值的打开方式.
那么,我们如何获得返回值呢?,其实前面一篇已经提到过了..我们的OnActivityResult方法,就是获取返回值的.
所以我们编写代码如下:
protected override void OnActivityResult(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; //转换返回值,得到文件地址 var sdCardPath = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath; var filePath = System.IO.Path.Combine(sdCardPath, data.DataString); ContentResolver resolver = this.ContentResolver; string[] pojo = { MediaStore.Images.Media.InterfaceConsts.Data }; var cursor = this.ContentResolver.Query(uri, pojo, null, null, null); int column_index = cursor.GetColumnIndex(MediaStore.Images.Media.InterfaceConsts.Data); cursor.MoveToFirst(); var path = 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操作一模一样)
这样,我们就完成了整个读取照片的过程..
3.学会被调用(嗯..就是让别人调用你..)..
嗯..这里也许会比较难理解..
我们举个栗子,大家都用windows系统, 压缩包肯定都知道..那打开压缩包..其实有很多软件.. rar zip 7z什么的..我们有的时候安装多了..就会要选择一个默认的软件打开..
安卓里面也是一样,比如你碰到一个txt文件,你的APP不支持打开..那么就要选择一个第三方的打开,正好你写的APP是可以打开TXT的..所以 你要告诉别人,我可以打开..选我,.选我..
类似这样 - - ,不知道讲清楚没有..
我们上代码吧..
我们首先新建一个APP项目如下:
然后在MainActivity编写意图过滤特性,如下:
这里两个属性的意思是:Intent.ActionSend当用户的意图是发送操作的时候,类别设置为默认
这样我们就稍微过滤了一下意图..
然后,我们把这个APP部署在模拟器上,如图:
然后我们编写原来的点击事件,来调用这个APP,代码如下:
// 打开发送属性的应用 var ite = new Intent(Intent.ActionSend); ite.PutExtra(Intent.ExtraText, "发送数据:XXXXX"); StartActivity(Intent.CreateChooser(ite, "选择应用程序"));
我们点击按钮,就会调用到APP3,如图:
上图中,我的APP3已经获取到WebApp测试发过来的数据.,所以下面,我们讲如何得到其他应用发过来的数据:
App3中的代码如下:
if (Intent.ActionSend == action) { //得到发过来的数据 var sendtext = this.Intent.Extras.GetString(Intent.ExtraText); //弹出显示 Toast.MakeText(this, sendtext, ToastLength.Long).Show(); //显示到文本控件 var textview = FindViewById<TextView>(Resource.Id.textView1); textview.Text = sendtext; }
好了,至此,我们整个C#开发移动应用系列就结束了..谢谢大家的支持
其实,几篇博文下来,大家可以发现,我们的Xamarin已经是相当的成熟了..代码也没什么难度,无非就是多理解一种新应用的跳转,打开和相关概念..
嗯..本系列到此结束..下面开始研究Asp.net core了..
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
C#开发移动应用系列(3.使用照相机扫描二维码+各种基础知识)
原文: C#开发移动应用系列(3.使用照相机扫描二维码+各种基础知识) 前言 上篇文章地址: C#开发移动应用系列(1.环境搭建) C#开发移动应用系列(2.使用WebView搭建WebApp应用) 今天我们来讲一下如何使用Camera来调用照相机扫描二维码. (Tips:大神别问我为什么不用Camera2,饭要一口口吃..慢慢来.....................其实是我还没看懂..) 确定一下本篇的学习目标: 1.学会如何调用Camera来实现照相机预览 2.学会如何跳转Activity并传值 3.学会如何识别相机预览中的二维码,并读取 效果图: 正文 1.学会如何调用Camera来实现照相机预览 我们先来看看如何使用Camera来实现照相机预览.. 我们首先新建一个Activity,...嗯..暂且命名为SaoYiSaoActivity (不是骚..是扫..) 在Resources\layout 创建对应的界面,SaoYiSao.axml 在SaoYiSaoActivity的OnCreate中加载这个页面,代码如下: protected override ...
- 下一篇
C#使用Xamarin开发可移植移动应用进阶篇(6.使用渲染器针对单个平台自定义控件..很很很很重要..),附源码
原文: C#使用Xamarin开发可移植移动应用进阶篇(6.使用渲染器针对单个平台自定义控件..很很很很重要..),附源码 前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github.com/l2999019/DemoApp 可以Star一下,随意 - - 说点什么.. 本篇..基本可以算是Xamarin在应用开发过程中的核心了..真的很很很重要.. 想学习的..想用的..建议仔细阅读..嗯..打酱油的 ..快速滑倒下面点个推荐 - - 哈哈哈... 今天的学习内容? 只讲一个,关于Xamarin.Forms针对各个平台如何进行可定制化的控件操作. 也就是针对某个平台的细颗粒化操作. 废话不多说,我们直接开始. 正文 1.什么是渲染器 自定义渲染器提供了一种强大的方法来定制Xamarin.Forms控件的外观和行为。它们可用于一些微小的样式更改或复杂的平台特定布局和行为定制。 2.为什么需要自定义渲染器 因为在不使用自定义渲染器的情况下更改Xamarin.Forms控件的外观是颗粒度较粗的. 因为Xamarin.Forms为了支持多个平台同时...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Linux系统CentOS6、CentOS7手动修改IP地址
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7,CentOS8安装Elasticsearch6.8.6