日報2015/10/14(極客學院安卓視頻學習)

昨天po主去看琅琊榜了,摸魚了一整天


隱式 Intent

之前顯示啓動activityB的時候是通過

startActivity(new Intent(A.this,B.class));

其中,B.class就是顯式啓動的特點,這種方式智能啓動本應用中的其他activity,因爲別的應用裏的activity的class是找不到的。

這時候就比較適合使用隱式啓動了

要啓動的是B,那麼在B的activity配置裏面,通過Intent-Filter來配置

        <activity
            android:name=".B"
            android:label="B">
            <intent-filter>
                <action android:name="aty_B" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

category指定B用什麼形式呈現,DEFAULT就是以Activity形式呈現

action就是一串字符串,這裏自己寫一個簡單的aty_B,然後在java代碼裏面直接

startActivity(new Intent("aty_B"));

就可以啓動B了


在Android studio裏面,新建一個module,叫app2,然後從app2裏面啓動app裏面的B試試看。

同樣在app2的MainActivity中

startActivity(new Intent("aty_B"));

可以啓動app1裏面的B,這樣就實現了跨應用啓動activity了。

如果不想被別的應用啓動的話,可以如下配置

activity android:exported="false"

Q:不過po主自己測試了以後發現還是能訪問,不知道爲啥

百度了一下,http://blog.csdn.net/lvxiangan/article/details/46859349
這裏說

同時,一定要注意的是, 非公開的Activity不能設置intent-filter,因爲,如果假設在同一機器上,有另外一個app有同樣的intent-filter的話, 調用該Activity的intent會喚醒android的選擇畫面, 讓你選擇使用那個app接受該intent。這樣就會事實上繞過了非公開的設置。

但是按照視頻中的步驟的話,得不到它那種結果,頭疼。


Intent 過濾器相關選項

如果兩個activity配置一樣的action字符串呢?

例如B、C兩個activity

        <activity
            android:name=".B"
            android:label="B">
            <intent-filter>
                <action android:name="com.jackie.courseintent.aty_B" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity
            android:name=".C"
            android:label="C">
            <intent-filter>
                <action android:name="com.jackie.courseintent.aty_B" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

這時候再按照之前的方法,在app2的MainActivity中

startActivity(new Intent("com.jackie.courseintent.aty_B"));

這裏寫圖片描述

關於data配置:
給C配置一下

<data android:scheme="C"/>

然後啓動:

startActivity(new Intent("com.jackie.courseintent.aty_B",Uri.parse("C://hello")));

此時:
這裏寫圖片描述

不會出現上面的選擇B還是C的選項,而是直接跳到了C


如果將Activity的data屬性裏面,設置scheme爲http,那麼這個Activity就可以相應http協議的請求

        <activity
            android:name=".LocalAty"
            android:label="@string/title_activity_local_aty">
            <intent-filter>
                <category android:name="android.intent.category.APP_BROWSER" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="http"/>
                <action android:name="android.intent.action.VIEW" />
            </intent-filter>
        </activity>
Intent intent=new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);

這裏寫圖片描述

而且如果綁定了服務,解綁了以後,服務會直接destroy,此時重新綁定的話,會從create開始新的生命週期,也就是說,在Service的生命週期裏面,只有onStart可以被反覆執行,其他的行爲在一個生命週期裏只執行一次

發佈了30 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章