intent Filter

来源:http://www.cnblogs.com/Renyi-Fan/archive/2017/07/29/7257235.html
-Advertisement-
Play Games

intent Filter 一、介紹 如果一個 Intent 請求在一片數據上執行一個動作, Android 如何知道哪個應用程式(和組件)能用來響應這個請求呢? Intent Filter就是 用來註冊 Activity 、 Service 和 Broadcast Receiver 具有能在某種數 ...


intent Filter

一、介紹

如果一個 Intent 請求在一片數據上執行一個動作, Android 如何知道哪個應用程式(和組件)能用來響應這個請求呢? 

Intent Filter就是 用來註冊 Activity 、 Service 和 Broadcast Receiver 具有能在某種數據上執行一個動作的能力。
使用 Intent Filter ,應用程式組件告訴 Android ,它們能為其它程式的組件的動作請求提供服務,包括同一個程式的組
件、本地的或第三方的應用程式。

為了註冊一個應用程式組件為 Intent 處理者,在組件的 manifest 節點添加一個 intent-filter 標簽。

在 Intent Filter 節點里使用下麵的標簽(關聯屬性),你能指定組件支持的動作、種類和數據:
1.動作測試
<intent-filter>元素中可以包括子元素<action>,比如:
view source print ?
1. < intent-filter >
2. < action android:name="com.example.project.SHOW_CURRENT" />
3. < action android:name="com.example.project.SHOW_RECENT" />
4. < action android:name="com.example.project.SHOW_PENDING" />
5. </ intent-filter >
一條<intent-filter>元素至少應該包含一個<action>,否則任何Intent請求都不能和該<intent-filter>匹配。如果Intent
請求的Action和<intent-filter>中個某一條<action>匹配,那麼該Intent就通過了這條<intent-filter>的動作測試。如果
Intent請求或<intent-filter>中沒有說明具體的Action類型,那麼會出現下麵兩種情況。
(1) 如果<intent-filter>中沒有包含任何Action類型,那麼無論什麼Intent請求都無法和這條<intent-filter>匹配;
(2) 反之,如果Intent請求中沒有設定Action類型,那麼只要<intent-filter>中包含有Action類型,這個Intent請求就將順
利地通過<intent-filter>的行為測試。

 

2.類別測試

<intent-filter>元素可以包含<category>子元素,比如:
view source print ?
1. < intent-filter . . . >
2. < category android:name="android.Intent.Category.DEFAULT" />
3. < category android:name="android.Intent.Category.BROWSABLE" />
4. </ intent-filter >
只有當Intent請求中所有的Category與組件中某一個IntentFilter的<category>完全匹配時,才會讓該 Intent請求通過測試
IntentFilter中多餘的<category>聲明並不會導致匹配失敗。一個沒有指定任何類別測試的 IntentFilter僅僅只會匹配沒
有設置類別的Intent請求。

 

3.數據測試

數據在<intent-filter>中的描述如下:
view source print ?
1. < intent-filter . . . >
2. < data android:type="video/mpeg" android:scheme="http" . . . />
3. < data android:type="audio/mpeg" android:scheme="http" . . . />
4. </ intent-filter >
<data>元素指定了希望接受的Intent請求的數據URI和數據類型,URI被分成三部分來進行匹配:scheme、 authority和path
。其中,用setData()設定的Inteat請求的URI數據類型和scheme必須與IntentFilter中所指定的一致。若IntentFilter中還指定了authority或path,它們也需要相匹配才會通過測試。

❑ action
使用 android:name 特性來指定對響應的動作名。動作名必須是獨一無二的字元串,所以,一個好的習慣是使用基於 Java 包的命名方式的命名系統。

❑ category

使用 Android:category 屬性用來指定在什麼樣的環境下動作才被響應。每個 Intent Filter 標簽可以包含多個 category 標簽。你可以指定自定義的種類或使用 android 提供的標準值,如下所示:

 

❑ ALTERNATIVE
你將在這章的後面所看到的,一個 Intent Filter 的用途是使用動作來幫忙填入上下文菜單。 ALTERNATIVE 種類指定,在某種數據類型的項目上可以替代預設執行的動作。例如,一個聯繫人的預設動作時瀏覽它,替代的可能是去編輯或刪除它。

❑ SELECTED_ALTERNATIVE
與 ALTERNATIVE 類似,但 ALTERNATIVE 總是使用下麵所述的 Intent 解析來指向單一的動作。SELECTED_ALTERNATIVE在需要一個可能性列表時使用。

❑ BROWSABLE
指定在瀏覽器中的動作。當 Intent 在瀏覽器中被引發,都會被指定成 BROWSABLE 種類。

❑ DEFAULT
設置這個種類來讓組件成為 Intent Filter 中定義的 data 的預設動作。這對使用顯式 Intent 啟動的 Activity 來說也是必要的。

❑ GADGET
通過設置 GADGET 種類,你可以指定這個 Activity 可以嵌入到其他的 Activity 來允許。

❑ HOME
HOME Activity 是設備啟動(登陸屏幕)時顯示的第一個 Activity 。通過指定 Intent Filter 為 HOME 種類而不指定動作的話,你正在將其設為本地 home 畫面的替代。

❑ LAUNCHER
使用這個種類來讓一個 Activity 作為應用程式的啟動項。

❑ data
data 標簽允許你指定組件能作用的數據的匹配;如果你的組件能處理多個的話,你可以包含多個條件。你可以使用下麵屬性的任意組合來指定組件支持的數據:

❑ android:host
指定一個有效的主機名(例如, com.google )。

