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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...