天天看點

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>
           

繼續閱讀