`

Service将广播信息传递给

 
阅读更多

BroadcastReceiver捕捉到信息后关闭服务

 

public class ServiceSendCast extends Activity {

	/* 建立自定义mServiceReceiver对象 */
	private MyServiceReceiver mReceiver01;
	private TextView mTextView01;
	private Button mButton01, mButton02;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.service_send_cast);

		mTextView01 = (TextView) findViewById(R.id.myTextView1);
		mButton01 = (Button) findViewById(R.id.myButton1);
		mButton02 = (Button) findViewById(R.id.myButton2);

		/* 启动系统服务(Service) */
		mButton01.setOnClickListener(new Button.OnClickListener() {
			public void onClick(View v) {
				/* 开始执行后台服务(Service) */
				Intent i = new Intent(ServiceSendCast.this, SendService.class);
				i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
				startService(i);
				mMakeTextToast("启动系统服务", false);
			}
		});

		/* 终止系统服务(Service) */
		mButton02.setOnClickListener(new Button.OnClickListener() {
			public void onClick(View v) {
				/* 指定终止执行后台服务(mService1) */
				Intent i = new Intent(ServiceSendCast.this, SendService.class);
				/* 关闭系统服务 */
				if (stopService(i) == true) {
					mMakeTextToast("已关闭系统服务", false);
				} else {
					/* 显示关闭服务失败 */
					mTextView01.setText("关闭服务失败 ");
				}
			}
		});
	}

	/* 建立继承告BroadcastReceiver的 mServiceReceiver类接受广播讯息 */
	public class MyServiceReceiver extends BroadcastReceiver {
		public void onReceive(Context context, Intent intent) {
			try {
				/* 取并来自后台服务所Broadcast的参数 */
				Bundle bunde = intent.getExtras();
				String strParam1 = bunde.getString("STR_PARAM1");

				/* 将从Service里传来的广播讯息显示于TextView */
				mTextView01.setText(strParam1);
				Intent i = new Intent(ServiceSendCast.this, SendService.class);
				if (stopService(i) == true) {
					mMakeTextToast("已关闭系统服务", true);
				}
			} catch (Exception e) {
				mTextView01.setText(e.toString());
				e.getStackTrace();
			}
		}
	}

	public void mMakeTextToast(String str, boolean isLong) {
		if (isLong == true) {
			Toast.makeText(ServiceSendCast.this, str, Toast.LENGTH_LONG).show();
		} else {
			Toast.makeText(ServiceSendCast.this, str, Toast.LENGTH_SHORT)
					.show();
		}
	}

	@Override
	protected void onResume() {
		try {
			/* 前景程序生命周期开始 */
			IntentFilter mFilter01;
			/* 自定义要过滤的广播讯息(DavidLanz) */
			mFilter01 = new IntentFilter(SendService.HIPPO_SERVICE_IDENTIFIER);
			mReceiver01 = new MyServiceReceiver();
			registerReceiver(mReceiver01, mFilter01);
		} catch (Exception e) {
			mTextView01.setText(e.toString());
			e.getStackTrace();
		}
		super.onResume();
	}

	protected void onPause() {
		/* 前景程序生命周期结束,解除刚守系统注册的Receiver */
		unregisterReceiver(mReceiver01);
		super.onPause();
	}

}
 

 

public class SendService extends Service {

	private Handler objHandler = new Handler();
	private int intCounter = 0;
	public static final String HIPPO_SERVICE_IDENTIFIER = "ComeFromServer";

	/* 线程Tasks每1秒执行几次 */
	private Runnable mTasks = new Runnable() {
		public void run() {
			intCounter++;
			/* 当后台Service执行5秒后,发生自定义的广播讯息 */
			if (intCounter == 5) {
				Intent i = new Intent(HIPPO_SERVICE_IDENTIFIER);
				i.putExtra("STR_PARAM1", "来自Service的广播信息");
				sendBroadcast(i);
			}
			Log.i("HIPPO",
					"Service Running Counter:" + Integer.toString(intCounter));
			objHandler.postDelayed(mTasks, 1000);
		}
	};

	public IBinder onBind(Intent arg0) {
		return null;
	}

	public void onStart(Intent intent, int startId) {
		/* 服务开始执行,启用线程 */
		objHandler.postDelayed(mTasks, 1000);
		super.onStart(intent, startId);
	}

	public void onDestroy() {
		objHandler.removeCallbacks(mTasks);
		super.onDestroy();
	}

}

  manifest.xml

 

<activity
			android:name=".ServiceSendCast"
			android:label="@string/app_name">
		</activity>
		<service
			android:name=".SendService"
			android:exported="true"
			android:process=":remote"></service>
 



 


  • 大小: 20 KB
  • 大小: 21.4 KB
  • 大小: 86 KB
分享到:
评论

相关推荐

    Service通过广播向多个Activity传值

    Service通过广播向Activity传值,也可以多个Activity接收

    Android开发指南

    • 一个意图对象是传递给Context.startService()来发起一个服务或者递交新的指令给运行中的服务。类似的,一个意图能被传递给Context.bindService() 来在调用组件和一个目标服务之间建立连接。作为一个可选项,它...

    Android开发-Intent使用

    2.启动Service将Intent对象传递给startService()方法或bindService()方法以启动一个Service,该Intent对象包含了要启动的Service的信息及其他必要的数据。 3.发送广播广播是一种所有App都可以接收的信

    Android Intent和Intent Filter详解

     将intent对象传给Context.startService()来启动一个service或者传消息给一个运行的service. 将intent对象传给 Context.bindService()来绑定一个service.  将intent对象传给 Context.sendBroadcast(), Context....

    Servicemaster:Android 使用Service和BroadcastReceiver实现音乐播放功能

    Servicemaster Android 使用Service和BroadcastReceiver实现音乐播放功能 Service ...activity传递信息很简单,通过startService并传递intent即可,但是service却只能通过广播的形式来向activity传递数据

    实验四-Android基本组件交互实验.doc

    extra 附加信息,除了data之外,还可以通过extra附加信息,extra属性使用Bundle类 型进行数据传递; component 组件,显式指定Intent的目标组件的名称; type 数据类型,显式指定Intent的数据类型; 3. Service组件...

    android期末课程考核报告(终极版)

    使用数据库对记事进行增加,查看,修改和删除。 使用 Activity 数据传递实现界面跳转及数据传递(存入和取出)。...户的记事本信息保存下来,需要将这些信息存储在数据库中。记事本需要保存的信息有 编号(ID)、

    Android Service服务详细介绍及使用总结

    service可以在很多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务总是藏在后台的,...

    Android_Activity&Intent;

    服务(Service) - 相当于后台运行的 Activity 广播(Broadcast) - 用于发送广播 广播接收器(BroadcastReceiver) - 用于接收 ContentProvider-用于应用间共享数据 Intent - 用于连接以上各个组件,并在其间传递消息

    Android Service生命周期详解

    组件生命周期将讨论活动、服务、广播接收者的生命周期——包括在生命周期中他们可能的状态、通知状态改变 的方法、及这些状态的组件寄宿的进程被终结和实例被销毁的可能性。 上篇Android开发之旅:组件生命周期(一...

    servlet temple

    当客户机发送请求至服务器时,服务器可以将请求信息发送给 Servlet,并让 Servlet 建立起服务器返回给客户机的响应。 当启动 Web 服务器或客户机第一次请求服务时,可以自动装入 Servlet。装入后, Servlet 继续运行...

    android 面试2

     Looper:是Handler和消息队列之间通讯桥梁,程序组件首先通过Handler把消息传递给Looper,Looper把消息放入队列。Looper也把消息队列里的消息广播给所有的    Handler,Handler接受到消息后调用handleMessage...

    《深入理解Android》卷Ⅱ

    4.5.2 Activity信息的管理 4.5.3 Intent 匹配查询分析 4.5.4 queryIntentActivities总结 4.6 installd及UserManager介绍 4.6.1 installd介绍 4.6.2 UserManager介绍 4.7 本章学习指导 4.8 本章小结 第5章 ...

    Total-Order-for-Multicast-Service:该项目演示了如何为多播消息实现总排序

    消息的多播是指将消息发送到一组接收者。 与消息的单播是一对一通信技术和广播是一对多通信不同,多播是一对多通信技术。 通过这种方式,用户可以向选定的一组接收者发送消息。 因此,为了实现多播消息的总排序,...

    什么是VLAN

    自动配置VLAN时,交换机中软件自动检查进入交换机端口的广播信息的IP源地址,然后软件自动将这个端口分配给一个由IP子网映射成的VLAN。 按用户划分VLAN  基于用户定义、非用户授权来划分VLAN,是指为了适应特别的...

    超级有影响力霸气的Java面试题大全文档

    如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。一般来说,assertion用于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion...

    Android开发应用实战详解源代码

    2.2.3 service介绍 2.2.4 broadcastintentreceiver 2.2.5 contentprovider 2.3 android应用项目文件组成 2.3.1 androidmanifest.xml文件 2.3.2 src目录 2.3.3 常量的定义文件 2.4 程序生命周期 2.4.1 android周期 ...

    Android实例代码

    将接口暴露给客户端; 客户端访问AIDLService; 10.3、电话管理器:TelephoneManager; 10.4、短信管理器:SmsManager; 10.5、音频管理器:AudioManager; 10.6、振动器:Vibrator; 10.7、手机闹钟服务:...

    疯狂Android讲义(第2版)源代码 第6章~第9章

    将接口暴露给客户端; 客户端访问AIDLService; 10.3、电话管理器:TelephoneManager; 10.4、短信管理器:SmsManager; 10.5、音频管理器:AudioManager; 10.6、振动器:Vibrator; 10.7、手机闹钟服务:...

Global site tag (gtag.js) - Google Analytics