讓別的應用打開你的Activity怎麼玩

承接上一篇應用內打開其他應用的正確姿勢,我們已經能在我們的應用內打開指定功能的應用的Activity,這次我們就讓別的應用打開我們的應用玩玩。

分析:

在我們的應用內打開其他的應用是隱式的Intent意圖來實現,那我們如果想讓別人打開我們的應用應該怎麼做呢?

其實我們要做的也很簡單,就是告訴系統我們能處理這個隱式的意圖就可以了。

話不多說,開始擼代碼:

就以打開圖片爲例吧,我們在文件管理應用中打開圖片的時候,系統往往會彈出很多的應用讓我們選擇,如系統圖片查看、各類美圖軟件、QQ、微信等等,如下圖所示。


我們的目標就是在這個列表中把我們的應用也顯示出來,點進去之後能顯示點擊的圖片。

一、在清單文件中註冊Intent過濾器如下:

       <activity android:name=".ui.MainActivity">

            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>

            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:mimeType="image/*"/>
            </intent-filter>

        </activity>
第一個intent-filter是系統默認的主啓動Activity的過濾器。

第二個intent-filter纔是我們設置的過濾器。
1、 <action> 代表要進行的操作,發送信息ACTION_SEND或ACTION_SENDTO,再次我們需要查看圖片,所以action爲VIEW。

2、 <category>提供另外一種表徵處理 Intent 的 Activity 的方法,通常與用戶手勢或 Activity 啓動的位置有關。 系統支持多種不同的類別,但大多數都很少使用。 但是,所有隱含 Intent 默認使用 CATEGORY_DEFAULT 進行定義。

3、 <data> 與 Intent 關聯的數據描述。使用此元素中的一個或多個屬性,您可以只指定 MIME 類型、URI 前綴、URI 架構或這些的組合以及其他指示所接受數據類型的項。

注:如果您無需聲明關於數據的具體信息 Uri(比如,您的 Activity 處理其他類型的“額外”數據而不是 URI 時),您應只指定 android:mimeType您應只指定 android:mimeType 屬性聲明您的 Activity 處理的數據類型,比如 text/plain 或 image/jpeg。
您只應指定android:mimeType屬性聲明您的 Activity 處理的數據類型,比如 text/plain 或 image/jpeg。

完成了第一步之後我們就能在點擊文件管理的圖片的時候看到我們的應用圖標也在列表內部了,如下:



到此處雖然我們的應用已經出現在了這個列表中,但是你點進去我們的應用進去發現什麼都沒有,那是因爲我們的應用還沒有對接收到的Intent進行相應的操作處理。

接下來就是處理請求也就是我們的下一步。

二、在Activity中進行Intent數據請求的處理,代碼如下:

在onCreate方法中進行如下處理,ImageView爲佈局文件中用來展示圖片的View:

  Intent intent = getIntent();
        if (intent == null){
            return;
        }
        String action = intent.getAction();
        if (Intent.ACTION_VIEW.equals(action)) {//查看圖片
            Uri uri = intent.getData();
            if (null != uri) {
                Log.d(TAG, "圖片地址Path:" + uri.getPath());
                mImgView.setImageURI(uri);
            }
        }
這樣之後我們就不能看到展示圖片效果了,如下:

當然測試的時候程序崩潰了,原因是圖片在外部存儲上,這裏只需要再聲明讀取外部存儲的權限就可以正常顯示了。

好了,今天就到這裏。

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