android category

本章节翻译自《Beginning-Android-4-Application-Development》,如有翻译不当的地方,敬请指出。

原书购买地址http://www.amazon.com/Beginning-Android-4-Application-Development/dp/1118199545/

通过使用Intent-Filter中的<category>元素,我们可以把activities进行分组。假设已经在AndroidManifest.xml中添加了<category>元素:

[java] view plaincopy

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.manoel.Intents"
  4. android:versionCode="1"
  5. android:versionName="1.0" >
  6. <uses-sdk android:minSdkVersion="14" />
  7. <uses-permission android:name="android.permission.CALL_PHONE" />
  8. <uses-permission android:name="android.permission.INTERNET" />
  9. <application
  10. android:icon="@drawable/ic_launcher"
  11. android:label="@string/app_name" >
  12. <activity
  13. android:name=".IntentsActivity"
  14. android:label="@string/app_name" >
  15. <intent-filter>
  16. <action android:name="android.intent.action.MAIN" />
  17. <category android:name="android.intent.category.LAUNCHER" />
  18. </intent-filter>
  19. </activity>
  20. <activity
  21. android:name=".MyBrowserActivity"
  22. android:label="@string/app_name" >
  23. <intent-filter>
  24. <action android:name="android.intent.action.VIEW" />
  25. <action android:name="net.learn2develop.MyBrowser" />
  26. <category android:name="android.intent.category.DEFAULT" />
  27. <category android:name="com.manoel.Apps" />
  28. <data android:scheme="http" />
  29. </intent-filter>
  30. </activity>
  31. </application>
  32. </manifest>

在这种情况下,以下的代码将直接调用MyBrowserActivity:

[java] view plaincopy

  1. Intent i = new
  2. Intent(android.content.Intent.ACTION_VIEW,
  3. Uri.parse("http://www.amazon.com"));
  4. nbsp;// 注意这句代码
  5. i.addCategory("com.manoel.Apps");
  6. startActivity(Intent.createChooser(i, "Open URL using..."));

在以上的代码中,我们使用addCategory()方法为Intent对象添加Category属性。如果遗漏了addCategory()这句,之前的代码仍然能够调用MyBrowserActivity,因为它仍然匹配了默认的Category:android.intent.category.DEFAULT。

但是,如果指定了一个并没有在Intent-Filter中定义的Category,那么,将不会有Activity被调用:

[java] view plaincopy

  1. Intent i = new
  2. Intent(android.content.Intent.ACTION_VIEW,
  3. Uri.parse("http://www.amazon.com"));
  4. // i.addCategory("net.learn2develop.Apps");
  5. // 这个category不匹配Intent-Filter中的任何category
  6. i.addCategory("net.learn2develop.OtherApps");
  7. startActivity(Intent.createChooser(i, "Open URL using..."));

net.learn2develop.OtherApps,不匹配Intent-Filter中的任何一个Category,所以,运行以上代码的时候,将会抛出一个运行时异常。

但是,如果在AndroidManifest.xml中添加如下代码,之前的代码就可以运行了:

[java] view plaincopy

  1. <activity android:name=".MyBrowserActivity"
  2. android:label="@string/app_name">
  3. <intent-filter>
  4. <action android:name="android.intent.action.VIEW" />
  5. <action android:name="net.learn2develop.MyBrowser" />
  6. <category android:name="android.intent.category.DEFAULT" />
  7. <category android:name="net.learn2develop.Apps" />
  8. <!--  添加这句代码 -->
  9. <category android:name="net.learn2develop.OtherApps" />
  10. <data android:scheme="http" />
  11. </intent-filter>
  12. </activity>

也可以为Intent对象添加多重Category属性,举个例子:

[java] view plaincopy

  1. Intent i = new
  2. Intent(android.content.Intent.ACTION_VIEW,
  3. Uri.parse("http://www.amazon.com"));
  4. // 多重的Category
  5. i.addCategory("com.manoel.Apps");
  6. i.addCategory("com.manoel.OtherApps");
  7. i.addCategory("com.manoel.SomeOtherApps");
  8. startActivity(Intent.createChooser(i, "Open URL using..."));

