先看效果图:

1、Action:该activity可以执行的动作

该标识用来说明这个activity可以执行哪些动作,所以当隐式intent传递过来action时,如果跟这里<intent-filter>所列出的任意一个匹配的话,就说明这个activity是可以完成这个intent的意图的,可以将它激活!

常用的Action如下所示:

ACTION_CALL activity 启动一个电话.

ACTION_EDIT activity 显示用户编辑的数据.

ACTION_MAIN activity 作为Task中第一个Activity启动

ACTION_SYNC activity 同步手机与数据服务器上的数据.

ACTION_BATTERY_LOW broadcast receiver 电池电量过低警告.

ACTION_HEADSET_PLUG broadcast receiver 插拔耳机警告

ACTION_SCREEN_ON broadcast receiver 屏幕变亮警告.

ACTION_TIMEZONE_CHANGED broadcast receiver 改变时区警告.

两条原则:

一条<intent-filter>元素至少应该包含一个<action>,否则任何Intent请求都不能和该<intent-filter>匹配。

如果Intent请求的Action和<intent-filter>中个任意一条<action>匹配,那么该Intent就可以激活该activity(前提是除了action的其它项也要通过)。

两条注意:

如果Intent请求或<intent-filter>中没有说明具体的Action类型,那么会出现下面两种情况。如果<intent-filter>中没有包含任何Action类型,那么无论什么Intent请求都无法和这条<intent-filter>匹配。 反之,如果Intent请求中没有设定Action类型,那么只要<intent-filter>中包含有Action类型,这个Intent请求就将顺利地通过<intent-filter>的行为测试。

2、Category:指定当前动作(Action)被执行的环境

即这个activity在哪个环境中才能被激活。不属于这个环境的,不能被激活。

常用的Category属性如下所示:

CATEGORY_DEFAULT:Android系统中默认的执行方式,按照普通Activity的执行方式执行。表示所有intent都可以激活它 

CATEGORY_HOME:设置该组件为Home Activity。

CATEGORY_PREFERENCE:设置该组件为Preference。 

CATEGORY_LAUNCHER:设置该组件为在当前应用程序启动器中优先级最高的Activity,通常为入口ACTION_MAIN配合使用。 

CATEGORY_BROWSABLE:设置该组件可以使用浏览器启动。表示该activity只能用来浏览网页。 

CATEGORY_GADGET:设置该组件可以内嵌到另外的Activity中。

注意:如果该activity想要通过隐式intent方式激活,那么不能没有任何category设置,至少包含一个android.intent.category.DEFAULT

三 附《Intent调用常见系统组件方法》

// 调用浏览器  

Uri webViewUri = Uri.parse("http://blog.csdn.net/zuolongsnail");  

Intent intent = new Intent(Intent.ACTION_VIEW, webViewUri);  

// 调用地图  

Uri mapUri = Uri.parse("geo:100,100");  

Intent intent = new Intent(Intent.ACTION_VIEW, mapUri);  

// 播放mp3  

Uri playUri = Uri.parse("file:///sdcard/test.mp3");  

Intent intent = new Intent(Intent.ACTION_VIEW, playUri);  

intent.setDataAndType(playUri, "audio/mp3");  

// 调用拨打电话  

Uri dialUri = Uri.parse("tel:10086");  

Intent intent = new Intent(Intent.ACTION_DIAL, dialUri);  

// 直接拨打电话,需要加上权限<uses-permission id="android.permission.CALL_PHONE" />  

Uri callUri = Uri.parse("tel:10086");  

Intent intent = new Intent(Intent.ACTION_CALL, callUri);  

// 调用发邮件(这里要事先配置好的系统Email,否则是调不出发邮件界面的)  

Uri emailUri = Uri.parse("mailto:zuolongsnail@163.com");  

Intent intent = new Intent(Intent.ACTION_SENDTO, emailUri);  

// 直接发邮件  

Intent intent = new Intent(Intent.ACTION_SEND);  

String[] tos = { "zuolongsnail@gmail.com" };  

String[] ccs = { "zuolongsnail@163.com" };  

intent.putExtra(Intent.EXTRA_EMAIL, tos);  

