大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > Android技巧 > 最全面的Android Intent机制讲解

最全面的Android Intent机制讲解(3)

关键词:机制AndroidIntent  阅读(1390) 赞(17)

[摘要]本文是对最全面的Android Intent机制讲解的讲解,对学习Android编程技术有所帮助,与大家分享。
Java代码
  1. packagecom.tope.samples.intent.implicit;
  2. importandroid.app.Activity;
  3. importandroid.content.Intent;
  4. importandroid.os.Bundle;
  5. importandroid.view.View;
  6. importandroid.widget.Button;
  7. publicclassImplicitIntentTestextendsActivity
  8. implementsView.OnClickListener{
  9. /**Calledwhentheactivityisfirstcreated.*/
  10. @Override
  11. publicvoidonCreate(BundlesavedInstanceState){
  12. super.onCreate(savedInstanceState);
  13. setContentView(R.layout.main);
  14. ButtonstartBtn=(Button)findViewById(R.id.dial);
  15. startBtn.setOnClickListener(this);
  16. }
  17. publicvoidonClick(Viewv){
  18. switch(v.getId()){
  19. caseR.id.dial:
  20. Intentintent=newIntent(Intent.ACTION_DIAL);
  21. startActivity(intent);
  22. break;
  23. default:
  24. break;
  25. }
  26. }
  27. }

该程序在Intent 的使用上,与上节中的使用方式有很大的不同,即根本不指定接收者,初始化 Intent 对象时,只是传入参数,设定 Action为 Intent.ACTION_DIAL :

Intent intent = new Intent(Intent. ACTION_DIAL );

startActivity(intent);

这里使用的构造函数的原型如下:

Intent ( String action);

这里读者可暂时将action理解为描述这个 Intent 的一种方式,这种使用方式看上去比较奇怪, Intent 的发送者只是指定了 Action为 Intent.ACTION_DIAL ,那么怎么找到接收者呢?来看下面的例子。

增加一个接收者

事实上接收者如果希望能够接收某些 Intent ,需要像上节例子中一样,通过在 AndroidManifest.xml中增加Activity 的声明,并设置对应的 Intent Filter 和 Action ,才能被 Android 的应用程序框架所匹配。为了证明这一点,我们修改上一 节 SimpleIntentTest 程序中的 AndroidManifest.xml 文件,将 TestActivity 的声明部分改为:

XML/HTML代码
  1. <activityandroid:name=".TestActivity">
  2. <intent-filter>
  3. <actionandroid:name="android.intent.action.DEFAULT"/>
  4. <actionandroid:name="android.intent.action.DIAL"/>
  5. <categoryandroid:name="android.intent.category.DEFAULT"/>
  6. </intent-filter>
  7. </activity>

修改完之后注意要重新安装 SimpleIntentTest 程序的apk 包,然后再尝试运行 ImplicitIntentTest 程序(不是SimpleIntentTest 程序)

这个截图中的第二幅表示可以选择 Dialer 或者 SimpleIntentTest 程序来完成 Intent.ACTION_DIAL ,也就是说,针对 Intent.ACTION_DIAL, Android 框架找到了两个符合条件的 Activity,因此它将这两个 Activity 分别列出,供用户选择。

回过头来看我们是怎么做到这一点的。我们仅仅在 SimpleIntentTest 程序的 AndroidManifest.xml 文件中增加了下面的两行:

XML/HTML代码
  1. <actionandroid:name="android.intent.action.DIAL"/>
  2. categoryandroid:name="android.intent.category.DEFAULT"/>

这两行修改了原来的 Intent Filter,这样这个 Activity 才能够接收到我们发送的 Intent 。我们通过这个改动及其作用,可以进一步理解隐式 Intent, Intent Filter 及 Action, Category 等概念—— Intent 发送者设定 Action 来说明将要进行的动作,而 Intent 的接收者在 AndroidManifest.xml 文件中通过设定 Intent Filter来声明自己能接收哪些Intent 。

«上一页123下一页»


相关评论