Android 意图(Intent)和过滤器(Filter)
Android意图是一个要执行的操作的抽象描述。它可以通过 startActivity 来启动一个活动,broadcastIntent 来发送广播到任何对它感兴趣的广播接受器组件,startService(Intent) 或者bindService(Intent, ServiceConnection, int) 来与后台服务通讯。
意图本身(一个 Intent 对象)是一个被动的数据结构,保存着要执行操作的抽象描述。
例如,你有一个活动,需要打开邮件客户端并通过 Android 设备来发送邮件。为了这个目的,你的活动需要发送一个带有合适选择器的 ACTION_SEND 到 Android 意图处理者。指定的选择器给定合适的界面来让用户决定如何发送他的邮件数据。
Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));
email.putExtra(Intent.EXTRA_EMAIL, recipients);
email.putExtra(Intent.EXTRA_SUBJECT, subject.getText().toString());
email.putExtra(Intent.EXTRA_TEXT, body.getText().toString());
startActivity(Intent.createChooser(email, "Choose an email client from..."));
上面的语法调用 startActivity 方法来开启邮件活动,代码运行结果看起来像这样:
例如,你有一个活动,需要在 Android 设备上通过浏览器打开一个URL。为了这个目的,你的活动发送 ACTION_WEB_SEARCH 意图到 Android 意图处理器来在浏览器中打开给定的 URL 。意图处理器通过解析一系列活动,并选择最适合你的意图的一个活动,在这个例子中,是 Web 浏览器活动。意图处理器传递你的网页地址到 Web 浏览器,并打开 Web 浏览器活动。
String q = "https://www.runoob.com";
Intent intent = new Intent(Intent.ACTION_WEB_SEARCH );
intent.putExtra(SearchManager.QUERY, q);
startActivity(intent);
上面的例子将在Android搜索引擎上查找"www.runoob.com",并在一个活动上给出关键词的结果。
对于每一个组件-活动,服务,广播接收器都有独立的机制来传递意图。
序号 | 方法和描述 |
---|---|
1 | Context.startActivity():意图传递给该方法,用于启动一个新的活动或者让已存在的活动做一些新的事情。 |
2 | Context.startService():意图传递给该方法,将初始化一个服务,或者新的信息到一个持续存在的服务。 |
3 | Context.sendBroadcast():意图传递给该方法,信息将传递到所有对此感兴趣的广播接收器。 |