activity-alias詳解及應用

activity-alias標籤元素
衆所周知,AndroidManifest是一個xml文件,它包含不少標籤元素,如application、activity、receiver等,其中有一個叫作activity-alias,由於該標籤平時不多用到,可能你們對這個標籤還不是很熟悉。android

activity-alias,顧名思義,即activity的別名。看到這裏,你們會想那它到底是哪一個Activity的別名呢?咱們在建立一個Activity時,必須在AndroidManifest中靜態聲明該Activity,同時配置android:name、android:label、android:icon等屬性,還可配置intent-filter。對於activity-alias標籤,它有一個屬性叫android:targetActivity,這個屬性就是用來爲該標籤設置目標Activity的,或者說它就是這個目標Activity的別名。至此咱們已經明白activity-alias並不是表明一個獨立的Activity,而是爲一個已經存在的Activity建立的別名。app

activity-alias功能
知道了activity-alias的概念,那麼它的功能是什麼呢?activity-alias做爲一個已存在Activity的別名,則應該能夠經過該別名標籤聲明快速打開目標Activity。所以activity-alias可用來設置某個Activity的快捷入口,能夠放在桌面上或者經過該別名被其餘組件快速調起。該標籤元素支持一些屬性及intent-filter、meta-data等配置,所以能夠觸發一些跟目標Activity不一樣的功能邏輯,雖然打開的是同一個Activity。舉個簡單的例子,如以前須要先打開主界面,而後才能點擊進入某個Activity,若是使用activity-alias爲該Activity配置一個快捷入口,甚至能夠爲其在桌面生成一個圖標,而後點擊桌面圖標可直接進入該Activity,該功能可知足某些須要快速到達功能界面的需求。spa

activity-alias語法及聲明
其基本語法以下code

<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>

部分屬性說明以下xml

android:enable 該屬性用來決定目標Activity能否經過別名被系統實例化,默認爲true。須要注意的是application也有enable屬性,只用當它們同時爲true時,activity-alias的enable才生效。
android:exported 該屬性爲true的話,則目標Activity可被其餘應用調起,如爲false則只能被應用自身調起。其默認值根據activity-alias是否包含intent-filter元素決定,若是有的話,則默認爲true;沒有的話則爲false。其實也很好理解,若是有intent-filter,則目標Activity能夠匹配隱式Intent,所以可被外部應用喚起;若是沒有intent-filter,則目標Activity要被調起的話必須知道其精確類名,由於只有應用自己才知道精確類名,因此此時默認爲false。
android:icon 該屬性就比較好玩了,容許自定義icon,能夠不一樣於應用自己在桌面的icon。若是須要在桌面上建立快捷入口,也許產品會要求換個不一樣的icon。
android:label 該屬性相似於android:icon,圖標都換了,換個名稱也合情合理吧,此屬性就是爲此而生的。
android:name 該屬性能夠爲任意字符串,但最好符合類名命名規範。activity元素的name屬性實質上都會指向一個具體的Activity類,而activity-alias的name屬性僅做爲一個惟一標識而已。
android:permission 該屬性指明瞭經過別名聲明調起目標Activity所必需的權限。
android:targetActivity 該屬性指定了目標Activity,即經過activity-alias調起的Activity是哪一個,此屬性其實相似於activity標籤中的name屬性,須要規範的Activity包名類名。
看了以上幾個主要屬性,你們應該意識到activity-alias的屬性是activity屬性的子集,若是是activity-alias和activity共有的屬性,則以activity-alias爲準,目標Activity中的設置並不會在activity-alias中生效;若是是僅activity纔有的屬性,則爲目標Activity配置的屬性會在activity-alias中生效。blog

activity-alias能夠設置本身的intent-filter或meta-date,最經常使用的就是設置以下intent-filter從而在桌面Launcher上建立一個快捷入口:ip

<intent-filter>
     <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

另外須要注意的一點是,在AndroidManifest配置文件中,activity-alias標籤元素必須聲明在目標Acitvity對應的activity標籤元素以後,不然會編譯錯誤。utf-8

activity-alias用法示例
到此你們已經對activity-alias瞭解的比較深刻了,來看一個activity-alias的經典用法:爲某個Activity在桌面建立一個快捷入口。ci

代碼很簡單,應用包含兩個Activity:MainActivity和SecondActivity,MainActivity有一個Button,點擊跳轉到SecondActivity;咱們爲SecondActivity配置一個activity-alias標籤元素,在桌面上爲其建立一個快捷入口,點擊能夠直接打開SecondActivity。字符串

該示例應用的AndroidManifest.xml內容以下:

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="me.geed.activityalias">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".SecondActivity"></activity>

        <activity-alias
            android:name="SecondActivityAlias"
            android:label="Alias快捷入口"
            android:targetActivity=".SecondActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity-alias>
    </application>

</manifest>

將應用部署到手機上,你會發現生成了兩個桌面圖標(此處因爲沒有爲activity-alias另指定icon,所以二者icon相同),名稱分別爲「ActivityAlias」和「Alias快捷入口」。

點擊「ActivityAlias」應用圖標,會啓動MainActivity,在MainActivity中點擊Button,跳轉到SecondActivity。

點擊「Alias快捷入口」圖標,則能夠直接打開SecondActivity,且SecondActivity的title爲咱們在activity-alias中設置的 label屬性名稱。

相關文章
相關標籤/搜索