zoukankan      html  css  js  c++  java
  • android细节之android.intent.category.DEFAULT的使用

    我们知道,实现android的Activity之间相互跳转需要用到Intent,

    Intent又分为显式Intent和隐式Intent,

    显式Intent很简单,比如我在FirstActivity中想跳转到SecondActivity,只需要直接声明就行了:

    Intent intent = new Intent(FirstActivity.this, SecondActivity.class);

    而在使用隐式Intent实现Activity之间跳转的时候,并没有明确指定要打开哪个activity,

    而是通过指定3个参数:action,category,data,

    然后让系统去寻找能够匹配得上这三个参数的Acativity,如果有多个符合条件的Activity,就会让用户选择其中一个打开。

    例如我选择手机相册中的一张照片,点击“发送”按钮:

    然后就可以让我选择是发送给QQ好友,微信好友还是发送到朋友圈。这实际上就是一个隐式Intent启动Activity的实例。

    而决定一个Activity能够响应哪些Intent,就需要在AndroidManifest.xml的<activity>标签下配置<intent-filter>的内容,可以指定当前活动能够响应的action,category和data,比如说我在SecondActivity下设置如下代码:

    复制代码
    <activity
    android:name=".SecondActivity" android:label="@string/title_activity_second" android:theme="@style/AppTheme.NoActionBar" > <intent-filter> <action android:name="android.intent.action.MYACTION" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.MYCATEGORY" /> </intent-filter>
    </activity>
    复制代码

    再在MainActivity中通过隐式Intent:

    Intent intent=new Intent("android.intent.action.MYACTION");
    startActivity(intent);

    然后就启动了SecondActivity。

    在这里,看似我们在Intent中只指定了要打开的活动只需要响应一个Action为“android.intent.action.MYACTION”就行,但是实际上,系统在使用隐式Intent的时候,会自动帮我们添加上“android.intent.category.default”,所以——实际上所有需要被隐式Intent启动的activity,都要加上<category android:name="android.intent.category.DEFAULT" />这一段声明,否则就会启动不了并提示无法匹配该Intent的错误:

    如果你要隐式启动的那个活动是程序最先启动的那个activity,

    即声明了<category android:name="android.intent.category.LAUNCHER" />,

    就可以不用写<category android:name="android.intent.category.DEFAULT" />的声明了,

    (在这里LAUNCHER,就是你打开程序,最先启动的那一个Activity。)另外,LAUNCHER一定要配合action MAIN一起使用,否则不会启动,即:

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
    
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
  • 相关阅读:
    自动化单元测试工具 EvoSuite 的简单使用
    Dialog lookup method
    微软Axapta中PDF支持中文
    Connected to Ax AOS by code
    Dialog control field event
    Find the tables extending a specific extended data type
    sqlplus不使用服务名,直接使用IP地址连接Oracle
    ATL编写的带窗口的控件,无论VC6(ATL3.0) VC7.1(ATL7.0) 在Windows 7 或 Server 2008 下,WinForm调用时发生的问题
    Ice的slice文件自定义编译命令
    VC9 SP1中新增加的标准 C++ 库中的新功能
  • 原文地址:https://www.cnblogs.com/Alex80/p/11611587.html
Copyright © 2011-2022 走看看