`
zhanhao
  • 浏览: 284569 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Activity之间的通信与自定义Action

阅读更多

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.启动带返回值的Activity

   既然能从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类中 指定返回值

   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变量得到的值就是“哈哈哈”

 

 

  

 

 

   

 

   

   

1
1
分享到:
评论
1 楼 wwwjiandan 2014-11-26  
我用自定义Action为什么每次调用Activity时都提示找不到指定的Action

相关推荐

    android开发demo集合

    39、Activity与Service运行中通信 40、Service 相当于没有界面的activity 41、AIDL Service android中的跨进程调用 客户端,服务端见AidlService 42、BroadcastReceiver 接收广播消息 43、非UI线程中不能操作UI...

    android初学者入门项目

    39、Activity与Service运行中通信 40、Service 相当于没有界面的activity 41、AIDL Service android中的跨进程调用 客户端,服务端见AidlService 42、BroadcastReceiver 接收广播消息 43、非UI线程中不能操作UI...

    Google Android SDK开发范例大全(PDF高清完整版3)(4-3)

    3.10 不同Activity之间的数据传递——Bundle对象的实现 3.11 返回数据到前一个Activity——startActivityForResult方法 3.12 具有交互功能的对话框——AlertDialog窗口 3.13 置换文字颜色的机关——Button与TextView...

    Google Android SDK开发范例大全(PDF完整版4)(4-4)

    3.10 不同Activity之间的数据传递——Bundle对象的实现 3.11 返回数据到前一个Activity——startActivityForResult方法 3.12 具有交互功能的对话框——AlertDialog窗口 3.13 置换文字颜色的机关——Button与TextView...

    Google Android SDK开发范例大全(PDF高清完整版1)(4-1)

    3.10 不同Activity之间的数据传递——Bundle对象的实现 3.11 返回数据到前一个Activity——startActivityForResult方法 3.12 具有交互功能的对话框——AlertDialog窗口 3.13 置换文字颜色的机关——Button与TextView...

    Google Android SDK开发范例大全的目录

    3.10 不同Activity之间的数据传递——Bundle对象的实现 3.11 返回数据到前一个Activity——startActivityForResult方法 3.12 具有交互功能的对话框——AlertDialog窗口 3.13 置换文字颜色的机关——Button与TextView...

    Google+Android+SDK开发范例大全

    第5章 交互式通信服务与手机控制 5.1 具有正则表达式的TextView——Linkify规则 5.2 ACTION!CALL!拨打电话——Intent.ACTION.CALL的使用 5.3 自制发送短信程序——SmsManager与PendingIntent对象 5.4 自制发送...

    Google Android SDK开发范例大全(完整版附部分源码).pdf

    3.10 不同Activity之间的数据传递——Bundle对象的实现 3.11 返回数据到前一个Activity——startActivityForResult方法 3.12 具有交互功能的对话框——AlertDialog窗口 3.13 置换文字颜色的机关——Button与...

    Google Android sdk 开发范例大全 部分章节代码

    3.10 不同Activity之间的数据传递——Bundle对象的实现 3.11 返回数据到前一个Activity——startActivityForResult方法 3.12 具有交互功能的对话框——AlertDialog窗口 3.13 置换文字颜色的机关——Button与TextView...

    Google Android SDK 开发范例大全01

    3.10 不同Activity之间的数据传递——Bundle对象的实现 3.11 返回数据到前一个Activity——startActivityForResult方法 3.12 具有交互功能的对话框——AlertDialog窗口 3.13 置换文字颜色的机关——Button与TextView...

    Google Android SDK 开发范例大全02

    3.10 不同Activity之间的数据传递——Bundle对象的实现 3.11 返回数据到前一个Activity——startActivityForResult方法 3.12 具有交互功能的对话框——AlertDialog窗口 3.13 置换文字颜色的机关——Button与TextView...

    Google Android SDK开发范例大全(完整版)

    3.10 不同Activity之间的数据传递——Bundle对象的实现 3.11 返回数据到前一个Activity——startActivityForResult方法 3.12 具有交互功能的对话框——AlertDialog窗口 3.13 置换文字颜色的机关——Button与TextView...

    疯狂Android讲义源码

     4.1.4 使用Bundle在Activity之间  交换数据 181  4.1.5 启动其他Activity并返回结果 185  4.2 Activity的回调机制 189  4.3 Activity的生命周期 190  4.3.1 Activity的生命周期演示 190  4.3.2 Activity与...

    疯狂Android讲义.part2

    4.3.2 Activity与Servlet的相似性与 区别 194 4.4 本章小结 195 第5章 使用Intent和IntentFilter 第5章 进行通信 196 5.1 Intent对象详解 197 5.1.1 使用Intent启动系统组件 197 5.2 Intent的属性及intent-filter ...

    疯狂Android讲义.part1

    4.3.2 Activity与Servlet的相似性与 区别 194 4.4 本章小结 195 第5章 使用Intent和IntentFilter 第5章 进行通信 196 5.1 Intent对象详解 197 5.1.1 使用Intent启动系统组件 197 5.2 Intent的属性及intent-filter ...

    Android入门到精通源代码.

    7.1.2 Activity之间的消息传递 7.2 Intent的分类 7.2.1 Action Intent 7.2.2 Broadcast Intent 7.3 解析Intent的实现 7.3.1 Intent Receiver 7.3.2 Intent Filter 7.4 设置Activity许可 7.5 应用实例详解:电话拨号...

Global site tag (gtag.js) - Google Analytics