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-15 16:05:35

Activity向服务传递数据的相关文章

Android Studio开发基础之启动Service,并通过从Activity向Service传递数据

本实例演示启动Service,并通过从Activity向Service传递数据,新建一个Service,并敲如下代码: package com.example.lhb.startservice; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.view.ViewDebug; import android.widget.Toast; public

activity与fragment传递数据

activity之间的数据交换,只要Intent intent = new Intent(getContext , 将要跳转的Activity的class) ; intent.setStringExtra("tag",value) ; 在另一个activity 中 Intent intent = getIntent() ; intent.getStringExtra("tag") ; 而 activity 与 fragment 交换数据则要: activity里 B

android 入门-Service实时向Activity通过BroadcastReceiver传递数据

引文: http://www.cnblogs.com/linjiqin/p/3147764.html <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layou

Activity中Intent传递数据--Bundle

<span style="font-size:18px;">///////////mainAvtivity//////////////</span> <span style="font-size:18px;">package com.demo.clf; import android.app.Activity; import android.content.Intent; import android.os.Bundle; impo

Android开发学习之路-回调实现Service向activity传递数据

开启服务的时候,如果我们是通过bindService来绑定服务并且要向服务传递数据,可以直接在Intent中设置bundle来达到效果,但是如果是我们需要从服务中返回一些数据到Activity中的时候,实现起来就有各种各样的方法,比如说使用回调,使用广播等等,今天说的是使用回调的方法. 新建一个工程,并编写一个服务: 1 public class MyService extends Service { 2 private boolean connecting = false; 3 private

activity与fragment之间传递数据

总结:无论是activity给fragment传递数据,还是fragment给activity传递数据,都把activity和fragment都当做一个普通的对象,调用它的方法,传递参数. 1.Fragment中通过getActivity()然后进行强制转化,调用Activity中的公有方法 ((XXXXActivity)getActivity()).fun(); 2.Activity在切换Fragment的时候,通过setArguments向Fragment传递参数,Fragment通过get

android83 Activity的生命周期,启动模式,返回时传递数据

#Android四大组件 * Activity * BroadCastReceiver * Service * ContentProvider #Activity生命周期 * oncreate:Activity对象创建完毕,但此时不可见 * onstart:Activity在屏幕可见,但是此时没有焦点(不能够点,不能够交互) * onResume:Activity在屏幕可见,并且获得焦点 * onPause:Activity此时在屏幕依然可见,但是已经没有焦点 * onStop:Activity

android中activity之间传递数据的3种方式

在android开发中总是需要不停的传递数据,特别是不同的Activity之间.在这里小编介绍自己所知的3种Activity的跳转方式. 第一种:静态传递数据 直接上部分代码:在第一个Activity中 Intent intent = new Intent(); intent.setClass(MainActivity.this,SecondActivity.class); SecondActivity.usrname = "jack"; SecondActivity.password

Fragment与Activity相互传递数据:

Activity向Fragment传递数据:在Activity中创建Bundle数据包,并调用Fragment的setArguments(Bundle bundle)方法即可将Bundle数据包传给Fragment. Fragment向Activity传递数据或Activity需要在Fragment运行中进行实时通信:在Fragment中定义一个内部回调接口,再让包含该Fragment的Activity实现该回调接口,这样Fragment即可调用该回调方法将数据传给Activity.