intent activity action

来源:互联网 发布:莱克电气知乎 编辑:程序博客网 时间:2024/05/22 00:31

 

在同一个应用程序之间往往会通过Intent对象来指定一个activity. 并通过调用startActivity()方法和startActivityForResult()方法来启动这个

activity。另外,通过intent也可以调用其他应用程序的activity. SDK s甚至还允许开发人员自定义Activity Action.

这里我们看到,通信的关键是Intent对象。

根据intent对象多种重载的构造方法,我们可以把起分为显示intent对象和隐式intent对象。

以下为常用的intent构造函数:

显示intent对象构造器

pulic Intent(Context packageContext,Class<?cls >

 

隐式intent对象构造器

pulic Intent (String action)

public Intent (String action , Uri uri).

 

隐式intent对象,也就是说,通过intent对象并未明确指定intent的目标是哪一个Activity, 这些目标要依靠定义在AndroidManifest.xml文件中的配置信息才能够确定,也就是说,可以action 所指的目标可能有多个。在AndroidManifest.xml文件中可以配置多个接收同一个actiond的Activity action.

 

首先,我们看一下通过显示的intent对象来启动其他的activity.

 

1 通过startActivity( )方法来启动一个activity,

   Intent intent = new Inent (this, Test.class);

   StartActivity(intent);

 

如果我们要向新启动的activity传递数据的话,可以通过intent类的PutExtra方法。该方法有多种的重载。下面是常用的几种重载方式;

 

  Public Intent putExtra(String name, String value)

  Public Intent putExtra (String name, boolean value)

  Public Intent putExtra (String name, int value)

  Public Intent putExtra (String name ,Serializable value)

 

从上面多个构造方法可以看出,putExtra()方法可以保存各种类型的值。当通过startActivity()方法启动新的Activity的时候,这些值也

会一同传递到新启动的Activity. 在新的activity中,我们可以通过getIntent.getExtra()方法获得一个Bunble对象,并通过相应的Get方法获取

刚才put进去的值。

 

如果我们要通过putExtra()方法来传递一个复杂的数据,那么该数据必须是可序列化的。

 

例如,若我们要传递一个Person 对象的实例,则该类必须要实现Serializable接口。

 

  class Person implements Serializable {

 

            String name = "aaa" ;

             int  age =  12;

 

  }

 

注意:使用putExtra()方法传递一个实现了Serializable接口的类的实例对象时,这个类中所有的成员也必须是可序列化的,否则会抛出异常。

 

 

 若我们想要从新启动的activity 中获得返回的数据,那么在启动activity 的时候,因该通过调用startActivityForResult()方法。例如下面的代码:

 

  Intent intent  = new Intent (this, forResult.class);

  startActivityForResult(intent , 1);

 

该方法 有两个参数:参数一是intent, 参数2 我们自定义的requestCode.该参数会在当前的Activity需要重写的onActivityResult()方法来获取返回

的 值。

例如,我们在启动的activity 中设置返回的数据通过如下代码:

情况1 :

  getIntent.putExtra("test", "aaa");

  setResult(20,getIntent());  // 保存结果代码和在启动的activity中设置的值。

 

情况2 :

  setResult(21);

 

通过调用startActivityForResult()方法启动新的activtiy,一般我们都要在该类中 设置多个返回码。这个是由于startActivityForResult()的返回机制决定的。

 


 @Override

 

   protected void OnActivityResult( int requestCode, int resultCode, intent data) {

 

        switch(requestCode) {  // 首先应判断请求码 也就是我们在调用startActivityForResult 时的第二个参数

 

                       case  1:

 

                             if (resultCode == 20 ) {

 

                                        textView.setText(date.getStringExtra("test")); // 这个是启动的activity返回的Intent

 

                              }

 

                             else if ( resultCode == 21) {

 

                             }

 

                        break;

 

                      default:

                        break;

 

 

          }

 

       super OnActivityResult( int requestCode, int resultCode, intent data);

 

 

 

 

 

}

 

 

 

 

调用其他应用程序中的activity(拨打点电话,浏览网页,发email)

 

 关于应用程序的共享, 可以用contentProvider 共享应用程序的数据。这只是应用共享的一部分。下面是共享的令一种形式,activity Action.

 

 这里我们要用到隐式的intent.

 

 下面我们通过隐的式Intent 来调用系统应用程序的acitivity.

 

 1  直接拨号

     直接拨号的功能相当于我们直接拨打传入的手机号码。拨号对应的功能Action是Intent.ACTION_CALL.使用这个Action 必须要指定一个

     uri. 代码如下:Intent callIntent = new Intent (Intent.ACTION_CALL, Uri.parse("tel"+12334444));

                           startActivity(callIntent);

     在执行上述代码后,系统将会拨打在文本框中输入的电话号。

 

2 调用通讯录的Action 是 Intent.ACTION_CALL_BUTTON, 该action 没有输入和输出,可以使用如下代码直接调用。

    intent callButtonIntent = new  Intent(Intent.ACTION_CALL_BUTTON);

    startActivity(callButtonIntent);

 

3 将电话号码传入拨号盘

   如果只想将电话号传入拨号盘 ,然后在作进一步的处理,需要使用Intent.ACTION_DIAL, 该ACTION 也需要一个

   Uri. 代码如下: Intent  dialIntent =  new Intent ( Intent.ACTION_DIAL , Uri.parse("tel"+11223333));

4 调用浏览器

   android SDK内置的WEB浏览器也对外提供了ACTION 。可以通过这个ACTION来传递一个WEB 网址。

   intent webIntent  =  new Intent ( intent.ACTION_VIEW,Uri.parse("http://www.baidu.com"));

   startActivity(webIntent);

 

5 向EMAIL 客户端发送Email地址

   Uri uri =  Uri.parse("mailto:xxx@adc.com");

   Intent intent = new Intent (Intent.ACTION_SENDTO,uri);

   startActivity(uri);

6 发送email:

   在很多情况下,我们不仅要传送Email地址,还包括标题,内容等实质的信息。这些信息可以通过Intent.ACTION_SEND传递。

  代码如下:

  Intent aa =  new Intent (Intent.ACTION_SEND);

  aa.putExtra(Intent.EXTRA_EMAIL,new String[] {"test@126.com"});

 

  aa.putExtra(Intent.EXTRA_CC,new String[] {"tAA@126.com"});

  aa.putExtra(intent.EXTRA_SUBJECT,“指定Email 主题");

  aa.putExtra(Intent.EXTRA_TEXT,"这个地方是内容");

  aa.setType("text/plain");

  startActivity(Intent.createChooser(aa,"选择发送消息的客户端"));

 

这里要注意的是Intent.createChooser()方法,该方法可以创建一个自定义的选择器。因为在android 系统中支持intent.ACTION_SEND动作的

不止Email客户端。 还有发送短信的客户端等等。因此会弹出一个选择菜单。

 

7 可以通过intent.ACTION_GET_CONTENT动作来选择拥有相同类型的应用。如下

   Intent audioIntent = new Intent(intent.ACTION_GET_CONTENT);

   audioIntent.setType("audio/*");

   startActivity(Intent.createChooser(audioIntent,"选择音频程序"));

 

以上,setType("audio/*“)设置了应用的类型是audio/*,该类型表示选择系统中所有支持音频功能的应用。同样,也会弹出选择菜单。

 

 

 

 

 

 

 

 

原创粉丝点击