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>