Intent 简单使用

Intent 简介

Intent 是一个消息传递对象,使用它从其他应用组件请求操作。尽管 Intent 可以通过多种方式促进组件之间的通信,但其基本用例主要包括以下三个:

  • 启动 Activity:
    Intent 传递给 startActivity(),来启动新的 Activity 。Intent 描述了要启动的 Activity,并携带了任何必要的数据。在 Activity 完成后收到结果,调用 startActivityForResult() 启动另一个 Activity。在 Activity 的 onActivityResult() 回调中, 结束 Activity 将数据作为单独的 Intent 对象被前一个 Activity 接收。
  • 启动服务:
    Service 不使用用户界面而在后台执行操作。通过将 Intent 传递给 startService(),可以启动服务执行一次性操作(例如,下载文件)。Intent 描述了要启动的服务,并携带了任何必要的数据。如果服务旨在使用客户端-服务器接口,则通过将 Intent 传递给 bindService(),可以从其他组件绑定到此服务。
  • 传递广播:
    广播是任何应用均可接收的消息。系统将针对系统事件(例如:系统启动或设备开始充电时)传递各种广播。通过将 Intent 传递给 sendBroadcast()sendOrderedBroadcast()sendStickyBroadcast(),可以将广播传递给其他应用。

使用 Intent

创建 Intent

  • 显式 Intent - 按名称(完全限定类名)指定要启动的组件。
    Intent intent = new Intent(MainActivity.this, SecondActivity.class);
  • 隐式 Intent - 不会指定特定的组件,而是声明要执行的常规操作,从而允许其他应用中的组件来处理它。

配置 Manifest.xml
Manifest.xml 中目的 Activity 中设置意图过滤器 <intent-filter>设置 <action><data><category> 属性

<activity android:name=".SecondActivity">
    <intent-filter>
        <action android:name="android.intent.action.my_action"/>
        <category android:name="android.intent.category.my_category"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>

创建Intent

    Intent intent = new Intent();
    intent.setAction("xxx");
    intent.addCategory("xxx");
    // 还有
    intent.setData("xxx");
    intent.setType("xxx");
    // or
    intent.setDataAndType("xxx","yyy");

添加数据

    // putExtra 传值
    intent.putExtra("key_name", data);
    // 或着使用 Bundle
    Bundle bundle = new Bundle();
    bundle.putString("data", data);
    intent.putExtras(bundle);

启动 Activity

  • 将 Intent 传递给 startActivity() 或者 startActivityForResult() 启动 Activity
    startActivity(intent);
    // 或者
    startActivityForResult(intent, 0);

返回数据

  • startActivityForResult(intent, 0) 方法启动Activity,setResult(RESULT_OK,intent)方法配置返回数据,重写 onActivityResult() 方法
    // 在后一个 Activity 中
    setResult(RESULT_OK,intent);

    // 在前一个 Activity 中,重写 onActivityResult() 方法
    @Override
    protected void onActivityResult (int requestCode, int resultCode, Intent data) {
        switch (resultCode){
            case RESULT_OK:
                Bundle bind = data.getExtras();
                String data = b.getString("back_key");
                break;
            default:
                break;
        }
     }

Intent 启动 Service

显式 Intent
    Intent downloadIntent = new Intent(this, DownloadService.class);
    downloadIntent.setData(Uri.parse(fileUrl));
    startService(downloadIntent);   
隐式 Intent
    Intent sendIntent = new Intent();
    sendIntent.setAction(Intent.ACTION_SEND);
    sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage);
    sendIntent.setType("text/plain");
    if (sendIntent.resolveActivity(getPackageManager()) != null) {
        startActivity(sendIntent);
    }

全部代码放在github上:https://github.com/bazhancong/IntentDemo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值