Intent的七大屬性


1.Action

Action屬性代表系統要執行的動作

系統提供如下常用的Action屬性
*ACTION_MAIN:應用程序入口點
*ACTION_VIEW:顯示指定數據
*ACTION_EDIT:編輯指定數據
*ACTION_DIAL:顯示撥打電話界面
*ACTION_CALL:向指定用戶打電話
*ACTION_SENDTO:向指定用戶發送信息
*ACTION_GET_CONTENT:讓用戶在運行的程序中選擇數據
獲取方法
String action = intent.getAction();

2. Category

Category屬性用於指定動作Action被執行的環境
系統提供如下常用的Category屬性
*CATEGORY_DEFAULT:默認的Category
*CATEGORY_BROWSABLE:能被瀏覽器安全調用
*CATEGORY_LAUNCHER:該應用的入口Activity
*CATEGORY_HOME:隨系統啟動而運行
*CATEGORY_TEST:用於測試
*CATEGORY_OPENABLE:增加一個可打開的分類
注:
CATEGORY_LAUNCHER需要和ACTION_MAIN同時設置(點擊圖標的入口)
如果是從其他應用跳入需要設置ACTION_MAIN
CATEGORY_OPENABLE通常和ACTION_GET_CONTENT組合使用
 
使用ACTION_MAIN打開系統應用時,可以配合下面的Category使用
*CATEGORY_HOME:顯示當前應用的主界面(MainActivity)
*CATEGORY_APP_BROSER:打開瀏覽器應用
*CATEGORY_APP_CALCLATOR:打開計算器應用
*CATEGORY_APP_CONTACTS:打開聯系人應用
*CATEGORY_APP_EMAIL:打開email應用
*CATEGORY_APP_GALLERY:打開畫廊應用
*CATEGORY_APP_MAPS:打開計地圖應用
*CATEGORY_APP_MESSAGING:打開信息應用
*CATEGORY_APP_MUSIC:打開音樂應用
獲取方法:
Set<String> set = intent.getCategories();

3.Data

Data屬性通常用於向Action屬性提供操作的數據
Data屬性是一個Uri對象,本質上是個字符串,常用值如下
*"tel://":號碼數據格式,后面跟電話號碼
*"mailto://":郵件數據格式,后面跟郵件收件人地址
*"smsto://":短信數據格式,后面跟短信接收人
*"content://":內容數據格式,后面跟需要讀取的內容
*"file://":文件數據格式,后面跟文件路徑
*"market://search?q=pname:pkgname":市場數據格式。GoogleMarket中搜索應用
*"geo://lantitude,lontitude":經緯數據格式,地圖上顯示經緯度
4.Extra

保存需要傳遞的額外數據

5.Type

Type屬性用於指定Data所指定的Uri對應的MIME類型。MIME只要符合“abc/xyz”這樣的字符串格式即可

6.Flag

Intent可調用addFlags()方法來為Intent添加控制標記。即設置啟動模式

可設置的屬性部分如下:
*FLAG_ACTIVITY_NEW_TASK:默認的跳轉類型,會重新創建一個新的Activity(第一種)
*FLAG_ACTIVITY_SINGLE_TOP:相當於Activity加載模式中的singletop(第二種)
*FLAG_ACTIVITY_CLEAR_TOP:相當於加載模式中的SingleTask(第三種)
*FLAG_ACTIVITY_REORDER_TO_FRONT:如果activity在task存在,拿到最頂端,不會啟動新的Activity
*FLAG_ACTIVITY_NO_HISTORY:被啟動的Activity一旦退出,他就不會存在於棧中
 例:
// 顯示主界面(桌面)
Intent intent = new Intent(); intent.setAction(Intent.ACTION_MAIN); // 應用程序的入口
intent.addCategory(Intent.CATEGORY_HOME); // 桌面的應用程序
startActivity(intent);
// 撥打電話114 (設置data為Uri格式的數據)
Intent intent = new Intent(); intent.setAction(Intent.ACTION_DIAL); intent.setData(Uri.parse("tel://114")); startActivity(intent);
// 發送短信給10086 (設置data為Uri格式的數據)
Intent intent = new Intent(); intent.setAction(Intent.ACTION_SENDTO); intent.setData(Uri.parse("smsto://10086")); startActivity(intent);
// 查看網頁 (設置data為Uri格式的數據)
Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setData(Uri.parse("http://www.baidu.com")); startActivity(intent);

 7.ComponentName

指定了ComponentName屬性的Intent已經明確了它將要啟動哪個組件,因此這種Intent被稱為顯式Intent,沒有指定ComponentName屬性的Intent被稱為隱式Intent。隱式Intent沒有明確要啟動哪個組件,應用會根據Intent指定的規則去啟動符合條件的組件。

ComponentName cName = new ComponentName(MainActivity.this,NextActivity.class); intent.setComponent(cName); startActivity(intent); //簡化為
Intent intent = new Intent(MainActivity.this,NextActivity.class); startActivity(intent);

也就是說,平時我們最常用的Intent頁面跳轉的寫法就調用的是顯式Intent

歡迎關注我的微信公眾號:安卓圈


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM