Android Activity 启动

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>

你可能感兴趣的:(activity启动)