Android Intent详解

intent是android程序中各个组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的组件,而且还可以传递数据。Intent一般用户启动活动,广播,服务等场景。
Intent分为显示Intent和隐式Intent:

1,显示Intent

Intent有多个构造方法,其中一个方法Intent(Context packageContext,Class

        //secondActivity.class就是我们要启动的目标activit
        Intent intent = new Intent(MainActivity.this,SecondActivity.class);

        startActivity(intent);

2.隐式Intent

相对于显示Intent,隐式Intent就显示稍微复杂一点了,他需要在标签下配置来指定一系列的action和category等消息:

 <activity android:name=".the_first_line_of_code.chapter_two.SecondActivity">
            <intent-filter>
                <action android:name="com.example.activitytest.Action_START" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="com.example.activitytest.MY_CATEGORY" />
            </intent-filter>
        </activity>

只有action和category同时匹配,才能响应该Intent,所以启动代码如下:

        Intent intent1 = new Intent("com.example.activitytest.Action_START");

        //android.intent.category.DEFAULT是一种默认category,在调用startActivity()会自动添加进去        
        intent1.addCategory("com.example.activitytest.MY_CATEGORY");
        startActivity(intent1);

3,更多Intent的用法

       //1.打开网页
        Intent intent0 = new Intent(Intent.ACTION_VIEW);
        intent1.setData(Uri.parse("http://ww.baidu.com"));
        startActivity(intent0);


        //2.打电话
        Intent intent2 = new Intent(Intent.ACTION_DIAL);
        intent1.setData(Uri.parse("tel:10086"));
        startActivity(intent2);

          <data>标签中主要可以配置一下内容
//        android:scheme  //指定协议部分如http 表示网页协议,geo地理位置协议tel表示拨打电话
//        android:host //  指定主机名 如www.baidu.com
//        android:port:// 指定端口号 一般跟随主机名后面
//        android:path  // 主机和端口之后的部分
//        android:mimeType: // 可以处理数据的类型,允许使用通配符
//        只有当<data>标签和intent中携带完全一致时,当前活动才能够相应intent

4.向下一个活动传递数据

        //传递数据
        Intent intent = new Intent(IntentActivity.this, LoginActivity.class);
        intent.putExtra("data_key","hello");//传递的数据类型
        startActivity(intent);
        //接受数据
        Intent intent5 = getIntent();
        String data_key = intent5.getStringExtra("data_key");//接受数据类型

5.当第二个活动销毁的时候,我们希望返回数据给上一个活动,于是可以通过startActivityForResult()启动活动,第二个参数为请求码:

        //启动loginActivity
        Intent intent = new Intent(IntentActivity.this, LoginActivity.class);
        intent.putExtra("data_key","hello");//传递的数据类型
        startActivityForResult(intent,REQUEST_CODE);

        //结果回调
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(requestCode == REQUEST_CODE){//请求码
            if(resultCode == RESULT_OK){//结果码
                String returnData = data.getStringExtra("data_return");
                Log.d("firstActivity", returnData);
            }
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

        //loginActivity设置回传的数据
        Intent intent = new Intent();
        intent.putExtra("data_return","hello");//传递的数据类型
        setResult(RESULT_OK,intent4);//RESULT_OK 结果码
    }
 //如果按back键,也应该处理
 @Override
    public void onBackPressed() {
        Intent intent4 = new Intent();
        intent4.putExtra("data_return","hello firstActivity");
        setResult(RESULT_OK,intent4);//RESULT_OK 结果码
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值