天天看点

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>
           

继续阅读