本文出自 “IT徐胖子的专栏” 博客,请务必保留此出处http://woshixy.blog.51cto.com/5637578/1096171


所谓隐式意图就是在意图激活Activity、Service或BroadcastReceiver这三类组件时,并不显示指出需要显示指出主键的名字,而是通过指定action,data,category,Android系统会根据这三个特征找到最合适的组件并激活。先看自定义的例子



  
  1. <applicationandroid:icon="@drawable/icon"android:label="@string/app_name">

  2. <activityandroid:name=".MainActivity"

  3. android:label="@string/app_name">

  4. <intent-filter>

  5. <actionandroid:name="android.intent.action.MAIN"/>

  6. <categoryandroid:name="android.intent.category.LAUNCHER"/>

  7. </intent-filter>

  8. </activity>

  9. <activityandroid:name=".OtherActivity1"android:label="@string/app_name">

  10. <intent-filter>

  11. <actionandroid:name="cn.xy.action"/>

  12. <categoryandroid:name="android.intent.category.DEFAULT"></category>

  13. </intent-filter>

  14. </activity>

  15. <activityandroid:name=".OtherActivity2"android:label="@string/app_name">

  16. <intent-filter>

  17. <actionandroid:name="cn.xy.action2"/>

  18. <actionandroid:name="cn.xy2.action2"/>

  19. <categoryandroid:name="cn.xy.category2"></category>

  20. <categoryandroid:name="cn.xy2.category2"></category>

  21. <categoryandroid:name="android.intent.category.DEFAULT"></category>

  22. </intent-filter>

  23. </activity>

  24. <activityandroid:name=".OtherActivity3"android:label="@string/app_name">

  25. <intent-filter>

  26. <actionandroid:name="cn.xy.action3"/>

  27. <categoryandroid:name="cn.xy.category3"></category>

  28. <dataandroid:scheme="xy"android:host="www.xy.cn"android:path="/xy"></data>

  29. <categoryandroid:name="android.intent.category.DEFAULT"></category>

  30. </intent-filter>

  31. </activity>

  32. <activityandroid:name=".OtherActivity4"android:label="@string/app_name">

  33. <intent-filter>

  34. <actionandroid:name="cn.xy.action4"/>

  35. <categoryandroid:name="cn.xy.category4"></category>

  36. <dataandroid:scheme="xy"android:host="www.xy.cn"></data>

  37. <dataandroid:mimeType="p_w_picpath/*"/>

  38. <categoryandroid:name="android.intent.category.DEFAULT"></category>

  39. </intent-filter>

  40. </activity>

  41. </application>



  
  1. /**

  2. * 隐式意图激活Activity

  3. *  

  4. * @author 徐越

  5. *  

  6. */

  7. publicclass MainActivity extends Activity  

  8. {  

  9. @Override

  10. publicvoid onCreate(Bundle savedInstanceState)  

  11.    {  

  12. super.onCreate(savedInstanceState);  

  13.        setContentView(R.layout.main);  

  14.    }  

  15. publicvoid goActivity1(View v)  

  16.    {  

  17.        Intent intent = new Intent();  

  18.        intent.setAction("cn.xy.action");  

  19. // 方法内部默认为intent注册了android.intent.category.DEFAULT类别,所以在AndroidManifest.xml中要写上该类别

  20. this.startActivity(intent);  

  21.    }  

  22. publicvoid goActivity2(View v)  

  23.    {  

  24. // 在只配置action和category时只要intent的action和category出现在intent-filter中就可以匹配

  25.        Intent intent = new Intent();  

  26.        intent.setAction("cn.xy.action2");  

  27.        intent.addCategory("cn.xy.category2");  

  28. this.startActivity(intent);  

  29.    }  

  30. publicvoid goActivity3(View v)  

  31.    {  

  32.        Intent intent = new Intent();  

  33.        intent.setAction("cn.xy.action3");  

  34.        intent.addCategory("cn.xy.category3");  

  35. // 数据以uri形式传递

  36.        intent.setData(Uri.parse("xy://www.xy.cn/xy"));  

  37. this.startActivity(intent);  

  38.    }  

  39. publicvoid goActivity4(View v)  

  40.    {  

  41.        Intent intent = new Intent();  

  42.        intent.setAction("cn.xy.action4");  

  43.        intent.addCategory("cn.xy.category4");  

  44. // 不能分别写setData和setType,因为setType会将setData设置的值清除掉

  45.        intent.setDataAndType(Uri.parse("xy://www.xy.cn/xxx"), "p_w_picpath/gif");  

  46. this.startActivity(intent);  

  47.    }  

  48. }

看一个系统intent的例子,我们在应用中比如要实现拨打电话


  
  1. // v为当前被点击的按钮对象

  2. publicvoid onClick(View v)  

  3. {  

  4. // 获取电话号码

  5.    String phone = txtPhone.getText().toString();  

  6. // 调用系统自带拨号器设置拨号意图对象

  7.    Intent intent = new Intent();  

  8.    intent.setAction("android.intent.action.CALL");  

  9.    intent.setData(Uri.parse("tel:" + phone));  

  10. // 激活意图,方法内部会自动为Intent添加类别android.intent.category.DEFAULT

  11.    startActivity(intent);  

  12. }


本文出自 “IT徐胖子的专栏” 博客,请务必保留此出处http://woshixy.blog.51cto.com/5637578/1096171