intent.putExtra(Intent.EXTRA_CC, ccs);  

intent.putExtra(Intent.EXTRA_TEXT, "the email text");  

intent.putExtra(Intent.EXTRA_SUBJECT, "subject");  

intent.setType("text/plain");  

Intent.createChooser(intent, "Choose Email Client");  

// 发短信  

Intent intent = new Intent(Intent.ACTION_VIEW);  

intent.putExtra("sms_body", "the sms text");  

intent.setType("vnd.android-dir/mms-sms");  

// 直接发短信  

Uri smsToUri = Uri.parse("smsto:10086");  

Intent intent = new Intent(Intent.ACTION_SENDTO, smsToUri);  

intent.putExtra("sms_body", "the sms text");  

// 发彩信  

Uri mmsUri = Uri.parse("content://media/external/images/media/23");  

Intent intent = new Intent(Intent.ACTION_SEND);  

intent.putExtra("sms_body", "the sms text");  

intent.putExtra(Intent.EXTRA_STREAM, mmsUri);  

intent.setType("image/png");  

// 卸载应用  

Uri uninstallUri = Uri.fromParts("package", "com.app.test", null);  

Intent intent = new Intent(Intent.ACTION_DELETE, uninstallUri);  

// 安装应用  

Intent intent = new Intent(Intent.ACTION_VIEW);  

intent.setDataAndType(Uri.fromFile(new File("/sdcard/test.apk"), "application/vnd.android.package-archive");  

// 在Android Market中查找应用  

Uri uri = Uri.parse("market://search?q=愤怒的小鸟");           

Intent intent = new Intent(Intent.ACTION_VIEW, uri);

Demo源码

package mm.shandong.com.testactioncate;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View; public class TestActionCateActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_action_cate);
}
//启动activityTestComponentOtherActivity,设置intent的action为
//TestComponentOtherActivity1
public void startActivityToAction1(View view) {
Intent intent = new Intent();
intent.setAction("TestComponentOtherActivity1");
startActivity(intent);
}
//启动activityTestComponentOtherActivity,设置intent的action为
//TestComponentOtherActivity2
public void startActivityToAction2(View view) {
Intent intent = new Intent();
intent.setAction("TestComponentOtherActivity2");
startActivity(intent);
}
//启动activityTestComponentOtherActivity,设置intent的action为
//TestComponentOtherActivity3
public void startActivityToAction3(View view) {
Intent intent = new Intent();
intent.setAction("TestComponentOtherActivity3");
startActivity(intent);
}
//启动action为sameAction的activity,有两个activity设置了相同
//的action
public void startActivitySameAction1(View view) {
Intent intent = new Intent();
intent.setAction("sameAction");
startActivity(intent);
}
//启动action为Intent.ACTION_VIEW的activity,
// 系统浏览器的activity也设置了这个action
public void startActivitySameAction2(View view) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
startActivity(intent);
}
//启动一个设置了三个category的activity,这个category必须全都设置,
//才能启动
public void startActivityCategory(View view) {
Intent intent = new Intent();
intent.setAction("TestActionCate3Activity");
intent.addCategory("category1");
intent.addCategory("category2");
intent.addCategory("category3");
startActivity(intent);
} }

 

本人微博:honey_11

Demo下载
最后,以上例子都来源与安卓无忧,请去应用宝或者豌豆荚下载:例子源码,源码例子文档一网打尽

