`

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之service传递数据给Activity

    本教程将详细讲解如何在Service中传递数据给Activity。 首先,我们需要理解Android中的绑定服务(Bound Service)和启动服务(Started Service)两种类型。绑定服务允许Activity直接与Service交互,通过接口调用...

    广播方式与service通信

    6. ** 广播Intent**:发送广播Intent是Service向Activity传递信息的一种常见方式。Service通过sendBroadcast()方法发送广播,Activity通过注册BroadcastReceiver来接收广播。BroadcastReceiver通常在AndroidManifest...

    Service通过广播向多个Activity传值

    当Service需要将数据传递给Activity时,传统的Binder机制可能并不适用,因为Service并不直接知道哪个Activity需要接收数据。这时,广播(Broadcast)就派上了用场。 BroadcastReceiver是Android中的另一个组件,...

    初识 Service(三) 演示:Service给 Activity传递消息

    1. **使用Intent**: 可以通过发送Broadcast Intent的方式,让Service广播一条消息,然后在Activity中注册一个BroadcastReceiver来接收这个消息。首先在Service中创建并发送Intent,然后在Activity中注册...

    Android-Service与Activity传值

    在某些场景下,我们可能需要在`Service`和`Activity`之间传递数据,比如`Service`执行完一些操作后,将结果传递给`Activity`进行展示。本篇文章将详细讲解如何实现`Service`到`Activity`的数据传递。 1. **创建...

    获取Service中的信息

    Service可以通过实现IBinder接口,将接口暴露给客户端,从而让客户端调用Service的方法获取信息。客户端可以通过`bindService()`方法绑定Service,并在`onServiceConnected()`回调中得到IBinder对象,进一步获取...

    通过service发送广播通知activity修改UI的内容

    本教程将详细讲解如何通过Service发送广播通知Activity修改UI的内容。 首先,让我们理解广播的基本概念。在Android系统中,广播是一种全局的消息分发机制,允许应用程序之间进行异步通信。当一个广播发送出去时,...

    利用广播Broadcast Receiver,在2个不同的Activity传递数据

    通过创建BroadcastReceiver,注册它,发送Broadcast,以及在接收端处理数据,我们可以轻松地在两个不同的Activity之间传递信息。注意,为了优化资源使用,记得在适当的时候注销BroadcastReceiver。

    service实现断点续传,广播接收下载信息在列表页展示

    在开始下载时,读取这些信息并传递给OkHttp,使其从对应位置开始请求数据。 4. **请求头Range**: 在OkHttp中,通过设置`Request`的`Header`,可以指定从哪个位置开始下载。例如,`Range: bytes=1024-`表示从第...

    Service向Activity传值(kotlin)

    当我们启动或绑定Service时,可以使用Intent对象将数据传递给Service。同样,Service也可以通过Intent返回结果到Activity。首先,在Service中创建一个BroadcastReceiver,用于接收发送的数据,并在适当的时候(例如...

    Android四大组件——BroadcastReceiver普通广播、有序广播、拦截广播、本地广播、Sticky广播、系统广播

    如果前一个Receiver返回`BroadcastReceiver.RESULT_ABORTED`,广播会被终止,不会传递给其他Receiver。 4. **本地广播(Local Broadcast)** 本地广播只在应用程序内部传播,不涉及到系统级别的广播,这使得它更加...

    Service与多个Activity交互

    这种机制使得Service可以在后台无须直接与Activity交互的情况下传递信息,实现组件间的解耦。 **Service与Activity交互的场景:** 1. **启动Service:** Activity可以通过startService()方法启动一个Service,...

    安卓传递信息获取信息

    Intent 用于启动活动(Activity)、服务(Service)或者广播接收器(BroadcastReceiver),并能传递数据和执行操作。对于初学者来说,理解 Intent 的基本用法和应用场景是至关重要的。 一、Intent 的种类 1. 显式 ...

    广播更新界面

    接下来,我们创建一个Intent,用于在Service和BroadcastReceiver之间传递信息。Intent可以携带额外的数据,例如更新后的数据或更新状态。在Service中,我们使用sendBroadcast(Intent)方法发送广播;在...

    Android Service与Activity交互

    为了将数据从Service传递给Activity,我们可以使用Intent的extras字段携带信息。在Service中设置BroadcastIntent的extras,然后在Activity的BroadcastReceiver中读取这些数据。这种方式确保了数据的安全传输。 此外...

    行业分类-外包设计-同步广播消息结构及传递方法的介绍分析.rar

    在此,我们将深入探讨同步广播的概念、消息结构以及其在实际应用中的传递方法。 **同步广播的概念** 同步广播是一种特殊的广播类型,它要求接收广播的BroadcastReceiver必须在接收到广播后立即完成处理,否则系统会...

    activity service 数据交互

    1. **Intent**: 这是最常见的通信方式,通过Intent对象传递数据给Service。启动Service时,可以在Intent中添加额外的数据,Service通过onStartCommand()方法获取这些数据。同样,Service可以通过...

    Android中Service实时向Activity传递数据实例分析

    Service在一个后台线程中生成数据,通过Intent的Broadcast机制将数据传递给Activity,Activity通过BroadcastReceiver接收到数据并更新UI。这种方法使得Service可以在不依赖于Activity的生命周期情况下,依然能将数据...

    应急广播国标协议IP数据包例子

    应急广播国标协议,全称为《国家应急...通过深入理解应急广播国标协议中的IP数据包处理方式,我们可以更好地设计和优化应急广播系统,确保在紧急情况下,信息能够迅速、准确、安全地传递给公众,发挥其应有的社会作用。

    Service向Activity传值(java)

    `Service`中的计数器会持续累加,并通过广播将新值传递给`Activity`,实时更新UI。这种通信方式适用于`Service`需要长时间运行,并且需要将数据实时同步到`Activity`的情况。在实际应用中,你可能需要根据具体需求...

Global site tag (gtag.js) - Google Analytics