当前位置:   article > 正文

Intent属性详解二 Action、Category_intent中的action和category的区别

intent中的action和category的区别

先看效果图:

1、Action:该activity可以执行的动作

该标识用来说明这个activity可以执行哪些动作,所以当隐式intent传递过来action时,如果跟这里<intent-filter>所列出的任意一个匹配的话,就说明这个activity是可以完成这个intent的意图的,可以将它激活!

常用的Action如下所示:

ACTION_CALL activity 启动一个电话.  

ACTION_EDIT activity 显示用户编辑的数据.  

ACTION_MAIN activity 作为Task中第一个Activity启动  

ACTION_SYNC activity 同步手机与数据服务器上的数据.  

ACTION_BATTERY_LOW broadcast receiver 电池电量过低警告.  

ACTION_HEADSET_PLUG broadcast receiver 插拔耳机警告  

ACTION_SCREEN_ON broadcast receiver 屏幕变亮警告.  

ACTION_TIMEZONE_CHANGED broadcast receiver 改变时区警告.  

两条原则:

      一条<intent-filter>元素至少应该包含一个<action>,否则任何Intent请求都不能和该<intent-filter>匹配。

      如果Intent请求的Action和<intent-filter>中个任意一条<action>匹配,那么该Intent就可以激活该activity(前提是除了action的其它项也要通过)。

两条注意:

     如果Intent请求或<intent-filter>中没有说明具体的Action类型,那么会出现下面两种情况。如果<intent-filter>中没有包含任何Action类型,那么无论什么Intent请求都无法和这条<intent-filter>匹配。 反之,如果Intent请求中没有设定Action类型,那么只要<intent-filter>中包含有Action类型,这个Intent请求就将顺利地通过<intent-filter>的行为测试。

2、Category:指定当前动作(Action)被执行的环境

即这个activity在哪个环境中才能被激活。不属于这个环境的,不能被激活。

常用的Category属性如下所示:

 CATEGORY_DEFAULT:Android系统中默认的执行方式,按照普通Activity的执行方式执行。表示所有intent都可以激活它   

CATEGORY_HOME:设置该组件为Home Activity。  

CATEGORY_PREFERENCE:设置该组件为Preference。   

CATEGORY_LAUNCHER:设置该组件为在当前应用程序启动器中优先级最高的Activity,通常为入口ACTION_MAIN配合使用。   

CATEGORY_BROWSABLE:设置该组件可以使用浏览器启动。表示该activity只能用来浏览网页。   

CATEGORY_GADGET:设置该组件可以内嵌到另外的Activity中。  

注意:如果该activity想要通过隐式intent方式激活,那么不能没有任何category设置,至少包含一个android.intent.category.DEFAULT

