组件_Intent

1、显式 Intent

通过直接 指定组件名 ,而不是 Actoin、Category 形式

demo

// 创建 Intent时,直接指定要启动的 组件 —— 紧耦合

Intent intent = new Intent(this, IntentSecondActivity.class);
startActivity(intent);


或者 
Intent intent = new Intent();
intent.setComponent( Component名字 ) ;

2、隐式 Intent (Action、 Category)

通过指定 ** Actoin、Category **形式

  • Action:动作

    一个 Intent 只有 1个Action

  • Category:分类

    一个 Intent 可以有 多个 Category

主调端:
    intent **不用显示添加**,系统默认添加默认 category —— intent.addCategory()

被调端:
    默认Category 必须**手动添加 配置文件**
    
    
  • 调用:

    Action 与 至少1个 Category (可以是默认的) 都匹配,才能响应

demo

// 调用端
    Intent intent = new Intent();
    intent.setAction("component.activity.ACTION");
    intent.addCategory("component.activity.CATEGORY");
    
    startActivity(intent);





    
        
            
            
            
            
            
            
        
    

3、隐式 Intent ( Data )

通过 Data 指定 Intent 能响应的 数据类型

被调用端 设置 ** data ** 标签,可以设置任意个种类

  • scheme
  • host
  • port
  • path
  • mimeType

demo

// 主调用端
    Intent intent = new Intent();
    intent.setAction("component.activity.ACTION");
    intent.addCategory("component.activity.CATEGORY");
    
    intent.setData(Uri.parse("http://www.baidu.com:8080/file.py"));


// 被调用端
          
            
            


        
            
            
            
        

4、传递数据

  • 发送端

    调用 putExtra( ) 添加数据

  • 接收端

    调用 getIntent( ) 获取 Intent

    intent.getXXXXXExtra() 获取相应数据

demo

// 发送端,添加、发送数据
intent.putExtra("key", "value");
startActivity(intent);


// 接收端,接收、读取数据
Intent intent = getIntent();
String valueString  = intent.getStringExtra("key");

5、数据回传给上个 Activity

调用、回传流程:

  • 主调用端 :

    调用 startActivityForResult( intent, requestCode( int 值 ) ) 启动下一个 Activity

  • 被调用端

    创建添加数据的 intent ,调用 setResult( RESULT_OK, intent ) 向上个 组件返回数据

  • 主调用端

    由于调用了 startActivityForResult( ) 来启动 组件,此时需重写 onActivityResult( requestCode, resultCode, intent ) 函数,在其中判断、获取返回来的结果

demo

// 主调用端
// 启动可回传数据的  Activity
int requestCode = 10;
startActivityForResult(intent, requestCode);

// 被调用端 —— 回传数据
Intent resultIntent = new Intent();
intent.putExtra("name", "Sandiego");    
setResult(RESULT_OK, resultIntent);     // 设置回传数据

// 主调用端 —— 处理回传结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    
    switch (requestCode) {
    case 10:
        if ( resultCode == RESULT_OK ) {
            String result = data.getStringExtra("name");
        }
        break;

    default:
        break;
    }
}

你可能感兴趣的:(组件_Intent)