【Android】16.3 带Intent过滤器的Services
分类:C#、Android、VS2015;
创建日期:2016-03-01
一、简介
这一节演示带Intent过滤器的Services的基本用法。
1、配置Intent Filter
不论是本地解决方案还是远程解决方案,都可以通过intent过滤器显式指定要调用的是哪个已启动的服务。换言之,Intent过滤器主要解决的问题是:在Activity中调用StartService方法启动自定义的Service类以后,通过Intent过滤器指定调用的是已启动的服务中的哪些服务(过滤掉其他的服务)。当然,其他应用程序也可以用这种方式来实现。
在C#代码中,可以用[IntentFilte(…)]特性声明来自动注册Intent过滤器,其作用就像可以用[Service]特性声明自动注册服务一样,也是让系统自动修改AndroidManifest.xml配置文件,而不需要我们去手工在AndroidManifest.xml文件中注册配置信息。
例如,下面的代码将Intent过滤器与 mj.demos.DemoService 关联在一起:
namespace ServiceDemo1 {[Service][IntentFilter(new String[]{"mj.demos.ServiceDemo1"})]public class MyService : Service{……} }
通过C#代码声明Service特性和IntentFilter特性以后,系统就会自动在AndroidManifest.xml文件中添加下面的配置:
<service android:name="servicedemo1.MyService"><intent-filter><action android:name="mj.demos.MyService" /></intent-filter> </service>
其中,“servicedemo1.MyService”中的servicedemo1是将命名空间ServiceDemo1全部变为小写字母后的结果,MyService是自定义的服务名。
这样一来,就可以在任何类中调用StartService方法,并在参数中传递Intent过滤器。例如,下面的代码演示了如何在某个Activity中传递Intent过滤器:
StartService (new Intent ("mj.demos.MyService"));
下面的代码演示了如何停止过滤服务:
StopService (new Intent ("mj.demos.MyService"));
2、通知用户
利用前面章节介绍的通知用户的办法,可将后台运行的Service的状态或结果告诉用户,比如传输一个大文件时,告诉用户后台传输已完成等。
二、示例2--StartedServiceDemo2
该例子与上一节介绍的StartedServiceDemo1的运行结果相同。不同的是在这个例子中添加了Intent过滤器。
运行截图
主要设计步骤
(1)添加ch1602_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"><Buttonandroid:id="@+id/ch1602StartService"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="启动服务" /><Buttonandroid:id="@+id/ch1602StopService"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="停止服务" /> </LinearLayout>
(2)添加ch1602ServiceDemo.cs
using System; using Android.App; using Android.Content; using Android.OS; using Android.Runtime; using Android.Widget; using System.Threading;namespace MyDemos.SrcDemos {[Service][IntentFilter(new string[] { action })]public class ch1602ServiceDemo : Service{public const string action = "MyDemos.ch1602Service";Thread thread;[return: GeneratedEnum]public override StartCommandResult OnStartCommand(Intent intent, [GeneratedEnum] StartCommandFlags flags, int startId){var myHandler = new Handler(MainLooper);myHandler.Post(() =>{Toast.MakeText(this, "服务已启动", ToastLength.Short).Show();});thread = new Thread(() =>{for (int i = 1; i <= 10; i++){var msg = string.Format("这是来自服务的第{0}个消息", i);Thread.Sleep(TimeSpan.FromSeconds(4));myHandler.Post(() =>{Toast.MakeText(this, msg, ToastLength.Short).Show();});}StopSelf();});thread.Start();return StartCommandResult.Sticky;}public override void OnDestroy(){base.OnDestroy();thread.Abort();new Handler(MainLooper).Post(() =>{Toast.MakeText(this, "服务已停止", ToastLength.Short).Show();});}//基类要求实现的接口public override IBinder OnBind(Intent intent){return null;}} }
(3)添加ch1602MainActivity.cs
using Android.App; using Android.Content; using Android.OS; using Android.Widget;namespace MyDemos.SrcDemos {[Activity(Label = "ch1602MainActivity")]public class ch1602MainActivity : Activity{protected override void OnCreate(Bundle savedInstanceState){base.OnCreate(savedInstanceState);SetContentView(Resource.Layout.ch1602_Main);var start = FindViewById<Button>(Resource.Id.ch1602StartService);start.Click += delegate{StartService(new Intent(ch1602ServiceDemo.action));};var stop = FindViewById<Button>(Resource.Id.ch1602StopService);stop.Click += delegate{StopService(new Intent(ch1602ServiceDemo.action));};}} }
【Android】16.3 带Intent过滤器的Services相关推荐
- Android中Intent和Intent过滤器详解
众所周知,Android开发中,Intent是个比较常见的应用组件,今天,我就参考Google官方文档书写一次详细的从头到尾的博文. *Intent是一个消息传递对象,可以使用它从其他应用组件请求操作 ...
- Android组件的通讯-Intent
1.概述 一个应用程序的三个核心组件--activities.services.broadcast receivers,都是通过叫做intents的消息激活.Intent消息是一种同一或不同应用程序中 ...
- 重拾Activity(二)Intent和Intent过滤器
目录 Intent 类型 显式 Intent 示例 隐式 Intent 示例 强制使用应用选择器 接收隐式 Intent 限制对组件的访问 常用Intent 闹钟 创建闹铃 创建定时器 显示所有闹铃 ...
- android背景颜色动态修改,Android自定义TextView带圆角及背景颜色(动态改变圆角背景颜色)...
最近根据项目需求自定义了一个TextView控件,主要用来做状态的标识,比如一个订单状态有各种,当然了这种设置在Android中可以直接用xml文件来处理,但是对于xml文件太过于麻烦,针对不同的颜色 ...
- Android开发学习之Intent具体解释
Intent简单介绍和具体解释: Intent:协助应用间的交互与通信,Intent负责相应用中一次操作的动作.动作涉及的数据.附加数据进行描写叙述. ...
- Android 系统自带图片裁剪功能(适配7.0、8.0、对了还有小米手机)
前段时间写了如何获取相册和拍照之后的照片并且进行显示和上传,这一次是如何进行圆形图像制作,经常看我写的笔记的人会知道,我很懒.那么我就懒的自定义了,目前需求就用原生的就好了,大神的轮子,我会在后面进行 ...
- Intent 和 Intent 过滤器
Intent 和 Intent 过滤器 本文内容 Intent 类型 构建 Intent 显式 Intent 示例 隐式 Intent 示例 强制使用应用选择器 接收隐式 Intent 过滤器示例 使 ...
- Android SurfaceView实战 带你玩转flabby bird (下)
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/43063331,本文出自:[张鸿洋的博客] 1.概述 在Android Surfa ...
- 隐藏android系统自带应用程序
android系统自带的程序,有些是可以删除的,有些是不能强制删除的. 1.对于能够删除的程序,如果想在程序列表中看不到它,直接删除源程序即可. 2.对于不能删除的程序,要想在系统的程序列表中隐藏它, ...
最新文章
- B站疯传!拿走不谢!最全面的JAVA面试材料!完整版开放下载,叫我好人!
- 使用云服务器安装QEMU搭建嵌入式开发环境
- python build-in function
- java能够运行的原理_JAVA程序运行原理分析(一)
- 利用dispatch_once创建单例
- [转]OpenGL库介绍
- [css] 如何设置背景图片不随着文本内容的滚动而滚动?
- redis的四大特性和原理
- 软件架构(10)---java资深架构师分布式技术分享
- About 产量数据选取问题
- MySQL查询数据详细
- 运动目标检测方法综述
- rtl驱动 ubuntu 禁用_ubuntu18.04系统中使用dkms安装wifi驱动rtl8723be的方法
- 区块链智能合约----Solidity状态修饰符view、pure
- 水墨特效怎么做?两种方法快速搞定!大神都在用的超美视频画面效果
- 拼多多item_search - 根据关键词取商品列表
- html5 sfbapa cn,html中的图片直接使用base64编码后的字符串代替
- uniapp 图片上传 删除
- Summation of polynomials
- 安全模式下的自动启动
热门文章
- leetcode刷题:反转链表I
- 解码(六):sws_scale像素格式转换代码演示
- 几何画板手机版_钉钉+几何画板+手写板,网络授课变简单
- c语言 poll,c语言 linux 中 poll 的参数
- oracle视图可以带日期变量么,创建视图时日期字段如何只都天
- Python 偏函数
- 4.3 深层网络中的前向传播
- VMware vSAN的相关告警处理 2021-01-04
- MyBatis学习总结(26)——Mybatis源码中使用了哪些设计模式?
- Nginx学习总结(8)——Nginx服务器详解