android service传递并获取参数 之 transact

来源:互联网 发布:淘宝售后怎么赚钱 编辑:程序博客网 时间:2024/06/04 19:19
有问题请加:Q群: 241359063  共同走向创业学习之旅。
原创:kylin_zeng  http://blog.chinaunix.net/uid/23795897.html在此感谢mars 老师的帮助。转载请注明原创出处,尊重他人的劳动成果。


1、在AndroidManifest.xml:   <service android:name="com.example.transact.SecondService"></service>

2、建立两个按钮,绑定和发送:

点击(此处)折叠或打开

  1. package com.example.transact;

  2. import android.os.Binder;
  3. import android.os.Bundle;
  4. import android.os.IBinder;
  5. import android.os.Parcel;
  6. import android.os.RemoteException;
  7. import android.app.Activity;
  8. import android.content.ComponentName;
  9. import android.content.Intent;
  10. import android.content.ServiceConnection;

  11. import android.view.Menu;
  12. import android.view.View;
  13. import android.view.View.OnClickListener;
  14. import android.widget.Button;

  15. public class MainActivity extends Activity {
  16.     
  17.     private Button button1;    
  18.     private Button button2;
  19.     
  20.     private Binder binder;

  21.     
  22.     @Override
  23.     protected void onCreate(Bundle savedInstanceState) {
  24.         super.onCreate(savedInstanceState);
  25.         setContentView(R.layout.activity_main);
  26.         
  27.         button1=(Button)findViewById(R.id.button1);
  28.         button2=(Button)findViewById(R.id.button2);
  29.         
  30.         button1.setOnClickListener(new OnClickListener() {
  31.             
  32.             @Override
  33.             public void onClick(View v) {
  34.                 // TODO Auto-generated method stub
  35.                 Intent intent=new Intent();
  36.                 intent.setClass(MainActivity.this, SecondService.class);
  37.                 bindService(intent, conn, BIND_AUTO_CREATE);       //绑定。
  38.             }
  39.         });
  40.         
  41.     
  42.     
  43.         button2.setOnClickListener(new OnClickListener() {
  44.             
  45.             @Override
  46.             public void onClick(View v) {
  47.                 // TODO Auto-generated method stub
  48.                 Parcel data =Parcel.obtain();
  49.                 Parcel reply=Parcel.obtain();
  50.                 
  51.                 data.writeString("from activity : data");        
  52.                 
  53.                 
  54.                 try {
  55.                     ////这些参数就传递到secondservice里面去了,但如果secondservice onTransact 没有执行完,就在这里阻塞。
  56.                     binder.transact(0, data, reply, 0);
  57.                     
  58.                     String s=reply.readString();
  59.                     System.out.println("reply from SecondService--->"+ s);
  60.                     
  61.                 } catch (RemoteException e) {
  62.                     // TODO Auto-generated catch block
  63.                     e.printStackTrace();
  64.                 }
  65.             }
  66.         });
  67.     }
  68.     
  69.     @Override
  70.     public boolean onCreateOptionsMenu(Menu menu) {
  71.         // Inflate the menu; this adds items to the action bar if it is present.
  72.         getMenuInflater().inflate(R.menu.activity_main, menu);
  73.         return true;
  74.     }
  75.     
  76.     ServiceConnection conn = new ServiceConnection() {
  77.         
  78.         @Override
  79.         public void onServiceDisconnected(ComponentName name) {
  80.             // TODO Auto-generated method stub
  81.             
  82.             
  83.         }
  84.         
  85.         @Override
  86.         public void onServiceConnected(ComponentName name, IBinder service) {
  87.             // TODO Auto-generated method stub
  88.             MainActivity.this.binder=(Binder)binder;
  89.         }
  90.     };
  91.     
  92.     
  93. }


4、然后就可以传输到SecondService 里面了

点击(此处)折叠或打开

  1. package com.example.transact;

  2. import android.app.Service;
  3. import android.content.Intent;
  4. import android.os.Binder;
  5. import android.os.IBinder;
  6. import android.os.Parcel;
  7. import android.os.RemoteException;

  8. public class SecondService extends Service {

  9.     @Override
  10.     public IBinder onBind(Intent arg0) {
  11.         // TODO Auto-generated method stub
  12.         return new MyBinder();
  13.     }

  14.     class MyBinder extends Binder{

  15.         @Override
  16.         protected boolean onTransact(int code, Parcel data, Parcel reply,
  17.                 int flags) throws RemoteException {
  18.             // TODO Auto-generated method stub
  19.             System.out.println("code--->"+ code);
  20.             String s=data.readString();
  21.             System.out.println("data--->"+ data);
  22.             
  23.             reply.writeString("from service: relay");
  24.             
  25.             return super.onTransact(code, data, reply, flags);
  26.         }
  27.         
  28.         
  29.     }
  30.     
  31. }

编译为通过。
Transact.rar

<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(37) | 评论(0) | 转发(0) |
0

上一篇:git 命令

下一篇: linux文件系统启动流程

相关热门文章
  • 仿迅雷之Anroid版开始
  • iOS培训成了精英程序员回炉再...
  • CentOS安装crontab及使用方法(...
  • UBOOT之DDR2内存移植相关修改...
  • cartable longchamp pas cher ...
  • Android之开发环境搭建
  • Android自定义View的实现...
  • AndroidManifest.xml配置文件...
  • Android源码调试方法详解...
  • 不用vs和cygwin!Eclipse+cdt...
  • 请问Linux默认shell的是什么 ...
  • 谁能够帮我解决LINUX 2.6 10...
  • 现在的博客积分不会更新了吗?...
  • shell怎么读取网页内容...
  • ssh等待连接的超时问题...
给主人留下些什么吧!~~
原创粉丝点击