Intent属性详解二 Action、Category的更多相关文章

  1. Android零基础入门第80节:Intent 属性详解(下)

    上一期学习了Intent的前三个属性,本期接着学习其余四个属性,以及Android系统常用内置组件的启动. 四.Data和Type属性 Data属性通常用于向Action属性提供操作的数据.Data属 ...

  2. Android零基础入门第79节:Intent 属性详解(上)

    Android应用将会根据Intent来启动指定组件,至于到底启动哪个组件,则取决于Intent的各属性.本期将详细介绍Intent的各属性值,以及 Android如何根据不同属性值来启动相应的组件. ...

  3. Intent属性详解三 data、type和extra

    1 Data  执行时要操作的数据 在目标<data/>标签中包含了以下几种子元素,他们定义了url的匹配规则: android:scheme 匹配url中的前缀,除了“http”.“ht ...

  4. Intent属性详解一 component属性

    先看效果图 概述 在介绍Component之前,我们首先来了解ComponentName这个类:ComponentName与Intent同位于android.content包下,我们从Android官 ...

  5. OutputCache属性详解(二)一 Location

    目录 OutputCache概念学习 OutputCache属性详解(一) OutputCache属性详解(二) OutputCache属性详解(三) OutputCache属性详解(四)— SqlD ...

  6. Intent知识详解

    Intent知识详解 一.什么是Intent 贴一个官方解释: An intent is an abstract description of an operation to be performed ...

  7. Android开发–Intent-filter属性详解

    Android开发–Intent-filter属性详解 2011年05月09日 ⁄ Andriod ⁄ 暂无评论 ⁄ 被围观 1,396 views+ 如果一个 Intent 请求在一片数据上执行一个 ...

  8. Android View 的绘制流程之 Layout 和 Draw 过程详解 (二)

    View 的绘制系列文章: Android View 的绘制流程之 Measure 过程详解 (一) Android View 绘制流程之 DecorView 与 ViewRootImpl 在上一篇  ...

  9. Flask request 属性详解

    Flask request 属性详解 一.关于request在Flask的官方文档中是这样介绍request的:对于 Web 应用,与客户端发送给服务器的数据交互至关重要.在 Flask 中由全局的 ...

随机推荐

  1. 前端学PHP之运算符

    × 目录 [1]总括 [2]算术运算符 [3]赋值运算符[4]位运算符[5]比较运算符[6]错误控制[7]逻辑运算符[8]字符串连接[9]数组运算符 前面的话 运算符是可以通过给出的一或多个表达式来产 ...

  2. Android获取短信验证码

    Android开发中关于短息验证码的设计层出不穷,越来越多的应用为了更好的提高软件的安全性,开始使用通过服务器向用户发送验证码的方式,来保护用户个人信息的安全性.无论是用户注册时的信息验证还是当用户发 ...

  3. 用 namspace 隔离 DHCP 服务 - 每天5分钟玩转 OpenStack(90)

    Neutron 通过 dnsmasq 提供 DHCP 服务,而 dnsmasq 如何独立的为每个 network 服务呢? 答案是通过 Linux Network Namespace 隔离,本节将详细 ...

  4. Python快速教程 尾声

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 写了将近两年的Python快速教程,终于大概成形.这一系列文章,包括Python基 ...

  5. MySQL中RESET SLAVE和RESET MASTER的区别

    RESET SLAVE的语法如下: RESET SLAVE [ALL] [channel_option] channel_option: FOR CHANNEL channel 其中,channel_ ...

  6. ES6学习--搭建环境

    ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了.它的目标,是使得JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发 ...

  7. iOS 如何设置导航的滑动返回手势, 和系统饿一样

    iOS 7 滑动返回那些事儿 2014/05/17 Wei .entry-meta .entry-header 在智能机越来越普及,屏幕越做越大的当下,滑动返回手势已经成为了一个应用的标配功能,甚至可 ...

  8. 用JqueryUI的Dialog+IFrame实现仿模态窗口效果

    大家有没有想过这样一个问题,当我点击某个图片的时候,我想弹出这个图片信息的详情并修改,于是你首先想到的是不是window.open?window.open方法确实可以,但是有它的局限性,比如,标题显示 ...

  9. FusionChart 水印破解方法(代码版)

    网上一直找不到有关去除水印的方法! 正好做项目要用到这个鬼东西,折腾了一天,总算破解成功,把方法告诉大家. 先看下破解前的效果. 这是个很烦人的东西,而且有一个更加让人烦人的地方, 就是根本无法买!为 ...

  10. 汽车之家一道SQL 面试题,大家闲来无事都来敲一敲

    写在前面 上周去汽车之家面试,拿到这个SQL笔试题顿时感觉到有些陌生,因为好长时间不写SQL语句了,当时只写了表设计,示例数据和SQL语句都没写出来. 汽车之家应该用的SQL Server, 编程题一 ...