Activity数据传输到服务

activity数据接口负责启动该服务包。service获取数据。手术。

详细demo如下面:

package com.example.android_service_trance;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.os.Parcel;
import android.os.RemoteException;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

import com.example.android_service_trance.MyService.LocalBinder;

@SuppressLint("Recycle")
public class MainActivity extends Activity {

	private Button bindService=null;
	private Button callService=null;
	private Button communicationService=null;
	private TextView tv=null;
	private boolean flag=false;//默觉得不绑定
	private MyService myService=null;
	private LocalBinder binder;//服务里的对象
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		bindService=(Button)this.findViewById(R.id.button1);
		callService=(Button)this.findViewById(R.id.button2);
		communicationService=(Button)this.findViewById(R.id.button3);
		tv=(TextView)this.findViewById(R.id.textView1);
		bindService.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {

					//获得意图
					Intent intent=new Intent(MainActivity.this,MyService.class);
					//绑定服务
					bindService(intent, connection, Context.BIND_AUTO_CREATE);

			}
		});
		callService.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				if(flag){
					int result=myService.getRandom();
					tv.setText("<<<<<<<<"+result);
				}

			}
		});
		communicationService.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				//往service中传递值的对象
				Parcel data=Parcel.obtain();
				data.writeInt(10086);
				data.writeString("李华");
				Parcel reply=Parcel.obtain();
				try {

					binder.transact(IBinder.LAST_CALL_TRANSACTION, data, reply, 0);
				} catch (RemoteException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				//从service里读数据
				Log.i("Main<<<<<<<<",reply.readString());
				Log.i("Main<<<<<<<<<",reply.readInt()+"");
			}
		});

	}

	//解除绑定
	@Override
	protected void onStop() {

		super.onStop();
		if(flag)
		{
			//解除绑定
			unbindService(connection);
			flag=false;
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	//连接activity和service的桥梁
	private ServiceConnection connection=new ServiceConnection(){

		@Override
		public void onServiceConnected(ComponentName arg0, IBinder iBinder) {
			//连接

				//获得LocalBinder
				 binder=(LocalBinder)iBinder;
				//获得MyService实例
				myService=binder.getService();

			flag=true;

		}

		@Override
		public void onServiceDisconnected(ComponentName arg0) {
			//不连接

				flag=false;

		}};

}

service端:

/**
 *Version:
 *author:YangQuanqing
 *Data:
 */
package com.example.android_service_trance;

import java.util.Random;

import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.os.Parcel;
import android.os.RemoteException;
import android.util.Log;

/**
 * @author YangQuanqing yqq
 *
 */
public class MyService extends Service {

	//定义一个随机数用于測试
	private Random random=new Random();
	private LocalBinder lb=new LocalBinder();
	//获得当前类的实例
	public class LocalBinder extends Binder{

		public MyService getService()
		{
			return MyService.this;
		}

		@Override
		protected boolean onTransact(int code, Parcel data, Parcel reply,
				int flags) throws RemoteException {
			//Activity里获取数据
			Log.i("SERVICE<<<<<<<<",data.readString());
			Log.i("SERVICE<<<<<<<<<",data.readInt()+"");
			reply.writeString("小名");
			reply.writeInt(1990);

			return super.onTransact(code, data, reply, flags);
		}

	}

	@Override
	public void onCreate() {
		// TODO Auto-generated method stub
		super.onCreate();
	}

	@Override
	public void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
	}

	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		return lb;
	}
	//获得一个随机数
	public int getRandom()
	{

		return random.nextInt(22);
	}

}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

时间: 2024-10-07 23:02:14

Activity数据传输到服务的相关文章

16进制格式数据传输的服务框架——xxl-hex

github:https://github.com/xuxueli/xxl-hex git.osc:http://git.oschina.net/xuxueli0323/xxl-hex 博客地址(内附使用教程):http://www.cnblogs.com/xuxueli/p/5003305.html Tips:这篇基于hex的通讯方案,和网上其他的,或者你目前了解的完全不是同一个玩意儿,疑惑看代码: 简介:xxl-hex是一个轻量级的remoting onhttp工具,使用简单的方法提供了rp

Android(java)学习笔记181:Android 服务的应用,在Activity中实现背景音乐播放

1.在android应用程序里,有一种没有UI的类(android.app.Service)——Service.简单来说,Service是一个 background process(背景程序),通过背景程序,可以实现一些不需要UI的功能,比如播放背景音乐. 下面是一个实现播放背景音乐的例程: 在上个工程的基础上,在Activity中添加音乐播放功能. 在工程中添加一个新类 VoiceService (File->New->Class): import android.app.Service;

Android窗口管理服务WindowManagerService显示Activity组件的启动窗口(Starting Window)的过程分析

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8577789 在Android系统中,Activity组件在启动之后,并且在它的窗口显示出来之前,可以显示一个启动窗口.这个启动窗口可以看作是 Activity组件的预览窗口,是由WindowManagerService服务统一管理的,即由WindowManagerService服务负责 启动和结束.在本文中,我们就详细分析WindowManag

activity劫持反劫持

1.Activity调度机制 android为了提高用户的用户体验,对于不同的应用程序之间的切换,基本上是无缝.他们切换的只是一个activity,让切换的到前台显示,另一个应用则被覆盖到后台,不可见.Activity的概念相当于一个与用户交互的界面.而Activity的调度是交由Android系统中的AmS管理的.AmS即ActivityManagerService(Activity管理服务),各个应用想启动或停止一个进程,都是先报告给AmS. 当AmS收到要启动或停止Activity的消息时

9.服务

服务Service 运行于后台的一个组件,用来运行适合运行在后台的代码,服务是没有前台界面,可以视为没有界面的activity 启动不了服务,在清单文件中写全包名 电话监听器 电话状态:空闲.响铃.接听 此代码在服务里运行,activity是很容易被杀死的 录音机 音频文件的编码和格式不是一一对应的 获取电话管理器,设置侦听 TelephonyManager tm =(TelephonyManager) getSystemService(TELEPHONY_SERVICE); tm.listen

Android四大基本组件(1)之Activity与BroadcastReceive广播接收器

Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器. 一.Activity (1)应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应. (2)Activity之间通过Intent进行通信.在Intent 的描述结构中,有两个最重要的部分:动作和动作对应的数据. (3)典型的动作类型有:M AIN(activity的门户).VIE

Service和Activity之间的通信

Service的启动方式有两种,一种是通过start方式,一种是通过bind方式,通过start方式启动服务后,启动服务的组件和服务便没有多大联系了.所以为了能和Service通信,只能通过bind的方式.下面分几步介绍下:(demo里面的Service提供一个下载的功能,然后在Activity中决定何时开始下载,以及随时查看下载进度) 第一步: 在Service类中创建一个内部类继承自Binder(onBind方法返回IBinder接口,Binder类是IBinder接口的实现类)(看到这里还

Activity详解生命周期(Android)

Activity是Android组件中最基本也是最为常见用的四大组件(Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器)之一. Activity的概念: Activity它的本质上其实就是一个窗体,如我们打开软件它呈现在你眼前的都只是一个窗体而已.它可以与用户进行交互的基本的图形呈现单元. 不同的是Activity它是没有最小化这种概念的.在Windows平台有最大化的概念,在苹果平台的窗体也是没有最大化的概念,只有调

android 一个简单的服务例子

1 public class MessageService extends Service { 2 3 // 获取消息线程 4 private MessageThread messageThread = null; 5 6 // 点击查看 7 private Intent messageIntent = null; 8 private PendingIntent messagePendingIntent = null; 9 10 // 通知栏消息 11 private int messageNo