zoukankan      html  css  js  c++  java
  • android Activity 启动方法举例

    首先对 android.intent.action.MAIN 以及android.intent.category.LAUNCHER做个说明

     一个应用程序可以有多个Activity,每个Activity是同级别的,那么在启动程序时,最先启动哪个Activity呢?有些程序可能需要显示在程序列表里,有些不需要。怎么定义呢?android.intent.action.MAIN决定应用程序最先启动的Activity android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里

    因为你的程序可能有很多个activity只要xml配置文件中有这么一个intent-filter,而且里面有这个launcher,那么这个activity就是点击程序时最先运行的那个activity。

    Activity的启动方法分为explicit(明确)以及implicit(隐藏)

    1.explicit:

       Activity的启动函数是 startActivity(Intent),explicit启动方式在构建Intent的时候,调用的是 Intent(Context,Class)的方式

       比如Intent intent= new Intent(this,newActivity.class);   其中的 newActivity是要启动的Activity的类名。

    2.implicit:

       通过implicit方式来启动Activity的话需要进行3个数据的匹配,分别是  action、category以及data

       与action、category以及data想对应的信息分别为函数  setAction、addCategory以及Uri

       1). 如何指定action呢?

            通过<intent-filter>
                      <action android:name="XXXXX"/>
           <category android:name="android.intent.category.DEFAULT"/>
                      <category android:name="BBBBB"/>
                       当然,这里的action以及category可以添加多个.
                 </intent-filter>

              通过 Intent intent = new Intent(); 
                     intent.setAction("XXXXX");
                     startActivity(intent);
                     来启动设置了action为XXXXX的Activity,也就是说,如果有多个Activity设置了<action android:name="XXXXX"/>,也是合法的,只是在启动的时候会让用户自行选择打开那个Activity。需要注意的是,通过implicit方法启动Activity一定要加上<category android:name="android.intent.category.DEFAULT"/>,否则会抛出异常。
                    还可以通过addCategory来添加启动条件,比如上面的代码加入 intent.addCategory("BBBBB"); 那一定要这两个条件都符合的Activity才可以启动。

                    需要注意的是,不通过setAction指定action,而只通过addCategory的条件来判断,是会抛出异常的。

          2)  对于data的说明  data有以下选项
                <data android:host="string" 
                android:mimeType="string" 
                android:path="string" 
                  android:pathPattern="string" 
                  android:pathPrefix="string" 
                  android:port="string" 
            android:scheme="string" /> 

                    Uri的格式为scheme://host:port/path or pathPrefix or pathPattern
                 匹配的时候是需要从左到右的,也就是说如果scheme没有匹配的话,根本就不会去匹配后面的比如host等

                 当我们在 <intent-filter> </intent-filter>  添加了 data之后,在代码里面还需要通过setAction来添加action才可以匹配,但是可以跳过addCategory,因为android默认为我们设置了一个 DEFAULT。
                  如果再1)中添加如下代码 <data android:scheme="what"/> 那 需要添加的代码还有 Uri uri=Uri.parse("what://");  intent.setData(uri);

                总得来说,通过implicit的方式来启动Activity,需要匹配action、category以及data,只有3个全部正常匹配之后,才能启动Activity,否则将会抛出异常。(addCategory,因为android默认为我们设置了一个DEFAULT)

               关于Uri的更多用例,详见http://www.cnblogs.com/rollrock/archive/2012/02/24/2366891.html   http://www.aidsex.cn

                 

  • 相关阅读:
    VS 高级版本新建的项目如何降级使低版本 VS 可以打开
    Windows下安装VScode,并使用,以及中文配置
    使用Cadence绘制PCB流程
    VS2013/2012 下无法打开 源 文件“stdafx.h”的解决方法
    如何对Redis设置密码,提高安全性
    关于redis启动流程介绍
    Redis笔记,安装和常用命令
    阿里云主机(aliyun-Linux) x64安装Redis详解
    几款开源的图形化Redis客户端管理软件
    redis配置文件redis.conf中文版(基于2.4)
  • 原文地址:https://www.cnblogs.com/rollrock/p/2366888.html
Copyright © 2011-2022 走看看