❑ android:mimetype
允許你設定組件能處理的數據類型。例如,<type android:value=”vnd.android.cursor.dir/*”/>能匹配任何 Android 游標。

❑ android:path
有效地 URI 路徑值(例如, /transport/boats/ )。

❑ android:port
特定主機上的有效埠。

❑ android:scheme
需要一個特殊的圖示(例如, content 或 http )。

參考:http://blog.csdn.net/wuwenxiang91322/article/details/7671593

 

二、代碼實例

程式實例

 

點擊後

com.fry.intent_Filter2.MainActivity

 1 package com.fry.intent_Filter2;
 2 
 3 
 4 
 5 import com.example.activity.R;
 6 
 7 import android.app.Activity;
 8 import android.content.Intent;
 9 import android.net.Uri;
10 import android.os.Bundle;
11 import android.view.View;
12 import android.view.View.OnClickListener;
13 import android.widget.Button;
14 
15 
16 
17 public class MainActivity extends Activity{
18     private Button btn_openActivty;//創建一個button對象
19      protected void onCreate(Bundle savedInstanceState) {
20             super.onCreate(savedInstanceState);//父類操作
21             setContentView(R.layout.activity_main);//引入名為activity_main的界面
22             btn_openActivty=(Button) findViewById(R.id.btn_openActivity);//找id為btn_openActivity的button
23             btn_openActivty.setOnClickListener(new OnClickListener() {//設置button點擊監聽
24                 
25                 @Override
26                 public void onClick(View v) {//onclick事件
27                     // TODO Auto-generated method stub
28                     Intent intent=new Intent();//初始化intent
29                     /**
30                      * 找所有action符合為"com.fry.activity01"的頁面
31                      * 也找所有Category為android.intent.category.DEFAULT的頁面
32                      * String android.content.Intent.CATEGORY_DEFAULT = 
33                      * "android.intent.category.DEFAULT"
34                      */
35                     intent.setAction("com.fry.activity01");
36                     intent.addCategory(Intent.CATEGORY_DEFAULT);
37                     //當只有data沒有type的時候
38                     //intent.setData(Uri.parse("http://www.baidu.com:8080/image"));
39                     intent.setDataAndType(Uri.parse("http://www.baidu.com:8080/image"), "text/plain");
40                     startActivity(intent);//打開activity
41                 }
42             });
43         }
44 }

/intent_Filter2/AndroidManifest.xml

 1 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 2     package="com.example.activity"
 3     android:versionCode="1"
 4     android:versionName="1.0" >
 5 
 6     <uses-sdk
 7         android:minSdkVersion="8"
 8         android:targetSdkVersion="19" />
 9 
10     <application
11         android:allowBackup="true"
12         android:icon="@drawable/ic_launcher"
13         android:label="@string/app_name"
14         android:theme="@style/AppTheme" >
15         <activity
16             android:name="com.fry.intent_Filter2.MainActivity"
17             android:label="@string/app_name" >
18             <intent-filter>
19                 <action android:name="android.intent.action.MAIN" />
20 
21                 <category android:name="android.intent.category.LAUNCHER" />
22             </intent-filter>
23         </activity>
24        <activity android:name="com.fry.intent_Filter2.Activity01">
25             <intent-filter >
26                 <action android:name="com.fry.activity01"></action>
27                 <category android:name="android.intent.category.DEFAULT"/>
28                 <data android:scheme="http" android:host="www.baidu.com" android:port="8080" android:path="/image" android:mimeType="text/plain"></data>
29             </intent-filter>
30         </activity>
31     </application>
32 
33 </manifest>

 


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

-Advertisement-
Play Games
更多相關文章
  • 一、JavaScript中的所有事物都是對象:字元串、數組、數值、函數... 1、每個對象帶有屬性和方法 JavaScript允許自定義對象 2、自定義對象 a、定義並創建對象實例 b、使用函數來定義對象,然後創建新的對象實例 二、JS內置對象-String 1、string對象 string對象用 ...
  • 明天高級篇 一.什麼是SVG? SVG 指的是可伸縮矢量圖形 (Scalable Vector Graphics),它用來定義用於網路的基於矢量的圖形,使用 XML 格式定義圖形。SVG 圖像在放大或改變尺寸的情況下其圖形質量不會有所損失。此外SVG 是萬維網聯盟的標準,SVG 與諸如 DOM 和 ...
  • 主框架頁面: 在主界面區會載入西區菜單點擊的URL內容. 主界面 此時在主頁面已經載入了easy-ui的腳本和CSS ,在各區頁面就不必載入了,即使載入了也會被去掉. 我一開始在datagrid頁面添加格式化函數,但是沒有效果,始終報找不到formatIsval... ...
  • 1.覆選框與按鈕的配合使用的DOM操作 <body> <input type="checkbox" id="ckb1" /><br><br> <input type="button" value="下一步" id="btn1" disabled="disabled" /> </body> <scri ...
  • 1.截取方法 截取字元串的abcdefg中的efg. 註意:str.length從1的開始數 var str="abcdefg"; (1).slice() : console.log(str.slice(4,7)); //efg第一個參數開始,第二個參數結束並且取不到.遇到負數把length和負數相 ...
  • 被遺棄的標簽和屬性 <center> 定義居中的文本 -> text-align <font>和<basefont> 定義HTML字體 -> font-family字體系列 font-size字體尺寸 <s>和<strike> 定義刪除線文本 <u> 定義下劃線文本 bgcolor 定義背景顏色 - ...
  • logcat 一、簡介 非常好用的日誌工具 二、常見操作 1、選擇對應級別的日誌 2、添加日誌過濾器filter 三、代碼實例 建立日誌filter 下麵代碼運行的日誌結果 com.fry.logcatTest.MainActivity ...
  • URI
    URI 一、介紹 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...