美文网首页
组件_Intent

组件_Intent

作者: 泰_然 | 来源:发表于2016-07-21 08:43 被阅读23次

    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 必须**手动添加 配置文件**
        
        <category android:name="android.intent.category.DEFAULT">
    
    • 调用:

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

    demo

    // 调用端
        Intent intent = new Intent();
        intent.setAction("component.activity.ACTION");
        intent.addCategory("component.activity.CATEGORY");
        
        startActivity(intent);
    
    
    
    <!-- 被调用 Intent 端  的配置文件-->
    
        <activity
            android:name="component.activity.IntentSecondActivity"
            android:label="@string/intent_second" >
            <intent-filter >
                <action android:name="component.activity.ACTION"/>
                
                <!-- 默认 Category —— 没有其他 Category 时,必须添加默认配置 -->
                <category android:name="android.intent.category.DEFAULT"/>
                
                <category android:name="component.activity.CATEGORY" />
            </intent-filter>
        </activity>
    

    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"));
    
    
    // 被调用端
              <intent-filter>
                <action android:name="component.activity.ACTION" />
                <category android:name="android.intent.category.DEFAULT" />
    
    
            <!-- scheme, host, port, path -->
                <data
                 android:scheme="http" 
                    android:host="www.baidu.com" 
                    android:port="8080"
                    android:path="file.py"
                    >
                </data>
                
            </intent-filter>
    

    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

          本文链接:https://www.haomeiwen.com/subject/nwhbjttx.html