您的位置:首页 > 移动开发 > Android开发

【android】Activity之间的通信与自定义Action

2012-09-04 09:49 627 查看
Activity之间的通信

Activity 之间的通信是通过Intent实现的

1.由activity A 到B -- 调用同一个应用下的activity

a.普通方式

流程:创建一个Intent实例 ,通过Intent指定从哪个Activity到哪个Activity,然后 A实例对象.startActivity(Intent实例) eg:

Intent intent = new Intent(A.this,B.class);

你也可以传参数到目标Activity

intent.putExtra("key",value);----有个中重载,如果你要传的值是自己定义的类对象,那么这个类必须实现

java.io.Serializable 接口

A的实例对象.startActivity(intent);

b.启动带返回值的Activitywindows 启动关闭Oracle监听和服务

既然能从A传参数到B,肯定也能从B返回数据给A

流程: 创建一个Intent实例,然后A的实例对象.startActivityForResult(Intent实例,int类型的请求标示);

重写A类的onActivityResult(int requestCode, int resultCode, Intent data) ;

注意:int类型的请求标示必须是唯一的,通常情况下 我们使用布局文件的int表示方式作为请求标示

eg:

//启动 带返回值的activity

Intent intent = new Intent(A.this,B.class);

A的实例对象.startActivityForResult(intent, R.layout.main);

//在B类中 指定返回值Spring加载多个XML 配置文件

Intent intent=B的实例对象.getIntent().putExtra("key","hello");

B的实例对象.setResult(20,intent);

//重写A类的onActivityResult(int requestCode, int resultCode, Intent data) 接收数据

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

// TODO Auto-generated method stub

super.onActivityResult(requestCode, resultCode, data);

switch (requestCode) {

case R.layout.main:

if(requestCode==20)

{

String resultStr= data.getStringExtra("key");

}

break;

default:

break;

}

}

变量resultStr 就是返回值 为 hello;

2.调用不同应用程序的Activity

创建Intent实例时 有很多重载

public Intent(Context packageContext,Class<?> cls); --- 上面已经使用了

public Intent(String action);

public Intent(String action,Uri uri);

调用其他应用程序的Activity 就是通过后两种构造实现的 (通过Action 的方式);

a.调用系统的应用程序

android 系统自带很多功能的应用,像打电话,浏览网页,发送Email等。。

eg: 打电话

Intent intent = new (Intent.Action_CALL,Uri.parse("tel:"+电话号码));

startActivity(intent);

b.己的Activity Action 供别的应用调用

流程:在AndroidManifest.xml 中的被调用的Activity的节点下定义Action ,在调用方使用Intent(String action) 构造调用

注意:两个Activity 可以 属于不同的应用

eg :

AndroidManifest.xml 中定义 Action

<activity android:name=".Main"

android:label="@string/app_name">

<intent-filter>

<action android:name="com.myaction"/>

</intent-filter>

</activity>

调用方调用

Intent intent = new Intent("com.myaction");

startActivity(intent);

c.用需要传参的其他应用的Activity

由第三种构造( public Intent(String action,Uri uri);) 可以了解我们可以通过Uri对象给被调用的Activity传递参数

分析Uri的格式("tel:12345678")可以发现Uri需要一个头 ("tel"); 这个头在你自定义action 的时候需要自己定义

这个头也是在Androidmanifest.xml 中定义

流程:在AndroidManifest.xml 中的被调用的Activity的节点下定义Action 和Uri头,在调用方使用

Intent(String action,Uri uri);构造调用

eg:

在AndroidManifest.xml 中定义Action 和 Uri头

<activity android:name=".Main"

android:label="@string/app_name">

<intent-filter>

<action android:name="com.myaction"/>

<!--Uri头-->

<data android:scheme="myscheme"></data>

</intent-filter>

</activity>

在调用方调用

Uri uri = Uri.parse("myscheme://哈哈哈");

Intent intent = new Intent("com.myaction",uri);

startActivity(intent);

在被调用方的到传过来的参数

Uri uri = getIntent().getData();

String str= uri.getHost();

str变量得到的值就是“哈哈哈”

转自:http://www.cnblogs.com/ctou45/archive/2011/07/06/2099108.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: