您的位置:首页 > 移动开发 > Android开发

android Activity 启动方法举例

2012-02-24 16:12 253 查看
首先对 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的更多用例,详见/article/6452254.html http://www.aidsex.cn
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: