「这是我参与2022首次更文挑战的第17天,活动详情查看:2022首次更文挑战」
Intent对我们来说不陌生,我们想在两个Activity跳转传值,就用到了Intent
1.Intent的用途
在Android中,我们使用Intent来进行应用间的通讯,Intent它描述一次通讯动作(数据、数据描述等等)。系统会根据Intent找到对应的组件,将Intent携带的数据传递给组件,完成这次调用。这篇主要回忆一下Intent的基础使用
- 启动Activity:启动Activity的方法有startActivity()或startActivityForResult(),我们可以将Intent对象传递给它们
- 启动Service:启动Service使用的是startService()或bindService(),可以将Intent对象传递给startService()或bindService()来启动一个Service
- 发送广播:广播的很常见的通信方式,所有App都可以接收,我们可以使用sendBroadcast()将Intent对象携带进去
2.Intent的类型
Intent有两种用法:显式和隐式
(1)显式Intent
显式Intent是在构造Intent的时候就已经指定接受者
显式Intent通过Component直接设置需要调用的Activity,可以唯一确定一个Activity,意图特别明确
- 在构造方法传入
Intent intent = new Intent(this, NewActivity.class);
startActivity(intent);
- 使用setComponent()
ComponentName componentName = new ComponentName(this, NewActivity.class);
Intent intent = new Intent();
intent.setComponent(componentName);
startActivity(intent);
- 使用setClass()/setClassName()
Intent intent = new Intent();
intent.setClass(this, NewActivity.class);
startActivity(intent);
(1)隐式Intent
隐式Intent没有指定启动组件,通过设置Action、Data、Category,让系统筛选合适的Activity。隐式Intent可以跨应用跳转
- Action (1)AndroidManifest.xml文件中定义
被调用的Activity需要有并且包含的Activity,并且category为"android.intent.category.DEFAULT",action的name是一个字符串,可以自定义。在调用的Activity通过这个action name找到上面的Activity
<activity
android:name="com.intentdemo.app.NewActivity">
<intent-filter>
<action android:name="com.intentdemo.startIntent"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
直接用在AndroidManifest.xml定义的别名来进行activity之间的跳转
Intent intent=new Intent(); intent.setAction("com.intentdemo.startIntent");
startActivity(intent);
3. intent携带数据
intent还可以携带数据,intent.putExtra(),键值对 复杂的数据可以使用Bundle实现,intent.putExtras()