因为Intent-Filter中并没有定义net.learn2develop.SomeOtherApps这个Category,以上的代码将不会调用MyBrowserActivity。如果想要解决这个问题,那么,在目标Activity被调用之前,添加到Intent对象中的所有Category属性都必须全部地被定义在Intent-Filter中。

时间: 2024-11-01 05:32:32

android category的相关文章

android 面试

2. 横竖屏切换时候 activity 的生命周期1. 不设置 Activity 的 android:configChanges 时 , 切屏会重新调用各个生命周期 , 切横屏时会执行一次 , 切竖屏时会执行两次 . 2. 设置 Activity 的 android:configChanges=”orientation” 时 , 切屏还是会重新调用各个生命周期 , 切横.竖屏时只会执行一次 . 3. 设置 Activity 的 android:configChanges=”orientation

Android面试题(2)

1.activity的生命周期 方法 描述 可被杀死 下一个 onCreate() 在activity第一次被创建的时候调用.这里是你做所有初始化设置的地方──创建视图.设置布局.绑定数据至列表等.如果曾经有状态记录(参阅后述Saving Activity State.),则调用此方法时会传入一个包含着此activity以前状态的包对象做为参数. 总继之以onStart(). 否 onStart() onRestart() 在activity停止后onStop(),在再次启动之前被调用. 总继之

Intent应用详解-Android开发

一.Intent介绍: Intent的中文意思是“意图,意向”,在Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用.Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互.因此,可以将Intent理解为不同组件之间通信的“媒介”专门提供组件互相调用的相关

Android API Guides---Host-based Card Emulation

Host-based Card Emulation 许多提供NFC功能的Andr??oid手机已经支持NFC卡模拟.在大多数情况下,该卡是由在该装置的单独芯片仿真,称为安全元件.无线运营商提供了很多的SIM卡还包含一个安全元件. Android 4.4系统的介绍卡仿真的一个额外的方法,不涉及安全的元素,称为基于主机的卡仿真.这允许任何Android应用程序来模拟卡,并直接交谈的NFC读取器.本文介绍了基于主机的卡模拟(HCE)如何适用于Android以及如何开发模拟使用这种技术的NFC卡的应用程

android intent和intent action大全

1.Intent的用法: (1)用Action跳转 1.使用Action跳转,如果有一个程序的AndroidManifest.xml中的某一个 Activity的IntentFilter段中 定义了包含了相同的Action那么这个Intent就与这个目标Action匹配.如果这个IntentFilter段中没有定义 Type,Category,那么这个 Activity就匹配了.但是如果手机中有两个以上的程序匹配,那么就会弹出一个对话可框来提示说明. Action 的值在Android中有很多预

Android Intent 使用整理

在一个Android应用中,主要是由一些组件组成,(Activity,Service,ContentProvider,etc.)在这些组件之间的通讯中,由Intent协助完成. 正如网上一些人解析所说,Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用.Intent在这里起着实现调用者与被调用者之间的解耦作用.Intent传递过程中,要找到目标消费者(另一个Act

Android HCE开发配置AID响应关系总结

开发HCE功能必须使用到HostApduService,在使用HostApduService时需要配置HostApduService的对应AID,同一个手机可能安装多个HCE APP,或者同一个APP包含多个HostApduService,这时候就需要搞清楚配置的AID和对应的HostApduService之间的响应向后问题. 首先介绍一下关于HostApduService的AID配置问题,AID有两种模式:other和payment 第一种 <host-apdu-service xmlns:a

【转载】Android开发学习笔记:Intent的简介以及属性的详解

http://liangruijun.blog.51cto.com/3061169/634411/ 一.Intent的介绍 Intent的中文意思是“意图,意向”,在Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用.Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Serv

Android 关于 actionsherlock 的使用

最近一个星期被 actionsherlock 搞得很不爽(光去足疗店就去了三次--减压),本来觉得应该不太会难啊(Android 已经基本入门),毕竟编程(虽然我是搞 .NET 的,但 Java 跟 .NET 有 90% 的相似度,虽然没用 Java 做过项目,但也不至于对 Java 什么都不懂--)也有年头了,可看了些资料和示例后,自我感觉,简单搞一下还行,但达到做项目的程度,还是复杂了点,到现在都没能体会~ 看来啊,还是在官网系统地看写资料从头来过吧.近期想自己写个 Android APP,