关于AndroidManifest.xml中activity标签

来源:互联网 发布:溪谷软件 编辑:程序博客网 时间:2024/04/29 00:50

        一般情况下,在新建一个activity后,为了使intent可以调用此活动,我们要在androidManifest.xml文件中添加一个<activity>标签,<activity>标签的一般格式如下:

        <activity            android:name="my.test.intents.MainActivity"            android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>
        其中,"android:name"是活动对应的类名称,"android:label"是活动标题栏显示的内容,<intent-filter>是意图筛选器,<action>是动作名称,是指intent要执行的动作,<category>是类别名称,一般情况下,每个<intent-filter> 中都要显示指定一个默认的类别名称,即<category android:name="android.intent.category.DEFAULT" />,但是上面的代码中没有指定默认类别名称,这是一个例外情况,因为其<intent-filter> 中的<action>是"android.intent.action.MAIN",意思是这项活动是应用程序的入口点,这种情况下可以不加默认类别名称。

        当然,除<action>和<category>以外,<intent-filter>中还有很多其他元素,在这里不详述。

        上面的代码是androidManifest.xml中定义程序入口活动的例子,下面我们写一个自定义的例子:

        <activity            android:name=".MyBrowserActivity"            android:label="My Activity" >            <intent-filter>                <action android:name="my.test.MyBrowser"/>                <category android:name="android.intent.category.DEFAULT" />                <data android:scheme="http"/>            </intent-filter>        </activity>
        在这个<activity>标签中,我们指定活动的类为MyBrowserActivity.class,活动的标题显示为"My Activity",<action android:name="my.test.MyBrowser"/>意味着其他活动可以通过my.test.MyBrowser动作来调用这个活动,"my.test.MyBrowser"只是我们定义的一个动作的名称,写成包的形式是因为这样使我们更容易理解它的含义,如果我们把"my.test.MyBrowser"改成任意的内容如:"somethingelse",同样,我们可以通过这个新的动作名称,来调用这个活动。<data> 元素指定了活动期望的数据类型,在这里,它期望的数据要以http://前缀开头。

        正如前文所说,一般情况下,每个<intent-filter>中都要显示地指定一个默认的类别名称,在我们自定义的活动中,我们指定了这个默认类别,假如没有这行代码,这个活动将不能被其他活动调用,一旦调用,就会导致程序的崩溃。这里有个小技巧,我们可以通过使用createChooser()来防止这种原因的崩溃,如下所示:

public void onClick(View view){Intent i = new Intent("my.test.MyBrowser");i.setData(Uri.parse("http://www.baidu.com"));startActivity(Intent.createChooser(i, "Open URL using..."));}
        上面的函数实现点击按钮打开浏览器并浏览百度主页的功能,如果我们注释掉androidManifest.xml中对应activity的默认类别名称,在调用这个活动时(点击Launch My Browser按钮),不会产生崩溃,而是会弹出一个选择框,标题为"Open URL using...",内容为“无法找到应用程序以执行该操作”,如下图所示:

        以上是对androidManifest.xml中的<activity>标签的一点总结,那么究竟哪种情况下需要指定默认类别,哪种请款下不需要指定呢,以及使用intent调用活动的整个流程是什么样的呢?详见http://blog.csdn.net/iverain/article/details/38660271   点击打开链接


0 0
原创粉丝点击