分类: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相关推荐

  1. Android中Intent和Intent过滤器详解

    众所周知,Android开发中,Intent是个比较常见的应用组件,今天,我就参考Google官方文档书写一次详细的从头到尾的博文. *Intent是一个消息传递对象,可以使用它从其他应用组件请求操作 ...

  2. Android组件的通讯-Intent

    1.概述 一个应用程序的三个核心组件--activities.services.broadcast receivers,都是通过叫做intents的消息激活.Intent消息是一种同一或不同应用程序中 ...

  3. 重拾Activity(二)Intent和Intent过滤器

    目录 Intent 类型 显式 Intent 示例 隐式 Intent 示例 强制使用应用选择器 接收隐式 Intent 限制对组件的访问 常用Intent 闹钟 创建闹铃 创建定时器 显示所有闹铃 ...

  4. android背景颜色动态修改,Android自定义TextView带圆角及背景颜色(动态改变圆角背景颜色)...

    最近根据项目需求自定义了一个TextView控件,主要用来做状态的标识,比如一个订单状态有各种,当然了这种设置在Android中可以直接用xml文件来处理,但是对于xml文件太过于麻烦,针对不同的颜色 ...

  5. Android开发学习之Intent具体解释

    Intent简单介绍和具体解释:           Intent:协助应用间的交互与通信,Intent负责相应用中一次操作的动作.动作涉及的数据.附加数据进行描写叙述.               ...

  6. Android 系统自带图片裁剪功能(适配7.0、8.0、对了还有小米手机)

    前段时间写了如何获取相册和拍照之后的照片并且进行显示和上传,这一次是如何进行圆形图像制作,经常看我写的笔记的人会知道,我很懒.那么我就懒的自定义了,目前需求就用原生的就好了,大神的轮子,我会在后面进行 ...

  7. Intent 和 Intent 过滤器

    Intent 和 Intent 过滤器 本文内容 Intent 类型 构建 Intent 显式 Intent 示例 隐式 Intent 示例 强制使用应用选择器 接收隐式 Intent 过滤器示例 使 ...

  8. Android SurfaceView实战 带你玩转flabby bird (下)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/43063331,本文出自:[张鸿洋的博客] 1.概述 在Android Surfa ...

  9. 隐藏android系统自带应用程序

    android系统自带的程序,有些是可以删除的,有些是不能强制删除的. 1.对于能够删除的程序,如果想在程序列表中看不到它,直接删除源程序即可. 2.对于不能删除的程序,要想在系统的程序列表中隐藏它, ...

最新文章

  1. B站疯传!拿走不谢!最全面的JAVA面试材料!完整版开放下载,叫我好人!
  2. 使用云服务器安装QEMU搭建嵌入式开发环境
  3. python build-in function
  4. java能够运行的原理_JAVA程序运行原理分析(一)
  5. 利用dispatch_once创建单例
  6. [转]OpenGL库介绍
  7. [css] 如何设置背景图片不随着文本内容的滚动而滚动?
  8. redis的四大特性和原理
  9. 软件架构(10)---java资深架构师分布式技术分享
  10. About 产量数据选取问题
  11. MySQL查询数据详细
  12. 运动目标检测方法综述
  13. rtl驱动 ubuntu 禁用_ubuntu18.04系统中使用dkms安装wifi驱动rtl8723be的方法
  14. 区块链智能合约----Solidity状态修饰符view、pure
  15. 水墨特效怎么做?两种方法快速搞定!大神都在用的超美视频画面效果
  16. 拼多多item_search - 根据关键词取商品列表
  17. html5 sfbapa cn,html中的图片直接使用base64编码后的字符串代替
  18. uniapp 图片上传 删除
  19. Summation of polynomials
  20. 安全模式下的自动启动

热门文章

  1. leetcode刷题:反转链表I
  2. 解码(六):sws_scale像素格式转换代码演示
  3. 几何画板手机版_钉钉+几何画板+手写板,网络授课变简单
  4. c语言 poll,c语言 linux 中 poll 的参数
  5. oracle视图可以带日期变量么,创建视图时日期字段如何只都天
  6. Python 偏函数
  7. 4.3 深层网络中的前向传播
  8. VMware vSAN的相关告警处理 2021-01-04
  9. MyBatis学习总结(26)——Mybatis源码中使用了哪些设计模式?
  10. Nginx学习总结(8)——Nginx服务器详解