`
zhanhao
  • 浏览: 287243 次
  • 性别: 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

相关推荐

    service与activity之间的通信

    二、Service与Activity通信方式 1. startService(): 当Activity启动Service时,可以通过Intent传递数据。Service在onStartCommand()方法中接收这些数据,处理完任务后通过BroadcastReceiver或者返回结果到调用start...

    Android自定义action与permission_java_action_

    在《Android自定义action与permission的方法教程》PDF中,你将找到更详细的步骤和示例,包括如何在代码中检查权限、如何在Intent中使用自定义Action,以及如何处理权限请求等。这份教程将帮助你更好地理解和掌握这两...

    activity之间的通信

    如果Service需要与Activity通信,可以使用Binder机制,或者当涉及到跨进程通信时,可以借助AIDL(Android Interface Definition Language)定义接口。 九、生命周期管理 在进行Activity通信时,了解每个Activity的...

    Android Activity 通信简单示例

    总结来说,Android的Activity通信涉及Intent的使用、数据传递、结果回调、启动模式、生命周期管理以及导航与返回栈的处理。理解并熟练掌握这些知识点对于开发高效、稳定且用户体验良好的Android应用至关重要。通过...

    activity之间传递文件

    首先,我们要理解Android中的Activity如何通过Intent进行通信。Intent是Android系统用来启动服务、启动或跳转Activity的主要手段,同时也用于传递数据。在传递文件时,我们可以创建一个隐式Intent或显式Intent。隐式...

    Activity之间的调用

    在Android应用开发中,Activity是构成应用程序的基本组件之一,它代表了用户可见并可以与之交互的屏幕。Activity之间的调用是Android应用中常见的功能,用于实现不同界面间的跳转和数据传递。本主题将深入讲解...

    Android中进程之间通信的机制

    特别是当需要与不同应用程序中的Activity进行交互时,掌握正确的通信方式至关重要。本文将深入探讨如何在Android应用之间进行跨进程访问Activity,并通过具体的示例来解释如何实现数据的传递。 #### 通过Action访问...

    Activity之间的相互调用与传递参数

    其次,传递参数是Activity之间通信的关键。有多种方式可以实现这一点: 1. **Intent extras**: 可以使用Intent的putExtra()方法将基本类型、Parcelable对象、Serializable对象等数据打包到Intent中,然后在目标...

    Android 应用程序之间的通信

    综上所述,Android应用程序之间的通信涉及到Intent的使用、BroadcastReceiver的监听、ContentProvider的数据共享以及Activity的交互。理解并熟练掌握这些概念对于开发健壮且功能丰富的Android应用至关重要。在实际...

    intent 跳转实现activity之间传参

    本篇文章将详细讲解如何通过Intent实现Activity之间的参数传递。 一、Intent的基本概念 Intent是一个消息对象,它封装了组件间的交互信息。在Android中,当我们想要从一个Activity跳转到另一个Activity时,就需要...

    Android 之Activity之间的跳转

    而隐式Intent则基于Action、Data、Category等元数据,允许系统选择能够处理Intent的任何Activity,常用于跨应用通信。 在创建Intent时,可以使用以下代码示例: ```java // 显式Intent Intent intent = new Intent...

    activity service 数据交互

    本篇文章将深入探讨Activity与Service之间的数据交互,并通过具体的BroadcastService实例来阐述相关知识点。 首先,理解Activity与Service的通信方式至关重要。主要有以下几种: 1. **Intent**: 这是最常见的通信...

    Android的ACTION说明文档

    自定义ACTION时,应确保ACTION字符串具有足够的唯一性,以免与其他应用的ACTION冲突。 在使用ACTION时,通常还需要配合Category、Data、Extra等Intent属性,以提供更多的上下文信息。例如,Category可以指定ACTION...

    实验七 使用Intent在Activity间传输数据

    显式Intent明确指定了要启动的Activity,通常用于在同一应用内的不同Activity之间传递数据;而隐式Intent则不指定具体的目标Activity,而是根据Intent中的Action、Data、Category等信息,由系统自动匹配合适的处理者...

    用broadcast在activity之间传递数据

    总结来说,使用Broadcast在Activity之间传递数据是一种灵活且实用的方法,它允许组件间通信而不直接耦合。通过理解BroadcastReceiver、Intent、IntentFilter、Handler等核心概念,开发者可以有效地实现在Android应用...

    利用广播Broadcast Receiver,在2个不同的Activity传递数据

    总结,BroadcastReceiver是Android系统中实现组件间通信的重要工具,特别适用于在Activity之间传递数据。通过创建BroadcastReceiver,注册它,发送Broadcast,以及在接收端处理数据,我们可以轻松地在两个不同的...

    activity值传递

    Intent不仅用于启动一个新的Activity,还可以携带数据在它们之间进行通信。 首先,让我们了解Intent的基本概念。Intent在Android中扮演着连接组件的角色,它是一种表达应用程序意图的抽象,可以用来启动一个...

    拦截Activity的文件

    Android系统内部,Activity的启动主要由ActivityManagerService完成,它是通过ActivityManagerNative接口与应用进程通信。我们可以通过反射或者AOP(面向切面编程)的方式来拦截这个过程,修改或添加额外的行为。 ...

    如何启动另外一个应用的任意Activity

    在这个例子中,ACTION_NAME是自定义的Action,"content://com.example.provider"是数据URI,"text/plain"是数据类型。 **四、权限问题** 如果要启动的Activity属于另一个应用,可能需要获取相应的权限。在...

Global site tag (gtag.js) - Google Analytics