Android開發21——隱式意圖

本文出自 “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="image/*"/>

  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"), "image/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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章