Intent屬性詳解二 Action、Category

来源:http://www.cnblogs.com/androidWuYou/archive/2016/09/24/5888230.html
-Advertisement-
Play Games

先看效果圖: 1、Action:該activity可以執行的動作 該標識用來說明這個activity可以執行哪些動作,所以當隱式intent傳遞過來action時,如果跟這裡<intent-filter>所列出的任意一個匹配的話,就說明這個activity是可以完成這個intent的意圖的,可以將它 ...


先看效果圖:

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調用常見系統組件方法》

// 調用瀏覽器  

Uri webViewUri = Uri.parse("http://blog.csdn.net/zuolongsnail");  

Intent intent = new Intent(Intent.ACTION_VIEW, webViewUri);  

// 調用地圖  

Uri mapUri = Uri.parse("geo:100,100");  

Intent intent = new Intent(Intent.ACTION_VIEW, mapUri);  

// 播放mp3  

Uri playUri = Uri.parse("file:///sdcard/test.mp3");  

Intent intent = new Intent(Intent.ACTION_VIEW, playUri);  

intent.setDataAndType(playUri, "audio/mp3");  

// 調用撥打電話  

Uri dialUri = Uri.parse("tel:10086");  

Intent intent = new Intent(Intent.ACTION_DIAL, dialUri);  

// 直接撥打電話,需要加上許可權<uses-permission id="android.permission.CALL_PHONE" />  

Uri callUri = Uri.parse("tel:10086");  

Intent intent = new Intent(Intent.ACTION_CALL, callUri);  

// 調用發郵件(這裡要事先配置好的系統Email,否則是調不出發郵件界面的)  

Uri emailUri = Uri.parse("mailto:[email protected]");  

Intent intent = new Intent(Intent.ACTION_SENDTO, emailUri);  

// 直接發郵件  

Intent intent = new Intent(Intent.ACTION_SEND);  

String[] tos = { "[email protected]" };  

String[] ccs = { "[email protected]" };  

intent.putExtra(Intent.EXTRA_EMAIL, tos);  

intent.putExtra(Intent.EXTRA_CC, ccs);  

intent.putExtra(Intent.EXTRA_TEXT, "the email text");  

intent.putExtra(Intent.EXTRA_SUBJECT, "subject");  

intent.setType("text/plain");  

Intent.createChooser(intent, "Choose Email Client");  

// 發簡訊  

Intent intent = new Intent(Intent.ACTION_VIEW);  

intent.putExtra("sms_body", "the sms text");  

intent.setType("vnd.android-dir/mms-sms");  

// 直接發簡訊  

Uri smsToUri = Uri.parse("smsto:10086");  

Intent intent = new Intent(Intent.ACTION_SENDTO, smsToUri);  

intent.putExtra("sms_body", "the sms text");  

// 發彩信  

Uri mmsUri = Uri.parse("content://media/external/images/media/23");  

Intent intent = new Intent(Intent.ACTION_SEND);  

intent.putExtra("sms_body", "the sms text");  

intent.putExtra(Intent.EXTRA_STREAM, mmsUri);  

intent.setType("image/png");  

// 卸載應用  

Uri uninstallUri = Uri.fromParts("package", "com.app.test", null);  

Intent intent = new Intent(Intent.ACTION_DELETE, uninstallUri);  

// 安裝應用  

Intent intent = new Intent(Intent.ACTION_VIEW);  

