Android Intent是Android开发中的重要组成部分,用于在应用程序之间传递信息,启动一个Activity或者Service,以及启动一个隐式Intent。它可以实现信息的传递、页面的跳转等功能。
一、Intent的基本使用
Intent是Android应用程序间实现传递信息的一种方式,它可以用于4种场景:
- 启用Activity。
- 启动Service。
- 启动BroadcastReceiver。
- 启动其他应用程序的Activity或Service。
使用Intent主要有两个目的:
- 传递数据
- 启动组件
Intent的使用比较灵活,根据不同的场景可以使用不同的构造方法。要使用Intent,我们需要指定Context与目标组件的类名、组件的操作类型等信息,这些信息都可以通过Intent的构造方法指定。
Intent intent = new Intent(context, TargetActivity.class) intent.putExtra("key", value) startActivity(intent)
其中: context:代表启动Activity的上下文环境; TargetActivity.class:代表要启动的目标Activity; intent.putExtra():用于传递参数; startActivity(intent):启动目标Activity。
二、隐式Intent
隐式Intent并不是与一个确切的组件(例如Activity或Service)相应连的,它指定的是必须被满足才能执行的一组操作和数据类型。当隐式Intent被发出时,系统会寻找适合指定操作和数据类型的所有组件,并且让用户选择启动哪一个。
例如,我们想要打开手机上的网址,那么可以使用一个Action为ACTION_VIEW, Data为需要显示的URL的Intent隐式启动一个浏览器Activity:
Intent intent = new Intent(Intent.ACTION_VIEW); Uri uri = Uri.parse("http://www.example.com"); intent.setData(uri); startActivity(intent);
三、Intent的标志位
Intent的标志位是通过在Intent中设置标志位来达到特定的效果。其中常见的标志位包括FLAG_ACTIVITY_NEW_TASK、FLAG_ACTIVITY_CLEAR_TOP、FLAG_ACTIVITY_SINGLE_TOP等。主要用于Activity的启动、回退栈的管理、Activity的启动模式等方面。
例如,我们需要在一个应用中启动另一个应用中的Activity时可以使用FLAG_ACTIVITY_NEW_TASK标志位:
Intent intent = new Intent(); intent.setClassName("com.example.app2", "com.example.app2.MainActivity"); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);
四、IntentFilter意图过滤器
在一个组件(Activity、Service或BroadcastReceiver)声明的时候,可以通过IntentFilter来指定该组件能够处理的Intent。这样,当一个Intent发出时,系统会循环检查当前安装的应用程序中声明了合适的IntentFilter的各个组件。这样可在运行时的程序中更加灵活地想操作系统声明程序所支持的Intent。
例如,在AndroidManifest.xml中配置IntentFilter,可以实现接收系统的短信:
<receiver android:name=".SmsReceiver"> <intent-filter android:priority="999"> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver>
五、总结
Intent是Android开发中不可或缺的一个重要组成部分。通过Intent,我们能够快速地实现应用程序之间的数据交互。对于初学者来说也非常容易入手,其中也有很多细节可以进行深入学习和掌握。