2016-02-19 69 views
0

我正在使用以下代碼從圖庫中選取圖像。當我使用三星Galaxy S4進行測試時,它直接進入了我真正想要的畫廊。Intent.ACTION_PICK行爲不同

但是,當我在LG Optimus II設備上測試我的代碼時,它顯示一個對話框提供了一個選項來選擇圖庫或圖片。換句話說,它增加了一個我不想要的圖層。

這兩款設備都有KitKat 4.4.2操作系統。

public static void showFileChooser(Activity activity) { 
    Intent intent = new Intent(); 
    intent.setType("image/*"); 
    intent.setAction(Intent.ACTION_PICK); 
    activity.startActivityForResult(Intent.createChooser(intent, "Select Picture"), 1); 
} 

回答

4

當我測試我LG的Optimus II設備上的代碼,它顯示一個對話框給出選擇圖庫或圖片的選項

這是因爲該設備上有兩個支持ACTION_PICKimage/*文件的活動。根據設備上的應用程序,可能有零到N個這樣的活動。這將包括用戶自己安裝的預安裝的應用程序和應用程序。這些將從本地文件管理器到通用雲提供商(例如,Dropbox)到圖像特定應用(例如,Instagram)。

換句話說,它增加了一個我不想要的圖層。

然後不要使用ACTION_PICK。您正在委託第三方應用程序;它取決於用戶而不是用戶希望使用的第三方應用程序。

+1

非常感謝您的澄清。你推薦我什麼意圖直接打開圖庫?用戶是否可能沒有畫廊或圖片?如果是的話,那麼什麼意圖需要被稱爲是安全的?總的來說,我想知道處理這種情況的通用方法是什麼。 – casillas

+1

@casillas:「你推薦我用什麼意圖直接打開Gallery?」 - 空無一人。首先,沒有要求Android設備具有名爲「圖庫」的應用程序。即使設備具有這樣的應用程序,也沒有標準的「意圖」可用於所有設備,這些設備將專門打開該應用程序和該應用程序。即使有這樣的「Intent」,最有可能的只是打開應用程序,而不是提供任何「挑選」功能。而且,*用戶*可能不想使用該應用程序。 「用戶是否有可能沒有畫廊或圖片?」 - 不太可能,但可能。 – CommonsWare

+0

再次感謝您提供更多詳細信息。選擇圖像的常用方法是什麼?我正在處理用戶選擇圖像的應用程序,一旦他提交圖像,就會將圖像發送到服務器。 – casillas

3

如果你想畫廊則

Intent pickImageIntent = new Intent(Intent.ACTION_PICK, 
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 

請使用API​​ 19以上

if (Build.VERSION.SDK_INT < 19) { 
         Intent intent = new Intent(); 
         intent.setType("image/jpeg"); 
         intent.setAction(Intent.ACTION_GET_CONTENT); 

         startActivityForResult(Intent.createChooser(intent, 
           "Select image to promote"), 
           GALLERY_INTENT_CALLED); 

        } else { 
         Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); 
         intent.addCategory(Intent.CATEGORY_OPENABLE); 
         intent.setType("image/jpeg"); 
         startActivityForResult(intent, 
           GALLERY_KITKAT_INTENT_CALLED); 
        } 
+0

但我的應用程序應該兼容Kitkat,Lollillop和Marshmallow。目標最低的API是15 – casillas

+0

我已經更新了我的答案。請嘗試一次。 –