android中的category

本文详细介绍了 Android 中 Intent 的各种类别及其用途,包括如何利用这些类别实现特定功能,如启动不同类型的内置应用和服务,以及如何根据设备上的可用应用动态添加菜单选项。
  1. CATEGORY_ALTERNATIVE  
  2. 设置这个activity是否可以被认为是用户正在浏览的数据的一个可选择的action;
  3. 有时你可能希望通过一个菜单项使用Intent启动一个activiry(不论这个activit在你自己的程序中还是在另一个程序中 ).如果你知道了需要的Intent,你可以在响应对应菜单项的回调方法中执行Intent的startActivity()方法完成.

    然而,如果你不能确信用户设备上具有响应这个intent的程序,那么添加的菜单项可能成多余的.为了解决这个问题,Android 
    允许你在发现具有所有响应目标intent的activity时动态添加菜单项.要跟据是否具有响应目标intent的Activity来添加菜单项,你需要:
    定义一个具有类别 CATEGORY_ALTERNATIVE 和/或CATEGORY_SELECTED_ALTERNATIVE的intent,当然还可以跟据需要添加其它类别.
    调用 Menu.addIntentOptions(). Android会查找可以执行这个的程序然后把它添加到你的菜单上.如此一来,如果没有满之intent的程序存在,则没有菜单项会添加.

    注:CATEGORY_SELECTED_ALTERNATIVE被用于处理屏幕上当前被选择的元素.所以,它只能用于在onCreateContextMenu()中被建的菜单.

  4. CATEGORY_APP_BROWSER  
  5. 和ACTION_MAIN一起使用,用来启动浏览器应用程序  
  6.    
  7. CATEGORY_APP_CALCULATOR  
  8. 和ACTION_MAIN一起使用,用来启动计算器应用程序  
  9.    
  10. CATEGORY_APP_CALENDAR  
  11. 和ACTION_MAIN一起使用,用来启动日历应用程序  
  12.    
  13. CATEGORY_APP_CONTACTS  
  14. 和ACTION_MAIN一起使用,用来启动联系人应用程序  
  15.    
  16. CATEGORY_APP_EMAIL  
  17. 和ACTION_MAIN一起使用,用来启动邮件应用程序  
  18.    
  19. CATEGORY_APP_GALLERY  
  20. 和ACTION_MAIN一起使用,用来启动图库应用程序  
  21.    
  22. CATEGORY_APP_MAPS  
  23. 和ACTION_MAIN一起使用,用来启动地图应用程序  
  24.    
  25. CATEGORY_APP_MARKET  
  26. 这个activity允许用户浏览和下载新的应用程序  
  27.    
  28. CATEGORY_APP_MESSAGING  
  29. 和ACTION_MAIN一起使用,用来启动短信应用程序  
  30.    
  31. CATEGORY_APP_MUSIC  
  32. 和ACTION_MAIN一起使用,用来启动音乐应用程序  
  33.    
  34. CATEGORY_BROWSABLE   
  35. 能够被浏览器安全调用的activity必须支持这个category  
  36.    
  37. CATEGORY_DEFAULT   
  38. 设置这个activity对于默认的action是否是一个可选的  
  39.    
  40. CATEGORY_EMBED   
  41. 可以运行在父activity容器内  
  42.    
  43. CATEGORY_HOME   
  44. 主activity,当应用程序启动时,它是第一个显示的activity  
  45.    
  46. CATEGORY_LAUNCHER  
  47. 应该在上层的启动列表里显示  
  48.   
  49. CATEGORY_MONKEY  
  50. 这个activity可能被monkey或者其他的自动测试工具执行  
  51.    
  52. CATEGORY_OPENABLE   
  53. 用来指示一个GET_CONTENT意图只希望ContentResolver.openInputStream能够打开URI  
  54.    
  55. CATEGORY_PREFERENCE   
  56. 这个activity是一个选项卡  
  57.    
  58. CATEGORY_SAMPLE_CODE   
  59. 作为一个简单的代码示例使用(一般情况下不使用)  
  60.    
  61. CATEGORY_SELECTED_ALTERNATIVE  
  62. 设置这个activity是否可以被认为是用户当前选择的数据的一个可选择的action  
  63.    
  64. CATEGORY_TAB   
  65. 想要在已有的TabActivity内部作为一个Tab使用  
  66.    
  67. CATEGORY_TEST  
  68. 供测试使用(一般情况不使用)  
  69.    
  70. CATEGORY_UNIT_TEST  
  71. 联合测试使用  

