1. Activity 配置清单文件属性详列
首先基本定义,找了一些 定义和 意思很全的。
Action:属性的值为一个字符串,它代表了系统中已经定义了一系列常用的动作。通过setAction()方法或在清单文件AndroidManifest.xml中设置。默认为DEFAULT。
Data:通常是URI格式定义的操作数据。例如:tel:// 。通过setData()方法设置。
Category:属性用于指定当前动作(Action)被执行的环境。通过addCategory()方法或在清单文件AndroidManifest.xml中设置。默认为:CATEGORY_DEFAULT。
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)。
Category:
**CATEGORY_DEFAULT:**Android系统中默认的执行方式,按照普通Activity的执行方式执行。
CATEGORY_HOME:设置该组件为Home Activity。
CATEGORY_PREFERENCE:设置该组件为Preference。
CATEGORY_LAUNCHER:设置该组件为在当前应用程序启动器中优先级最高的Activity,通常为入口ACTION_MAIN配合使用。
CATEGORY_BROWSABLE:设置该组件可以使用浏览器启动。
CATEGORY_GADGET:设置该组件可以内嵌到另外的Activity中。
Extras:
EXTRA_BCC:存放邮件密送人地址的字符串数组。
EXTRA_CC:存放邮件抄送人地址的字符串数组。
EXTRA_EMAIL:存放邮件地址的字符串数组。
EXTRA_SUBJECT:存放邮件主题字符串。
EXTRA_TEXT:存放邮件内容。
EXTRA_KEY_EVENT:以KeyEvent对象方式存放触发Intent的按键。
EXTRA_PHONE_NUMBER:存放调用ACTION_CALL时的电话号码。
Data:
tel://:号码数据格式,后跟电话号码。
mailto://:邮件数据格式,后跟邮件收件人地址。
smsto://:短息数据格式,后跟短信接收号码。
content://:内容数据格式,后跟需要读取的内容。
file://:文件数据格式,后跟文件路径。
1.1 通过 Action 可以隐式启动(利用setAction方法启动Activity还有一个好处就是不需要知道包名和Activity类名,只需要知道action就可以隐式的启动activity)
注意 1: 如果有2个activity 拥有相同的 action 则会让用户手动选择
注意 2: 如果只添加 Category 属性去 启动的话 会失败
注意 3: 可以有多个 intent-filter
<activity android:name=".TestActivity" >
<intent-filter >
<action android:name="aa.bb.cc"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
启动代码:
Intent.setAction( "aa.bb.cc");
//不加下面这行也行,因为intent的这个属性默认值即系
Intent.CATEGORY_DEFAULT
intent.addCategory(Intent.CATEGORY_DEFAULT);
startActivity( intent );
1.2 根据 action 和 Data 启动 (Data 可以有1个,也可以有多个,只要匹配到其中1个就可)
注意1:如果scheme没有指定,那其它的属性均无效;
注意2:如果host没有指定,那么port,path,pathPrefix,pathPattern均无效;
注意3:mimeType 不能和 scheme 同用
<activity android:name=".Test" >
<intent-filter>
<action android:name="android.intent.action.leo"></action>
<category android:name="android.intent.category.DEFAULT"></category>
<data android:scheme=" MyHttp" android:host="mywww.llz.com" android:port="8080" >
</data>
</intent-filter>
</activity>
说明:
当无 host
Uri uri = Uri.parse(” MyHttp://”);
Uri uri = Uri.parse(” MyHttp:”);
当有host
Uri uri = Uri.parse(” MyHttp://mywww.llz.com”);
当有port
Uri uri = Uri.parse(” MyHttp://mywww.llz.com:8080”);
URL
MyHttp://www.google.com/
启动代码:
根据action 和data
Intent in = new Intent();
in.setAction("android.intent.action.leo");
in.setData(uri);
startActivity(in);
根据action 和type
<data android:mimeType="www.zkw.com" ></data>
Intent in = new Intent();
in.setAction("android.intent.action.leo");
in.setType("www.zkw.com");
startActivity(in);
1.3 复合使用
当有 action 和 data 时可以用
action + cate
action + data(未设置 type)
action + data.type (设置type)
Intent intent = getIntent();
String intentCategories = intent.getCategories()
String intentType = intent.getType();
Uri uri = intent.getData();
uri.getQuery()
uri.getQueryParameter(key)
uri.getQueryParameterNames()
uri.getQueryParameters(key)
uri.getBooleanQueryParameter(key, defaultValue)
uri.getHost()
uri.getPath()
uri.getPath()
String uriScheme = uri.getScheme();
String uriPath = uri.getPath();
String uriHost = uri.getHost();
String uriEncodedPath = uri.getEncodedPath();
0. 实际例子:
0.1 正常启动 activity,夸程序启动activity
最好使用 action 启动
Intent intent = new Intent();
intent.setAction(action);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
Intent intent = new Intent();
intent.setClass(mContext, Player.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent);
这里写代码片
0.2 通过 url 格式启动 activity,主体思路设置 scheme = “http”,这样就可以识别 http:// 格式,如果需要浏览器可以尝试打开该应用,添加CATEGORY_BROWSABLE,
http://myapp.web:80
<activity android:name=".Test">
<intent-filter>
<data android:host="myapp.web" android:scheme="http" >
<data android:port="80"/>
</data>
<action android:name="test.web" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity>