zoukankan      html  css  js  c++  java
  • 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);
    	}
    	
    
    }
    


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

  • 相关阅读:
    在64位Win7下安装Oracle 10g客户端,以及PL/SQL Developer的经验
    Windows 8/Windows 8.1激活CMD命令大全
    安装交叉编译工具出错,arm-linux-gcc: 没有那个文件或目录
    驱动设备号创建
    内核驱动调试
    stm32定时器接力
    linux常用命令
    stm32定时器外部计数
    stm32 flash 选择
    pymysql 使用twisted异步插入数据库:基于crawlspider爬取内容保存到本地mysql数据库
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4660427.html
Copyright © 2011-2022 走看看