隱式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