漫談Intent啓動Activity

隱式Intent是一個很基礎的知識了,寫法也一直很隨意,今天看到一種寫法,可以說是一種比較成熟的寫法了,感覺還不錯:

action標籤:

首先我們來看Activity清單文件,主要就是內部的兩個常用標籤:第一個category:….DEFAULT,是標識這是一個Activity的;第二個action,是表明當前Activity能相應的action,name我們雖說可以隨便起,但是有一個約定俗稱的寫法就是:包名+.intent.action.類名 。

<activity android:name=".WelcomeActivity_">
     <intent-filter>
          <category android:name="android.intent.category.DEFAULT" />
          <action android:name="com.jackson.llapp.intent.action.WelcomeActivity" />           
    </intent-filter>
</activity>

那麼在這個Activity中可以聲明一個全局的常量:

public static final String ACTION = "com.jackson.llapp.intent.action.WelcomeActivity"; 

而在其他Activity中可以省點事:

startActivity(new Intent(WelocmeActivity.ACTION));

這樣可以啓動,是不是看着舒服多了。

同時隱式Intent還有另外一個強大的功能那就是啓動其他應用程序的Activity,其他程序在通過Intent來訪問我們的WelcomeActivity的時候就不能這麼省事了。

比如說上面的WelcomeActivity如果想限制只能本程序訪問(隱式Intent)可以在android:name後面添加android:exported=”false”設置成不支持其他程序訪問。

當不同的Activity註冊了相同的action(針對隱式intent),當這個action被啓動的時候,系統會彈出對話框,讓用戶選擇,常常伴隨着一個默認的單選框,以後再次啓動這個action時,系統就會直接跳轉到你選擇作爲默認的Activity,如果不小心點了這個選擇框或是想更改這個默認的選擇,可以在該應用的應用信息頁中清除默認選擇,後就可以再次選擇。

data標籤:

在Activity的intent-filiter過濾器中還可以添加data標籤:

<activity android:name=".WelcomeActivity_">
     <intent-filter>
     ...
     <action android:name="com.jackson.llapp.intent.action.WelcomeActivity" />       
<data android:shame="app"/>

這裏指明協議爲“app”,若此時有其他Activity(同一程序或不同程序的Activity)也註冊了相同的action,並未指明協議或是指明協議部位“app”時:如果在intent的構造方法中添加“app”相關協議

startActivity(new Intent("com.jackson.llapp.intent.action.WelcomeActivity",Uri.parse("app://helloworld")));

則啓動該intent的時候只能啓動指明“app”協議的Activity——WelcomeActivity。

當然還有其他打他選項例如host等等,這些等用的時候舉一反三就ok了;

category 標籤:

示例:通過瀏覽器鏈接訪問本地Activity。

那麼我們首先來註冊這個Activity:

<activity android:name=".WelcomeActivity_">
     <intent-filter>
          <category android:name="android.intent.category.BROWSABLE" />
          <category android:name="android.intent.category.DEFAULT" />
          <action android:name="android.intent.action.VIEW" />    
          <data android:shame="app"/>       
    </intent-filter>
</activity>

接下來可以通過WebStrom來寫一個Html頁面:上添加一個鏈接:

這裏寫圖片描述

用瀏覽器打開:

這裏寫圖片描述

用Android模擬器訪問這個頁面:
需要做如下拼接:
可以通過10.0.2.2來訪問主機的LocalHost;
然後將瀏覽器地址欄中的 :63343/myapp/index.html拼接在10.0.2.2後面即可訪問剛寫的html頁面。
然後點擊鏈接即可訪問WelcomeActivity,
最後可以在Activity中通過getIntent().getData()獲得Intent的第二個參數Uri—-app://helloworld

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章