Intent简介

Posted by Young Ken on 2016-03-17

Intent简介

Intent是一种消息传递机制,可以在应用程序内使用,也可以在应用程序之间使用。

  • 使用类名显示启动一个特定的Server或者是Activity。
  • 启动Server或Activity来执行一个动作的Intent。
  • 广播某个事件已经发生。

使用Intent来启动Activity

  1. 显示启动Activity
    1
    2
    Intent intent = new Intent(MyActivity.this, OtherActivity.class);
    startActivity(intent);

在调用startActivity之后,新的Activity会被创建,启动,并移动到Activity栈的顶部。

  1. 隐式的Intent和运行时迟绑定
    隐式的Intent提供了一种机制,可以让匿名的应用程序响应动作请求。这就意味着启动时不用指定那个Activity,系统会根据动作找相应的Activity。
    1
    2
    Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:111-111"));
    startActivity(intent);

这里没有指定Activity,而是指定了一个动作Intent.ACTION_DIAL,第二个参数是动作参数Uri.parse(“tel:111-111”)

  1. 从Activity 返回结果
    当我们用startActivity启动一个Activity的时候,关闭被启动的Activity不会有任何反馈,如果你需要反馈的时候,就得用另一种方式启动了startActivityForResult()。 主要分成三步

    第一步 :启动子Activity
    startActivityForResult()startActivity()相似,区别就是startActivityForResult()要有一个请求码。

    1
    2
    3
    4
    5
    6
    7
    private static final int SHOW_SUBACTIVITY = 1;
    private void startSubAcvity()
    {
    Intent intent = new Intent(MyActivity.this, OtherActivity.class);
    startActivityForResult(intent,SHOW_SUBACTIVITY);
    }

    第二步 :返回结果
    当准备好返回子Activity的时候,在调用finash()之前,调用setResult(),以便像调用的Activity返回结果。

    1
    2
    3
    4
    5
    6
    7
    8
    @Override
    public void onBackPressed()
    {
    Intent intent = new Intent();
    intent.putExtra("key","Result");
    setResult(1, intent);
    finish();
    }

    setResult()有两个参数,一个是结果码,一个是Intent本身。
    第三步 :处理结果
    从写onActivityResult(),在onActivityResult()中处理结果。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1) //这返回码和setResult()中的第一个参数是一样的
    {
    String result = data.getStringExtra("key");
    Log.i("Demo", result);
    }
    }

这样就完成了我们Activity返回结果,由于这个实例比较简单,就不上传代码了。