三 附《Intent调用常见系统组件方法》

  1. // 调用浏览器
  2. Uri webViewUri = Uri.parse("http://blog.csdn.net/zuolongsnail");
  3. Intent intent = new Intent(Intent.ACTION_VIEW, webViewUri);
  4. // 调用地图
  5. Uri mapUri = Uri.parse("geo:100,100");
  6. Intent intent = new Intent(Intent.ACTION_VIEW, mapUri);
  7. // 播放mp3
  8. Uri playUri = Uri.parse("file:///sdcard/test.mp3");
  9. Intent intent = new Intent(Intent.ACTION_VIEW, playUri);
  10. intent.setDataAndType(playUri, "audio/mp3");
  11. // 调用拨打电话
  12. Uri dialUri = Uri.parse("tel:10086");
  13. Intent intent = new Intent(Intent.ACTION_DIAL, dialUri);
  14. // 直接拨打电话,需要加上权限<uses-permission id="android.permission.CALL_PHONE" />
  15. Uri callUri = Uri.parse("tel:10086");
  16. Intent intent = new Intent(Intent.ACTION_CALL, callUri);
  17. // 调用发邮件(这里要事先配置好的系统Email,否则是调不出发邮件界面的)
  18. Uri emailUri = Uri.parse("mailto:zuolongsnail@163.com");
  19. Intent intent = new Intent(Intent.ACTION_SENDTO, emailUri);
  20. // 直接发邮件
  21. Intent intent = new Intent(Intent.ACTION_SEND);
  22. String[] tos = { "zuolongsnail@gmail.com" };
  23. String[] ccs = { "zuolongsnail@163.com" };
  24. intent.putExtra(Intent.EXTRA_EMAIL, tos);
  25. intent.putExtra(Intent.EXTRA_CC, ccs);
  26. intent.putExtra(Intent.EXTRA_TEXT, "the email text");
  27. intent.putExtra(Intent.EXTRA_SUBJECT, "subject");
  28. intent.setType("text/plain");
  29. Intent.createChooser(intent, "Choose Email Client");
  30. // 发短信
  31. Intent intent = new Intent(Intent.ACTION_VIEW);
  32. intent.putExtra("sms_body", "the sms text");
  33. intent.setType("vnd.android-dir/mms-sms");
  34. // 直接发短信
  35. Uri smsToUri = Uri.parse("smsto:10086");
  36. Intent intent = new Intent(Intent.ACTION_SENDTO, smsToUri);
  37. intent.putExtra("sms_body", "the sms text");
  38. // 发彩信
  39. Uri mmsUri = Uri.parse("content://media/external/images/media/23");
  40. Intent intent = new Intent(Intent.ACTION_SEND);
  41. intent.putExtra("sms_body", "the sms text");
  42. intent.putExtra(Intent.EXTRA_STREAM, mmsUri);
  43. intent.setType("image/png");
  44. // 卸载应用
  45. Uri uninstallUri = Uri.fromParts("package", "com.app.test", null);
  46. Intent intent = new Intent(Intent.ACTION_DELETE, uninstallUri);
  47. // 安装应用
  48. Intent intent = new Intent(Intent.ACTION_VIEW);
  49. intent.setDataAndType(Uri.fromFile(new File("/sdcard/test.apk"), "application/vnd.android.package-archive");
  50. // 在Android Market中查找应用
  51. Uri uri = Uri.parse("market://search?q=愤怒的小鸟");
  52. Intent intent = new Intent(Intent.ACTION_VIEW, uri);

 Demo源码

  1. package mm.shandong.com.testactioncate;
  2. import android.content.Intent;
  3. import android.support.v7.app.AppCompatActivity;
  4. import android.os.Bundle;
  5. import android.view.Menu;
  6. import android.view.View;
  7. public class TestActionCateActivity extends AppCompatActivity {
  8. @Override
  9. protected void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.activity_test_action_cate);
  12. }
  13. //启动activityTestComponentOtherActivity,设置intent的action为
  14. //TestComponentOtherActivity1
  15. public void startActivityToAction1(View view) {
  16. Intent intent = new Intent();
  17. intent.setAction("TestComponentOtherActivity1");
  18. startActivity(intent);
  19. }
  20. //启动activityTestComponentOtherActivity,设置intent的action为
  21. //TestComponentOtherActivity2
  22. public void startActivityToAction2(View view) {
  23. Intent intent = new Intent();
  24. intent.setAction("TestComponentOtherActivity2");
  25. startActivity(intent);
  26. }
  27. //启动activityTestComponentOtherActivity,设置intent的action为
  28. //TestComponentOtherActivity3
  29. public void startActivityToAction3(View view) {
  30. Intent intent = new Intent();
  31. intent.setAction("TestComponentOtherActivity3");
  32. startActivity(intent);
  33. }
  34. //启动action为sameAction的activity,有两个activity设置了相同
  35. //的action
  36. public void startActivitySameAction1(View view) {
  37. Intent intent = new Intent();
  38. intent.setAction("sameAction");
  39. startActivity(intent);
  40. }
  41. //启动action为Intent.ACTION_VIEW的activity,
  42. // 系统浏览器的activity也设置了这个action
  43. public void startActivitySameAction2(View view) {
  44. Intent intent = new Intent();
  45. intent.setAction(Intent.ACTION_VIEW);
  46. startActivity(intent);
  47. }
  48. //启动一个设置了三个category的activity,这个category必须全都设置,
  49. //才能启动
  50. public void startActivityCategory(View view) {
  51. Intent intent = new Intent();
  52. intent.setAction("TestActionCate3Activity");
  53. intent.addCategory("category1");
  54. intent.addCategory("category2");
  55. intent.addCategory("category3");
  56. startActivity(intent);
  57. }
  58. }

  Demo下载 
最后,以上例子都来源与安卓无忧,请去应用宝或者豌豆荚下载:例子源码,源码例子文档一网打尽。

本人微博:honey_11

 

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号