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, );
- //第二种
- Intent i = new Intent();
- i.SetAction(Intent.ActionGetContent);
- i.SetType("vnd.android.cursor.item/phone");
- StartActivityForResult(i, );
1.6.(暂时就这些..没了 哈哈哈)
我们进入下个环节..
2.学会调用相册并取得选择的照片
同样,我们在点击事件中,修改代码如下:
- Intent i = new Intent();
- i.SetType("image/*");
- i.SetAction(Intent.ActionPick);
- StartActivityForResult(i,);
细心的朋友已经发现了..在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 == && resultCode == Result.Ok)
- {
- webView.LoadUrl(data.GetStringExtra("code"));
- Toast.MakeText(this, "扫描结果:" + data.GetStringExtra("code"), ToastLength.Short).Show();
- }
- if(requestCode == && 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(, 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了..
C#开发移动应用系列(4.调用系统应用,以及第三方应用(调用与被调用))的更多相关文章
- C#使用Xamarin开发移动应用 ---- 系列文章
C#使用Xamarin开发移动应用 C#使用Xamarin开发可移植移动应用终章(11.获取设备信息与常用组件,开源一个可开发模版.) C#使用Xamarin开发可移植移动应用进阶篇(10.综合演练, ...
- iOS - (调用系统本机打电话功能)
如下图所示,点击订单里的打电话 button 后,调用系统的打电话功能. 这个调用系统打电话功能有点简单,不需要遵守协议和代理什么的,直接在点击方法里写上几句代码就可以了. 下面来看看代码吧: 接下来 ...
- ShareIntentUtil【调用系统自带的分享的工具类】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 根据参考资料的文章,整理了调用系统自带分享的工具类(实现了适配7.0FileProvider的功能),需要搭配<Android ...
- Android开发中怎样调用系统Email发送邮件(多种调用方式)
在Android中调用其他程序进行相关处理,几乎都是使用的Intent,所以,Email也不例外,所谓的调用Email,只是说Email可以接收Intent并做这些事情 我们都知道,在Android中 ...
- Android开发_如何调用系统默认浏览器访问
Android开发_如何调用系统默认浏览器访问 2015-10-20 17:53 312人阅读 http://blog.sina.com.cn/s/blog_6efce07e010142w7.htm ...
- iOS开发 调用系统相机和相册
调用系统相机和相册 (iPad,iPhone)打开相机:(iPad,iPhone)//先设定sourceType为相机,然后判断相机是否可用(ipod)没相机,不可用将sourceType设定为相片库 ...
- iOS开发 调用系统相机和相册 分类: ios技术 2015-03-30 15:52 65人阅读 评论(0) 收藏
调用系统相机和相册 (iPad,iPhone) 打开相机:(iPad,iPhone) //先设定sourceType为相机,然后判断相机是否可用(ipod)没相机,不可用将sourceType设定为 ...
- IOS中调用系统的电话、短信、邮件、浏览功能
iOS开发系列--通讯录.蓝牙.内购.GameCenter.iCloud.Passbook系统服务开发汇总 2015-01-13 09:16 by KenshinCui, 26990 阅读, 35 评 ...
- J2EE开发实战基础系列之开卷有益
2014.10.24[致歉]{抱歉,从7.4号接到朋友的请求,一直忙到现在,最近又有新的CASE要忙,很抱歉教程要延误,开课时间请大家关注Q群} 时隔七年再次接触培训有关的事情,是兴奋,更多的是恐惧, ...
随机推荐
- 5、Java Swing布局管理器(FlowLayout、BorderLayout、CardLayout、BoxLayout、GirdBagLayout 和 GirdLayout)
5.Java-Swing常用布局管理器 应用布局管理器都属于相对布局,各组件位置可随界面大小而相应改变,不变的只是其相对位置,布局管理器比较难以控制,一般只在界面大小需要改是才用,但即使这 ...
- 在 eclipse 中将 web 项目部署到 tomcat 服务器上
1.在 eclipse 中,选择 Window--->Preferences--->Server--->Runtime Environments,选择 Add 按钮 2.在弹出的对话 ...
- 开涛spring3(3.2) - DI之循环依赖
3.2.1 什么是循环依赖 循环依赖就是循环引用,就是两个或多个Bean相互之间的持有对方,比如CircleA引用CircleB,CircleB引用 CircleC,CircleC引用CircleA ...
- Shiny for Interactive Application Development using R(转)
This slidify-based deck introduces the shiny package from R-Studio and walks one through the develop ...
- JAVA网络编程TCP通信
Socket简介: Socket称为"套接字",描述IP地址和端口.在Internet上的主机一般运行多个服务软件,同时提供几种服务,每种服务都打开一个Socket,并绑定在一个端 ...
- NodeJS在线聊天室(NodeJS & SocketIO & Express & EJS & MongoDB & Gulp)
项目背景 这个项目主要是为了玩玩NodeJS,项目的方向大概是做出类似QQ的在线聊天系统.想要在线体验可以点击在线演示. 项目使用PM2进行部署和管理,功能在不断的迭代开发中.如果你觉得这个项目比较有 ...
- 写给Android App开发人员看的Android底层知识(8)
(十)PMS及App安装过程 PMS,全称PackageManagerService,是用来获取Apk包的信息的. 在前面分析四大组件与AMS通信的时候,我们介绍过,AMS总是会使用PMS加载包的信息 ...
- python内置的全局变量
print(__doc__) # 文件注释print(__file__) # 当前文件的绝对路径print(__package__) # 当前文件所在的包 当前文件: None 导入其他的文件:指定文 ...
- 低版本eclipse导入高版本eclipse创建项目报错问题
例如用高版本eclipse创建的项目,会默认使用的是jdk1.8版本, 低版本eclipse创建项目,会默认使用的是jdk1.7版本. 此时导入高版本eclipse项目时会报错(文件夹中会出现红色!) ...
- Codility---EquiLeader
Task description A non-empty zero-indexed array A consisting of N integers is given. The leader of t ...