Android IPC方式 Bundle实现

来源:互联网 发布:win10找不到网络打印机 编辑:程序博客网 时间:2024/06/08 15:07

android前面介绍了Android的IPC机制,现在我们通过Bundle实现他的IPC机制,后面会相继介绍不同的跨进程通信方式

场景:手机上存在两个应用,现在需要通过应用A的Activity跳转到应用B的Activity中并传递数据,从而实现进程间通信

1.首先创建两个应用A,与应用B

应用A的Activity如下

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. private Button button=null;  
  2.    @Override  
  3.    protected void onCreate(Bundle savedInstanceState) {  
  4.        super.onCreate(savedInstanceState);  
  5.        setContentView(R.layout.activity_main);  
  6.        initView();  
  7.        button.setOnClickListener(new View.OnClickListener() {  
  8.            @Override  
  9.            public void onClick(View v) {  
  10.                Intent intent=new Intent();  
  11.                Bundle bundle=new Bundle();  
  12.                bundle.putString("key","我在跟你通信呢");  
  13.                ComponentName componentName=new ComponentName("www.goldwind.cn.ipcbundlea","www.goldwind.cn.ipcbundlea.MainActivity");  
  14.                intent.setComponent(componentName);  
  15.                intent.putExtras(bundle);  
  16.                startActivity(intent);  
  17.            }  
  18.        });  
  19.    }  
  20.    public void initView(){  
  21.        button=(Button) findViewById(R.id.send);  
  22.   
  23.    }  

我们通过创建Intent 在Intent中设置Component来实现两个应用间的Activity跳转,这里的intent.setComponent()方法中设置组件名称,ComponentName来确定组件ComponentName构造方法中传递参数两个参数,第一个包名,第二个包名下的类名(即要跳转的Activity的名称);注意:写完整的包名,然后通过Intent的putExtras方法携带Bundle对象传递数据过去,

2.应用B的Activity如下:

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. private TextView textView=null;  
  2.  private Button button=null;  
  3.  @Override  
  4.  protected void onCreate(Bundle savedInstanceState) {  
  5.      super.onCreate(savedInstanceState);  
  6.      setContentView(R.layout.activity_main);  
  7.          initView();  
  8.          Bundle bundle=getIntent().getExtras();  
  9.         if(bundle!=null){  
  10.              textView.setText(bundle.getString("key"));  
  11.         }  
  12.  }  
  13.  public void initView(){  
  14.      textView=(TextView)findViewById(R.id.shuju);  
  15.      button=(Button)findViewById(R.id.send);  
  16.  }  

应用B通过getIntent().getExtras()获取传递过来的Bundle对象,我们通过Bundle 的getString()方法通过key获取传递的数据。并设置TextView的值。

3.界面截图A 

以下是不同情况下的状态。

1.A启动后                                           2.B自己启动                                           3.通过A跳转启动B获取数据后改变状态                                    

0 0