Intent(一)--基础使用

223 阅读2分钟

「这是我参与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()