intent.setDataAndType(Uri.fromFile(new File("/sdcard/test.apk"), "application/vnd.android.package-archive");  

// 在Android Market中查找應用  

Uri uri = Uri.parse("market://search?q=憤怒的小鳥");           

Intent intent = new Intent(Intent.ACTION_VIEW, uri);  

 Demo源碼

package mm.shandong.com.testactioncate;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;

public class TestActionCateActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test_action_cate);
    }
    //啟動activityTestComponentOtherActivity,設置intent的action為
    //TestComponentOtherActivity1
    public void startActivityToAction1(View view) {
        Intent intent = new Intent();
        intent.setAction("TestComponentOtherActivity1");
        startActivity(intent);
    }
    //啟動activityTestComponentOtherActivity,設置intent的action為
    //TestComponentOtherActivity2
    public void startActivityToAction2(View view) {
        Intent intent = new Intent();
        intent.setAction("TestComponentOtherActivity2");
        startActivity(intent);
    }
    //啟動activityTestComponentOtherActivity,設置intent的action為
    //TestComponentOtherActivity3
    public void startActivityToAction3(View view) {
        Intent intent = new Intent();
        intent.setAction("TestComponentOtherActivity3");
        startActivity(intent);
    }
    //啟動action為sameAction的activity,有兩個activity設置了相同
    //的action
    public void startActivitySameAction1(View view) {
        Intent intent = new Intent();
        intent.setAction("sameAction");
        startActivity(intent);
    }
    //啟動action為Intent.ACTION_VIEW的activity,
    // 系統瀏覽器的activity也設置了這個action
    public void startActivitySameAction2(View view) {
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_VIEW);
        startActivity(intent);
    }
    //啟動一個設置了三個category的activity,這個category必須全都設置,
    //才能啟動
    public void startActivityCategory(View view) {
        Intent intent = new Intent();
        intent.setAction("TestActionCate3Activity");
        intent.addCategory("category1");
        intent.addCategory("category2");
        intent.addCategory("category3");
        startActivity(intent);
    }


}

 

本人微博:honey_11

Demo下載
最後,以上例子都來源與安卓無憂,請去應用寶或者豌豆莢下載:例子源碼,源碼例子文檔一網打盡


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在介紹tcp發送函數之前得先介紹很關鍵的一個結構sk_buff,在linux中,sk_buff結構代表了一個報文: 然後見發送函數源碼,這裡不關註硬體支持的分散-聚集: 詳細的說明見註釋。 註意幾點主要的流程: 1.TCP以1mss為單元來發送數據,最大段大小基於MTU計算獲得,MTU是一個鏈路層的 ...
  • 在《Android 手機衛士--打包生成apk維護到伺服器》一文中,實現了新版本的apk到伺服器,當打開客戶端apk的時候,發現有新版本,提示更新。還實現了利用xutils工具實現了從伺服器端下載apk 本文地址:http://www.cnblogs.com/wuyudong/p/5903484.h ...
  • 查看原文:http://blog.csdn.net/u010818425/article/details/52319382 Gradle實戰系列文章: 《Gradle基本知識點與常用配置》 《Gradle實戰:不同編譯類型的包同設備共存》 《Gradle實戰:發佈aar包到maven倉庫》 《Gra ...
  • 查看原文:http://blog.csdn.net/u010818425/article/details/52266593 查看原文:http://blog.csdn.net/u010818425/article/details/52266593 (一)基礎操作 安裝app adb install ...
  • 以msm8996的Android6.0為例,修改device/qcom/msm8996/init.target.rc文件以控制GPIO。 ...
  • 項目打包生成apk過程: 1、生成簽名文件,並且指定所在位置 2、使用生成的簽名文件,給工程打包生成一個apk 本文地址:http://www.cnblogs.com/wuyudong/p/5903312.html,轉載請註明源地址。 生成簽名文件,並且指定所在位置 項目右鍵-->AndroidTo ...
  • xUtils簡介 xUtils 包含了很多實用的android工具。 xUtils 最初源於Afinal框架,進行了大量重構,使得xUtils支持大文件上傳,更全面的http請求協議支持(10種謂詞),擁有更加靈活的ORM,更多的事件註解支持且不受混淆影響... xUitls最低相容android ...
  • 一、 準備階段 二、程式編寫 支付介面需要幾個必要的參數 partnerID 為開發者申請的使用者ID,以2088開頭;sellerId 為收款賬戶(一般為申請的開發賬號,即圖片中的登錄賬號,也可使用其他支付寶賬號);privatekey 私鑰用於訂單信息處理。 開發者可在這個頁面獲取到這些信息,如 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...