Android復習(三)清單文件中的元素——>action、activity-alias、category、compatible-screens、data
<action>
- 語法:
-
<action android:name="string" />
- 包含于:
<intent-filter>
- 說明:
- 向 Intent 過濾器添加操作。
<intent-filter>元素必須包含一個或多個<action>元素。如果 Intent 過濾器中沒有<action>元素,則過濾器不接受任何Intent對象。如需詳細了解 Intent 過濾器和操作規范在過濾器中的作用,請參閱 Intent 和 Intent 過濾器。 - 屬性:
android:name- 操作的名稱。某些標準操作在
Intent類中定義為ACTION_string常量。要將其中一項操作分配給此屬性,請在ACTION_后跟的string前面加上“android.intent.action.”。例如,對于ACTION_MAIN,請使用“android.intent.action.MAIN”;對于ACTION_WEB_SEARCH,請使用“android.intent.action.WEB_SEARCH”。對于您定義的操作,最好將應用的軟件包名稱用作前綴,以確保唯一性。例如,可按如下方式指定
TRANSMOGRIFY操作:<action android:name="com.example.project.TRANSMOGRIFY" />
<activity-alias>
- 語法:
-
<activity-alias android:enabled=["true" | "false"] android:exported=["true" | "false"] android:icon="drawable resource" android:label="string resource" android:name="string" android:permission="string" android:targetActivity="string" > . . . </activity-alias> - 包含于:
<application>- 可包含:
<intent-filter><meta-data>- 說明:
- Activity 的別名,由
targetActivity屬性命名。目標必須與別名在同一應用中,并且在清單中必須在別名之前進行聲明。別名將目標 Activity 呈現為獨立實體。它可以具有自己的一組 Intent 過濾器,這些 Intent 過濾器(而不是目標 Activity 本身的 Intent 過濾器)決定了哪些 Intent 可以通過別名激活目標,以及系統如何處理別名。例如,別名的 Intent 過濾器可以指定“
android.intent.action.MAIN”和“android.intent.category.LAUNCHER”標志,以使其呈現在應用啟動器中,即使目標 Activity 本身的任何過濾器都未設置這些標志。除了
targetActivity之外,<activity-alias>屬性是<activity>屬性的子集。對于子集中的屬性,為目標設置的任何值都不會沿用于別名。不過,對于不在子集中的屬性,為目標 Activity 設置的值也會應用于別名。 - 屬性:
android:enabled- 系統是否可以通過此別名實例化目標 Activity。如果可以,則設為“
true”;如果不能,則設為“false”。默認值為“true”。<application>元素具有自己的enabled屬性,該屬性適用于所有應用組件,包括 Activity 別名。<application>和<activity-alias>屬性必須都設為“true”,系統才能通過別名實例化目標 Activity。如果其中任一屬性設為“false”,則別名不起作用。 android:exported- 其他應用的組件是否可以通過此別名啟動目標 Activity。如果可以,則設為“
true”;如果不能,則設為“false”。如果設為“false”,則只有與別名在同一應用中的組件或具有同一用戶 ID 的應用的組件可以通過別名啟動目標 Activity。默認值取決于別名是否包含 Intent 過濾器。沒有任何過濾器表示只有指定別名的確切名稱才能通過別名調用 Activity。這意味著別名僅供應用內部使用(因為其他應用不知道其名稱),所以默認值為“
false”。另一方面,至少存在一個過濾器意味著別名供外部使用,所以默認值為“true”。 android:icon- 通過別名呈現給用戶時目標 Activity 的圖標。如需了解詳情,請參閱
<activity>元素的icon屬性。 android:label- 通過別名呈現給用戶時別名的用戶可讀標簽。如需了解詳情,請參閱
<activity>元素的label屬性。 android:name
- 別名的唯一名稱。該名稱應類似于完全限定類名。但是,與目標 Activity 的名稱不同,別名名稱是任意的,它不引用實際類。
android:permission- 客戶端要通過別名啟動目標 Activity 或讓其執行某項操作而必須具備的權限的名稱。如果沒有向
startActivity()或startActivityForResult()的調用方授予指定的權限,將無法激活目標 Activity。此屬性會取代為目標 Activity 本身設置的任何權限。如果未設置此屬性,則無需權限即可通過別名激活目標。
如需詳細了解權限,請參閱簡介中的權限部分。
android:targetActivity- 可通過別名激活的 Activity 的名稱。此名稱必須與清單中別名前面的
<activity>元素的name屬性匹配。
<category>
- 語法:
-
<category android:name="string" />
- 包含于:
<intent-filter>- 說明:
- 向 Intent 過濾器添加類別名稱。如需詳細了解 Intent 過濾器和類別規范在過濾器中的作用,請參閱 Intent 和 Intent 過濾器。
- 屬性:
android:name- 類別的名稱。標準類別在
Intent類中定義為CATEGORY_name常量。此處分配的名稱可以根據這些常量推導出來,方法是在CATEGORY_后跟的name前面加上“android.intent.category.”作為前綴。例如,CATEGORY_LAUNCHER的字符串值為“android.intent.category.LAUNCHER”。注意:為了接收隱式 Intent,您必須在 Intent 過濾器中添加
CATEGORY_DEFAULT類別。startActivity()和startActivityForResult()方法將所有 Intent 當作聲明了CATEGORY_DEFAULT類別一樣對待。如果您沒有在 Intent 過濾器中聲明該類別,則任何隱式 Intent 都不會解析為您的 Activity。自定義類別應將軟件包名稱用作前綴,以確保它們的唯一性。
<compatible-screens>
- 語法:
-
<compatible-screens> <screen android:screenSize=["small" | "normal" | "large" | "xlarge"] android:screenDensity=["ldpi" | "mdpi" | "hdpi" | "xhdpi" | "280" | "360" | "420" | "480" | "560" ] /> ... </compatible-screens>
- 包含于:
<manifest>- 說明:
- 指定應用與之兼容的各個屏幕配置。清單中只能包含
<compatible-screens>元素的一個實例,但可以包含多個<screen>元素。每個<screen>元素都指定了應用與之兼容的特定屏幕尺寸-密度組合。Android 系統不會讀取
<compatible-screens>清單元素(無論是在安裝時還是在運行時)。此元素僅用于提供信息,可供外部服務(如 Google Play)用于更好地了解應用與特定屏幕配置的兼容性,并為用戶啟用過濾功能。未在此元素中聲明的任何屏幕配置都是應用與之不兼容的屏幕。因此,外部服務(如 Google Play)不會向使用此類屏幕的設備提供應用。注意:正常情況下,不應使用此清單文件元素。使用此元素可能會顯著減少應用的潛在用戶群,因為如果您未列出用戶所用設備的屏幕配置,則它不允許用戶安裝您的應用。只有在萬不得已時,也就是應用絕對無法與特定屏幕配置一起使用時,才能使用此元素。您不應使用此元素,而應按照支持多種屏幕指南,為針對不同屏幕尺寸和密度使用備用布局的多種屏幕提供可擴展支持。
如果您只想為應用設置最小屏幕尺寸,則應使用
<supports-screens>元素。例如,如果您希望應用僅適用于大屏幕和特大屏幕設備,則可以通過<supports-screens>元素聲明您的應用不支持小屏幕和標準屏幕尺寸。外部服務(如 Google Play)會相應地過濾您的應用。您還可以使用<supports-screens>元素聲明系統是否應根據不同的屏幕尺寸調整應用的大小。如需詳細了解 Google Play 如何使用此清單元素和其他清單元素過濾應用,另請參閱 Google Play 上的過濾器文檔。
- 子元素:
- 示例
-
如果您的應用僅與小屏幕和標準屏幕兼容(無論屏幕密度如何),則必須指定十二種不同的
<screen>元素,因為每種屏幕尺寸都有六個不同的密度配置。您必須聲明這些元素之一;您未指定的任何尺寸和密度組合都會被視為您的應用與之不兼容的屏幕配置。如果您的應用僅與小屏幕和標準屏幕兼容,則清單條目如下所示:<manifest ... > ... <compatible-screens> <!-- all small size screens --> <screen android:screenSize="small" android:screenDensity="ldpi" /> <screen android:screenSize="small" android:screenDensity="mdpi" /> <screen android:screenSize="small" android:screenDensity="hdpi" /> <screen android:screenSize="small" android:screenDensity="xhdpi" /> <screen android:screenSize="small" android:screenDensity="xxhdpi" /> <screen android:screenSize="small" android:screenDensity="xxxhdpi" /> <!-- all normal size screens --> <screen android:screenSize="normal" android:screenDensity="ldpi" /> <screen android:screenSize="normal" android:screenDensity="mdpi" /> <screen android:screenSize="normal" android:screenDensity="hdpi" /> <screen android:screenSize="normal" android:screenDensity="xhdpi" /> <screen android:screenSize="normal" android:screenDensity="xxhdpi" /> <screen android:screenSize="normal" android:screenDensity="xxxhdpi" /> </compatible-screens> <application ... > ... <application> </manifest>
<data>
- 語法:
-
<data android:scheme="string" android:host="string" android:port="string" android:path="string" android:pathPattern="string" android:pathPrefix="string" android:mimeType="string" /> - 包含于:
<intent-filter>- 說明:
- 向 Intent 過濾器添加數據規范。該規范可以是只有數據類型(
mimeType屬性),可以是只有 URI,也可以是既有數據類型又有 URI。URI 由其各個部分的單獨屬性指定:<scheme>://<host>:<port>[<path>|<pathPrefix>|<pathPattern>]用于指定網址格式的以下屬性是可選的,但也相互依賴:
同一
<intent-filter>元素中包含的所有<data>元素都對同一過濾器起作用。例如,以下過濾器規范:<intent-filter . . . > <data android:scheme="something" android:host="project.example.com" /> . . . </intent-filter>等同于以下規范:
<intent-filter . . . > <data android:scheme="something" /> <data android:host="project.example.com" /> . . . </intent-filter>您可以在
<intent-filter>內放置任意數量的<data>元素,為其提供多個數據選項。它的屬性都沒有默認值。如需了解 Intent 過濾器如何工作,包括如何根據過濾器來匹配 Intent 對象的規則,請參閱另一篇文檔 - Intent 和 Intent 過濾器。另請參閱清單文件概覽中的 Intent 過濾器部分。
- 屬性:
android:scheme- URI 的架構部分。這是指定 URI 時最基本的屬性;必須至少為過濾器設置一個
scheme屬性,否則其他 URI 屬性都沒有意義。指定的架構應不帶尾隨冒號(例如,應指定
http,而不是http:)。如果為過濾器設置了數據類型(
mimeType屬性),但未設置架構,則采用content:和file:架構。注意:Android 框架中的架構匹配區分大小寫,這一點與 RFC 不同。因此,您應始終使用小寫字母指定架構。
android:host- URI 授權方的主機部分。除非也為過濾器指定了
scheme屬性,否則此屬性沒有意義。要匹配多個子網域,請使用星號 (*) 匹配主機中的零個或多個字符。例如,主機*.google.com匹配www.google.com、.google.com和developer.google.com。星號必須是主機屬性的第一個字符。例如,主機
google.co.*無效,因為星號通配符不是第一個字符。注意:Android 框架中的主機名匹配區分大小寫,這一點與正式的 RFC 不同。因此,您應始終使用小寫字母指定主機名。
android:port- URI 授權方的端口部分。僅當同時為過濾器指定了
scheme和host屬性時,此屬性才有意義。 android:pathandroid:pathPrefixandroid:pathPattern- URI 的路徑部分,必須以 / 開頭。
path屬性指定與 Intent 對象中的完整路徑匹配的完整路徑。pathPrefix屬性指定只與 Intent 對象中的路徑的初始部分匹配的部分路徑。pathPattern屬性指定與 Intent 對象中的完整路徑匹配的完整路徑,但它可以包含以下通配符:- 星號(“
*”)匹配出現零次到多次的緊鄰前面的字符的一個序列。 - 句點后跟星號(“
.*”)匹配零個到多個字符的任意序列。
由于在從 XML 讀取字符串時(在將其解析為模式之前)將“
\”用作轉義字符,因此您需要進行雙重轉義。例如,字面量“*”將編寫為“\\*”,字面量“”將編寫為“\\\\”。這基本上與采用 Java 代碼構造字符串時需要編寫的內容一樣。如需詳細了解這三種類型的模式,請參閱
PatternMatcher類中的PATTERN_LITERAL、PATTERN_PREFIX和PATTERN_SIMPLE_GLOB的說明。 - 星號(“
android:mimeType- MIME 媒體類型,如
image/jpeg或audio/mpeg4-generic。子類型可以是星號通配符 (*),以指示任何子類型都匹配。Intent 過濾器經常會聲明僅包含
android:mimeType屬性的<data>。注意:Android 框架中的 MIME 類型匹配區分大小寫,這一點與正式的 RFC MIME 類型不同。因此,您應始終使用小寫字母指定 MIME 類型。

浙公網安備 33010602011771號