activity-alias屬性的使用


 

activity-alias是Android里為了重復使用Activity而設計的。

1. 含義和作用:

         對於activity-alias標簽,它有一個屬性叫android:targentActivity,這個屬性就是用來為該標簽設置目標Activity的,或者說它就是這個目標Activity的別名。
         activity-alias作為一個已存在Activity的別名,則應該可以通過該別名標簽聲明快速打開目標Activity。
         因此activity-alias可用來設置某個Activity的快捷入口,可以放在桌面上或者通過該別名被其他組件快速調起。

2. 部分屬性說明如下

    1. android:enable 該屬性用來決定目標Activity可否通過別名被系統實例化,默認為true。
                  需要注意的是application也有enable屬性,只用當它們同時為true時,activity-alias的enable才生效。

    2. android:exported 該屬性為true的話,則目標Activity可被其他應用調起,如為false則只能被應用自身調起。
                   其默認值根據activity-alias是否包含intent-filter元素決定,如果有的話,則默認為true;沒有的話則為false。
                   其實也很好理解,如果有intent-filter,則目標Activity可以匹配隱式Intent,因此可被外部應用喚起;
                   如果沒有intent-filter,則目標Activity要被調起的話必須知道其精確類名,因為只有應用本身才知道精確類名,所以此時默認為false。

    3. android:icon 該屬性就比較好玩了,允許自定義icon,可以不同於應用本身在桌面的icon。如果需要在桌面上創建快捷入口,也許產品會要求換個不同的icon。

    4. android:label 該屬性類似於android:icon,圖標都換了,換個名稱也合情合理吧,此屬性就是為此而生的。

    5. android:name 該屬性可以為任意字符串,但最好符合類名命名規范。activity元素的name屬性實質上都會指向一個具體的Activity類,而activity-alias的name屬性僅作為一個唯一標識而已。

    6. android:permission 該屬性指明了通過別名聲明調起目標Activity所必需的權限。

    7. android:targetActivity 該屬性指定了目標Activity,即通過activity-alias調起的Activity是哪個,此屬性其實類似於activity標簽中的name屬性,需要規范的Activity包名類名。


3. 注意:
    在AndroidManifest配置文件中,activity-alias標簽元素必須聲明在目標Acitvity對應的activity標簽元素之后,否則會編譯錯誤。

4. 使用案例:
    當在Activity的onCreate()方法里,執行getIntent().getComponent().getClassName();
    得到的可能不是這個Activity的名字,有可能是別名的名字,例如:在AndroidMenifest.xml有如下配置:

        <activity   
        android:name=".TestAndroid"  
        android:icon="@drawable/ic_menu_mark">  
            <intent-filter>  
                <action android:name="android.intent.action.MAIN" />  
                <category android:name="android.intent.category.LAUNCHER" />  
            </intent-filter>  
        </activity>  

        <activity-alias   
        android:name="TestAndroidAlias"  
        android:targetActivity="TestAndroid"  
        android:label="testAndroidlias"  
        android:icon="@drawable/ic_launcher_phone">  
            <intent-filter>  
                <action android:name="android.intent.action.MAIN" />  
                <category android:name="android.intent.category.DEFAULT" />  
                <category android:name="android.intent.category.LAUNCHER" />  
            </intent-filter>  
        </activity-alias>  

   
    這個應用會在桌面上建兩個進入點,即建兩個可以進入TestAndroid這個Activity的快捷圖標。
    這時getIntent().getComponent().getClassName() 得到的名字就不一樣,一個是com.test.TestAndroid,一個是com.test.TestAndroidAlias。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM