Activity的注册
具体的直接看代码:
<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.example.lk.activityforstudy"
xmlns:android="http://schemas.android.com/apk/res/android">
<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"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
<data android:scheme="http" android:host="localhost" android:port="80" ></data>
</intent-filter>
</activity>
</application>
</manifest>
解释下各个标签的意义:
AndroidManifest.mxl—-是android应用中的大总管,android四大组件都必须向该文件注册之后才能上台表现自己;在android应用启动时会先加载该文件;
activity的注册必须包含在<application>
标签中,根节点为<activity>
;
activity标签用于表明该注册对象时一个activity以及声明该activity基本特征。的几个属性:
android:name—-用来表明要为哪一个activity注册;值是包名.activity的名称;
此处的.MainActivity其实就是com.example.lk.activityforstudy.MainActivity的缩写。
android:label—-activity对外显示的名称,可以随意设置;
android:theme—-activity窗口级别的主题样式;可以自定义也可以选择系统样式;
<intent-filter>
用于描述该activity中各个intent属性的:
<Action>
作用:该标签用于用于指定响应的动作名,也就是说这个标签可以声明该activity可以对哪个动作做出响应;
取值:取值有两种方式:1选取系统提供的标准动作,2自定义动作名称;
设置:可以在AndroidManifest中设置,也可以通过setAction()设置;
注:如果是选取系统提供的标准动作请看文末附表;
自定义方式推荐以包名作为前缀,如:android:name=”com.example.lk.activityforstudy.MY_ACTION”
如果是主activity的话为:<action android:name="android.intent.action.MAIN"/>
<Category>
作用:标签用于指定activity在响应指定动作时的附加条件;系统也提供了一些了标准的条件,请看文末附表;
设置:可以在AndroidManifest中设置,也可以通过addCategory();设置;
<Data>
作用:标签用于指定该activity能够响应的请求数据类型,参数是url模式的;共有五个属性:这五个属性限制了可以响应的url的类型:
android:scheme:指定数据协议的部分;指定该activity可以对哪一种请求协议做出响应;
android:host:指定数据的主机名部分;指定该activity可以在请求指定服务器的时候做出响应;
android:port:指定数据的端口部分,一般放在android:host后面;指定该activity在请求服务器指定端口的时候可以相应;
android:path:指定url路径部分;
android:mimeType:指定该activity可以对指定的请求数据类型进行响应;
注:data的前四个属性对应的url为:scheme://host:port/path
上述四个属性并不是必须的,配置了哪个将会以哪个为标准过滤;
设置:可以通过setData()方法向需要访问的activity传递响相应的数据;
<Extras>
作用:用来传递目标组件所需要的额外的数据;
设置:可以实用系统提供的标准来设置(文末附表),也可以使用putExtras()方法设置;
一些思考
1:为什么要注册activity?
AndroidManifest是全局的配置文件,在应用启动的时候会首先加载该文件,读取该文件中的相关配置;activity在该文件中注册时会声明该activity的一系列特征;通过在AndroidManifest中注册activity可以让系统在使用该activity的时候读取到该活动以及该活动的特征;
2:不注册可以吗?
不可以,如果不注册将会异常;
3:一个应用程序必须要有主activity吗?
不一定,一个应用不是必须非得要有个主活动的,当一个应用没有一个主活动的时候该应用将在启动器中看到;这种应用一般是作为第三方服务供其他应用在内部调用的;
文末附表
表1:系统提供的标准action动作:
ACTION_MAIN:Android Application的入口,每个Android应用必须且只能包含一个此类型的Action声明。
ACTION_VIEW:系统根据不同的Data类型,通过已注册的对应Application显示数据。
ACTION_EDIT:系统根据不同的Data类型,通过已注册的对应Application编辑示数据。
ACTION_DIAL:打开系统默认的拨号程序,如果Data中设置了电话号码,则自动在拨号程序中输入此号码。
ACTION_CALL:直接呼叫Data中所带的号码。
ACTION_ANSWER:接听来电。
ACTION_SEND:由用户指定发送方式进行数据发送操作。
ACTION_SENDTO:系统根据不同的Data类型,通过已注册的对应Application进行数据发送操作。
ACTION_BOOT_COMPLETED:Android系统在启动完毕后发出带有此Action的广播(Broadcast)。
ACTION_TIME_CHANGED:Android系统的时间发生改变后发出带有此Action的广播(Broadcast)。
ACTION_PACKAGE_ADDED:Android系统安装了新的Application之后发出带有此Action的广播(Broadcast)。
ACTION_PACKAGE_CHANGED:Android系统中已存在的Application发生改变之后(如应用更新操作)发出带有此Action的广播(Broadcast)。
ACTION_PACKAGE_REMOVED:卸载了Android系统已存在的Application之后发出带有此Action的广播(Broadcast)。
表2:系统提供的标准Category条件:
CATEGORY_DEFAULT:Android系统中默认的执行方式,按照普通Activity的执行方式执行。
CATEGORY_HOME:设置该组件为Home Activity。
CATEGORY_PREFERENCE:设置该组件为Preference。
CATEGORY_LAUNCHER:设置该组件为在当前应用程序启动器中优先级最高的Activity,通常为入口ACTION_MAIN配合使用。
CATEGORY_BROWSABLE:设置该组件可以使用浏览器启动。
CATEGORY_GADGET:设置该组件可以内嵌到另外的Activity中
表3:系统提供的标准Data 对应常用url格式:
tel://: 号码数据格式,后跟电话号码。
mailto://: 邮件数据格式,后跟邮件收件人地址。
smsto://: 短息数据格式,后跟短信接收号码。
content://: 内容数据格式,后跟需要读取的内容。
file://: 文件数据格式,后跟文件路径。
market://search?q=pname:pkgname:市场数据格式,在Google Market里搜索包名为pkgname的应用。
geo://latitude, longitude:经纬数据格式,在地图上显示经纬度所指定的位置。
表4:系统提供的Extras常用值:
EXTRA_BCC:存放邮件密送人地址的字符串数组。
EXTRA_CC:存放邮件抄送人地址的字符串数组。
EXTRA_EMAIL:存放邮件地址的字符串数组。
EXTRA_SUBJECT:存放邮件主题字符串。
EXTRA_TEXT:存放邮件内容。
EXTRA_KEY_EVENT:以KeyEvent对象方式存放触发Intent的按键。
EXTRA_PHONE_NUMBER:存放调用ACTION_CALL时的电话号码。