Intent属性详解二 Action、Category

先看效果图:

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:[email protected]");  

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

// 直接发邮件  

Intent intent = new Intent(Intent.ACTION_SEND);  

String[] tos = { "[email protected]" };  

String[] ccs = { "[email protected]" };  

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下载
最后,以上例子都来源与安卓无忧,请去应用宝或者豌豆荚下载:例子源码,源码例子文档一网打尽

时间: 2024-12-29 07:02:28

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

Intent属性详解一 component属性

先看效果图 概述 在介绍Component之前,我们首先来了解ComponentName这个类:ComponentName与Intent同位于android.content包下,我们从Android官方文档中可以看到,这个类主要用来定义可见一个应用程序组件,例如:Activity,Service,BroadcastReceiver或者ContentProvider. 那么,如何用ComponentName来定义一个组件呢.这是ComponentName的构造函数:ComponentName(St

Swift研究之编程高级教程(二)属性,存储属性详解

 属性 属性是依赖于某个特定的类.结构体或者枚举类型的值.Swift有两种属性:存储类型和计算类型.其中存储类型可以作为实例的一部分存放变量或者常量的值,而计算类型的属性值是通过运算的来的.计算类型的属性可以在类.结构体和枚举类型中出现,但存储类型只可能出现在类和结构体类型中. 属性一般依赖于一个特定类型的实例,但是也可以依赖于类本身.依赖于类型本身的属性称为类型属性. 可以定义属性观察者来监督属性值的改变,从而作出响应.对集合不明白的看集合类型-数组详解 存储属性 常量属性let的值在初始

LinearLayout详解二:从其父类View说起

这个View类说来就话长了,但我们又不得不说,要说呢,就得说的彻底,要让大家看得一清二楚,明明白白.所以我们就从源代码角度来看一个view是如何被加载的吧. 如果大家不知道怎么下载android的源代码,或者说懒得去下载(因为源代码确实比较大,大概有10G)的话,教大家几个取巧的办法: 1.直接在google中输入"android view.java"即可.这种方法成功率非常高,一般android的比较重要的类都能搜到. 2.给大家提供一个人家用于放源码的的git:[email pro

Flask request 属性详解

Flask request 属性详解 一.关于request在Flask的官方文档中是这样介绍request的:对于 Web 应用,与客户端发送给服务器的数据交互至关重要.在 Flask 中由全局的 request 对象来提供这些信息. 从Flask模块导入request:from flask import requestrequest的属性:下面是request可使用的属性,其中黑体是比较常用的. 二.常用方法的使用 #代码示例,仅仅是为了测试request的属性值 @app.route('/

css动画-animation各个属性详解(转)

CSS3的animation很容易就能实现各种酷炫的动画,虽然看到别人的成果图会觉得很难,但是如果掌握好各种动画属性,做好酷炫吊炸天的动画都不在话下,好,切入正题. 一.动画属性: 动画属性包括:①animation-name,②animation-duration,③animation-timing-function, 以下是各属性详解: 1.animation-name:指定要绑定到选择器的关键帧的名称. 2.animation-duration:定义动画完成一个周期需要多少秒或毫秒 3.a

Hibernate fetch属性详解

主要参考 :http://4045060.blog.51cto.com/4035060/1088025 一.hibernate抓取策略(单端代理的批量抓取fetch=select(默认)/join) 1)保持默认,同fetch="select" <many-to-one name="group" column="group_id" fetch="select" /> 另外发送一条select语句抓取当前对象关联实体

UINavigationController详解二(转)页面切换和SegmentedController

原文出自:http://blog.csdn.net/totogo2010/article/details/7682433,非常感谢. 1.RootView 跳到SecondView 首先我们需要新一个View.新建SecondView,按住Command键然后按N,弹出新建页面,我们新建SecondView 2.为Button 添加点击事件,实现跳转 在RootViewController.xib中和RootViewController.h文件建立连接 在RootViewController.m

HTML中META属性详解 转载自 hero_213的博客

HTML中META属性详解 meta是html语言head区的一个辅助性标签.几乎所有的网页里,我们可以看到类似下面这段的html代码: <head> <meta   http-equiv= "content-Type "   content= "text/html;   charset=gb2312 "> </head>         也许你认为这些代码可有可无.其实如果你能够用好meta标签,会给你带来意想不到的效果,例如加

Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)

[Android布局学习系列]   1.Android 布局学习之——Layout(布局)详解一   2.Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)   3.Android 布局学习之——LinearLayout的layout_weight属性   4.Android 布局学习之——LinearLayout属性baselineAligned的作用及baseline    Layout Parameters(布局参数): 在XML文件中,我们经常看到类似与lay