### Android 中 `category` 属性的作用与使用方法 #### `category` 的作用 在 Android 应用开发中,`category` 是用于进一步描述和过滤 `Intent` 的一种机制。它通常与 `action` 配合使用,以帮助系统确定哪些 `Activity`、`Service` 或 `BroadcastReceiver` 可以响应特定的 `Intent` 请求。 `category` 的主要作用包括: - **限定 Intent 的使用场景**:通过添加不同的 `category`,可以指定某个 `Intent` 只在特定条件下被接收。例如,`android.intent.category.LAUNCHER` 表示该 `Activity` 可以作为应用的入口点。 - **支持多条件匹配**:一个 `IntentFilter` 可以包含多个 `category`,从而实现更精确的组件匹配。 - **确保默认行为**:在某些情况下,必须包含 `android.intent.category.DEFAULT` 才能保证组件能够接收隐式 `Intent`。 #### `category` 的使用方法 ##### 1. 在 `AndroidManifest.xml` 中声明 在 `AndroidManifest.xml` 文件中,可以通过 `<intent-filter>` 为组件(如 `Activity`)定义 `category`,例如: ```xml <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> ``` 上述代码表示 `MainActivity` 是应用的启动界面,用户点击应用图标时将启动该 `Activity`。在这种情况下,不需要添加 `android.intent.category.DEFAULT`,因为系统已经默认将其包含在内 [^1]。 ##### 2. 添加默认 `category` 当使用隐式 `Intent` 启动组件时,如果未在 `Intent` 中显式指定 `category`,系统会自动为其添加 `android.intent.category.DEFAULT`。因此,在 `AndroidManifest.xml` 中定义的 `<intent-filter>` 必须包含该 `category`,否则组件将无法接收到该 `Intent`: ```xml <activity android:name=".SecondActivity"> <intent-filter> <action android:name="com.example.ACTION_CUSTOM" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> ``` ##### 3. 在代码中动态设置 在 Java/Kotlin 代码中,也可以通过 `Intent` 对象动态添加 `category`: ```java Intent intent = new Intent("com.example.ACTION_CUSTOM"); intent.addCategory("com.example.CATEGORY_CUSTOM"); startActivity(intent); ``` 对应的 `Activity` 必须在其 `<intent-filter>` 中声明相同的 `category` 才能接收到该 `Intent` [^2]。 ##### 4. 自定义 `category` 开发者可以定义自己的 `category`,建议使用包名作为前缀以避免冲突。例如: ```xml <category android:name="com.example.app.CATEGORY_FEATURED" /> ``` 这种方式适用于特定业务逻辑或模块化组件的筛选 。 ##### 5. 特殊用途的 `category` 一些系统定义的 `category` 用于特定用途,例如: - `android.intent.category.HOME`:表示该 `Activity` 是系统主屏幕界面。 - `android.intent.category.BROWSABLE`:允许 `Activity` 被浏览器调用以打开链接。 - `android.intent.category.PREFERENCE`:用于设置界面。 系统在解析这些 `category` 时会自动添加 `android.intent.category.DEFAULT` 以确保匹配 [^3]。 #### 注意事项 - 每个 `IntentFilter` 至少应包含一个 `category`,否则可能导致组件无法响应预期的 `Intent`。 - 在使用自定义 `category` 时,务必确保其唯一性,推荐使用包名前缀。 - `Intent` 中的 `category` 必须与 `AndroidManifest.xml` 中定义的完全匹配,否则组件将不会被调用。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值