1. cactivity概念
首先Acitivity可以了解為使用者與應用互動的一個入口點,一個應用可以有多個Activity。當一個應用調用另一個應用時,調用方調用的是另一個應用的Activity,而不是整個應用。
Activity提供視窗供應用在其中繪制界面,此視窗通常鋪滿螢幕,也有可能視窗小于螢幕的大小,通常一個Activity實作應用中的一個螢幕,比如一個Activity實作“偏好設定”這個螢幕,另一個Activity實作“選擇照片”這一螢幕。
大多數應用包含多個螢幕,這意味着它們包含多個Activity,通常應用中有一個Activity是應用的主Activity,這是使用者啟用應用出現的第一個螢幕。每個Activity可以啟動另一個Activity,例如,一個簡單的電子郵件應用中的主 Activity 可能會提供顯示電子郵件收件箱的螢幕。主 Activity 可能會從該螢幕啟動其他 Activity,以提供執行寫郵件和打開郵件這類任務的螢幕,事實上,Activity 經常會啟動屬于其他應用的 Activity。例如,浏覽器應用可能會啟動社交媒體應用的“分享”Activity。
要使用Activity需要在清單檔案中注冊Activity,并适當的管理Activity的生命周期。
2.配置清單
聲明Activity
要聲明Activity,需要打開清單檔案,在中添加,例如:
<manifest ... >
<application ... >
<activity android:name=".ExampleActivity" />
...
</application ... >
...
</manifest >
該元素唯一的必要屬性是android: name,表示activity的類名稱,根據需要,我們也可以定義标簽,圖示等activity的屬性。
聲明Intent過濾
intent過濾器是一項非常強大的功能,它可以實作Intent的顯式跳轉或隐式跳轉。例如,顯式跳轉會告知系統啟動某一個具體的Activity,隐式跳轉則是啟動任何能完成此工作的Activity。Intent過濾器的作用就是告知系統界面詢問哪個Activity來執行任務。
使用此功能,需要在中注冊屬性,此元素定義包括元素,以及可選的元素或元素,例如:
<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon">
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
以上代碼action指定了該Activity會發送資料,category 生命為DEFAULT可使Activity能夠接收啟動請求,data指定發送的資料類型。以下代碼展示了如何在代碼中調用上述Activity:
val sendIntent = Intent().applay {
action = Intent.ACTION_SEND
type = "text/plain"
putExtra(Intent.EATRA_MSG, textMsg)
}
startActivity(sendIntent)
聲明權限
使用清單的 标記來控制哪些應用可以啟動某個 Activity。父 Activity 和子 Activity 必須在其清單中具有相同的權限,前者才能啟動後者。如果為父 Activity 聲明了 元素,則每個子 Activity 都必須具有比對的 元素。示例如下:
<manifest>
<activity android:name="...."
android:permission=”com.google.socialapp.permission.SHARE_POST”
/>
為了能夠調用上述Activity,調用方應用必須也具有相同的權限:
<manifest>
<uses-permission android:name="com.google.socialapp.permission.SHARE_POST" />
</manifest>