嗨讓所有圖片我想打一個畫廊APP在科爾多瓦6.1.1科爾多瓦的Android - 從設備
,我需要從設備
我這樣做對我的應用程序的iOS得到所有圖片版本「文件」和「AssetsLib」插件
https://github.com/glowmar/phonegap-plugin-assetslib
但我不知道怎麼做,在Android
嗨讓所有圖片我想打一個畫廊APP在科爾多瓦6.1.1科爾多瓦的Android - 從設備
,我需要從設備
我這樣做對我的應用程序的iOS得到所有圖片版本「文件」和「AssetsLib」插件
https://github.com/glowmar/phonegap-plugin-assetslib
但我不知道怎麼做,在Android
我已經創建了一個Android Gallery Project這在網格視圖獲取和顯示所有圖像和文件夾 -
這與文件夾名的圖片文件夾的function返回地圖爲重點和ArrayList的圖像爲值
public static Map<String, ArrayList<ImageDataModel>> getImageFolderMap(
Activity activity) {
imageFolderMap.clear();
Uri uri;
Cursor cursor;
int column_index_data, column_index_folder_name;
String absolutePathOfImage = null, folderName;
uri = android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
String[] projection = { MediaColumns.DATA,
MediaStore.Images.Media.BUCKET_DISPLAY_NAME };
cursor = activity.getContentResolver().query(uri, projection, null,
null, null);
column_index_data = cursor.getColumnIndexOrThrow(MediaColumns.DATA);
column_index_folder_name = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.BUCKET_DISPLAY_NAME);
while (cursor.moveToNext()) {
absolutePathOfImage = cursor.getString(column_index_data);
folderName = cursor.getString(column_index_folder_name);
ImageDataModel imDataModel = new ImageDataModel(folderName,
absolutePathOfImage);
if (imageFolderMap.containsKey(folderName)) {
imageFolderMap.get(folderName).add(imDataModel);
} else {
ArrayList<ImageDataModel> listOfAllImages = new ArrayList<ImageDataModel>();
listOfAllImages.add(imDataModel);
imageFolderMap.put(folderName, listOfAllImages);
}
}
// Get all Internal images
uri = android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI;
cursor = activity.getContentResolver().query(uri, projection, null,
null, null);
column_index_data = cursor.getColumnIndexOrThrow(MediaColumns.DATA);
column_index_folder_name = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.BUCKET_DISPLAY_NAME);
while (cursor.moveToNext()) {
absolutePathOfImage = cursor.getString(column_index_data);
folderName = cursor.getString(column_index_folder_name);
ImageDataModel imDataModel = new ImageDataModel(folderName,
absolutePathOfImage);
if (imageFolderMap.containsKey(folderName)) {
imageFolderMap.get(folderName).add(imDataModel);
} else {
ArrayList<ImageDataModel> listOfAllImages = new ArrayList<ImageDataModel>();
listOfAllImages.add(imDataModel);
imageFolderMap.put(folderName, listOfAllImages);
}
}
keyList = new ArrayList(imageFolderMap.keySet());
return imageFolderMap;
}
創建自定義插件: - 您可以在科爾多瓦插件合併該功能
/*
*
* This Cordova plugin help to fetch all folders with images
*/
public class ImageGalleryPlugin extends CordovaPlugin {
priva
te static final String FETCH_ALL_IMAGES_ACTION = "fetchAllImages";
private CallbackContext mCallbackContext;
@Override
public boolean execute(String action, CordovaArgs args, CallbackContext callbackContext) {
this.mCallbackContext = callbackContext;
if (FETCH_ALL_IMAGES_ACTION.equals(action)) {
cordova.getThreadPool().execute(new Runnable() {
public void run() {
mCallbackContext.success(new JSONObject(getImageFolderMap(cordova.getActivity())));
}
});
return true;
}
return false;
}
/*
* Returns an Map of image folder with key = "folder name" and value =
* "List Of Images in that Folder"
*
* Retrieve image from folder Map by
*
* 1) fetching all folder keys from Map :-
*
* ArrayList<String> folderKeyList = new ArrayList(imageFolderMap.keySet());
*
* 2) Retrive images in a folder by its index in folderKeyMap
*
* ArrayList<ImageDataModel> imageList =
* imageFolderMap.get(folderKeyList.get(indexOfFolder)) ;
*
*/
public static Map<String, ArrayList<ImageDataModel>> getImageFolderMap(Activity activity) {
String folderNameKey;
// Map to store list of images with folder name as Key Value
Map<String, ArrayList<ImageDataModel>> imageFolderMap = new HashMap<String, ArrayList<ImageDataModel>>();
// Clear Map to avoid duplication of images
imageFolderMap.clear();
int columnIndexData, columnIndexFolderName, columnIndexImageName;
// GET ALL EXTERNAL STORAGE IMAGES
Uri uri = android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
// Query image path,name and folder name
String[] projection = { MediaColumns.DATA, MediaStore.Images.Media.BUCKET_DISPLAY_NAME,
MediaStore.Images.Media.DISPLAY_NAME };
Cursor cursor = activity.getContentResolver().query(uri, projection, null, null, null);
columnIndexImageName = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DISPLAY_NAME);
columnIndexData = cursor.getColumnIndexOrThrow(MediaColumns.DATA);
columnIndexFolderName = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.BUCKET_DISPLAY_NAME);
// Iterate over all cursor data
while (cursor.moveToNext()) {
// Get folder Name of image
folderNameKey = cursor.getString(columnIndexFolderName);
// Fill data in image data Model
ImageDataModel imDataModel = new ImageDataModel(
cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DISPLAY_NAME)),
cursor.getString(columnIndexFolderName), cursor.getString(columnIndexData));
// If folder is already added in Map
if (imageFolderMap.containsKey(folderNameKey)) {
// Add Image into Existing Arraylist of images in Map
imageFolderMap.get(folderNameKey).add(imDataModel);
} else {
// If folder was not added add image into array list with folder
// name as key
ArrayList<ImageDataModel> listOfAllImages = new ArrayList<ImageDataModel>();
// Add image into array list
listOfAllImages.add(imDataModel);
// put array list into map with folder name
imageFolderMap.put(folderNameKey, listOfAllImages);
}
}
// GET ALL INTERNALK STORAGE IMAGES
uri = android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI;
// Query image path,name and folder name
cursor = activity.getContentResolver().query(uri, projection, null, null, null);
while (cursor.moveToNext()) {
folderNameKey = cursor.getString(columnIndexFolderName);
ImageDataModel imDataModel = new ImageDataModel(cursor.getString(columnIndexImageName),
cursor.getString(columnIndexFolderName), cursor.getString(columnIndexData));
// If folder is already added in Map
if (imageFolderMap.containsKey(folderNameKey)) {
// Add image to Arraylist
imageFolderMap.get(folderNameKey).add(imDataModel);
} else {
ArrayList<ImageDataModel> listOfImagesInFolder = new ArrayList<ImageDataModel>();
listOfImagesInFolder.add(imDataModel);
imageFolderMap.put(folderNameKey, listOfImagesInFolder);
}
}
return imageFolderMap;
}
}
ADD模型類來保存數據
Public class ImageDataModel {
private String imageTitle, imagePath, imageFolder;
public String getImageFolder() {
return imageFolder;
}
public void setImageFolder(String imageFolder) {
this.imageFolder = imageFolder;
}
/**
* @return the imageTitle
*/
public String getImageTitle() {
return imageTitle;
}
/**
* @param imageTitle
* the imageTitle to set
*/
public void setImageTitle(String imageTitle) {
this.imageTitle = imageTitle;
}
/**
* @return the imagePath
*/
public String getImagePath() {
return imagePath;
}
/**
* @param imagePath
* the imagePath to set
*/
public void setImagePath(String imagePath) {
this.imagePath = imagePath;
}
public ImageDataModel(String imageTitle, String imageFolder, String absolutePathOfImage) {
this.imageTitle = imageTitle;
this.imageFolder = imageFolder;
this.imagePath = absolutePathOfImage;
}
}
getAllImages: function(success,error,args){ 'use strict'; cordova.exec(success,error, "ImageGalleryPlugin", "fetchAllImages", args); },
生成失敗; 'java:67:error:鑽石運算符不支持-source 1.6 Map
您可以將Java編譯器更改爲Java 1.7或替換Map
好吧修好了,真的很感謝你!我的最後一個問題是否有機會從這些代碼中獲取縮略圖? –
你的問題可以劃分成兩個子問題
問題1: - SD卡上得到的所有圖像
解決方案: -做一個科爾多瓦插件或在現有的插件之一嵌入此方法。通過使用你自定義的cordova插件動作(比如說fetchAllImages)來調用這個方法,它會返回sd卡中所有圖像的路徑。她是一個科爾多瓦插件,我已經我沒有測試它可以正常工作,否則你會得到一個想法: -
import java.util.ArrayList;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaArgs;
import org.apache.cordova.CordovaPlugin;
import org.json.JSONArray;
import org.json.JSONException;
import android.app.Activity;
import android.database.Cursor;
import android.net.Uri;
import android.provider.MediaStore;
import android.provider.MediaStore.MediaColumns;
public class GalleryPlugin extends CordovaPlugin {
private static final String ACTION_GET_ALL_IMAGES = "getAllImages";
@Override
public boolean execute(String action, CordovaArgs args,
final CallbackContext callbackContext) throws JSONException {
try {
// if action is getAllImages
if (ACTION_GET_ALL_IMAGES.equals(action)) {
// DO operation in thread pool to avoid cordova thread blocking
cordova.getThreadPool().equals(new Runnable() {
public void run() {
// Return list of images in JSON Array
callbackContext.success(new JSONArray(
getAllShownImagesPath(cordova.getActivity())));
}
});
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
return super.execute(action, args, callbackContext);
}
/**
* Getting All Images Path.
*
* @param activity
* the activity
* @return ArrayList with images Path
*/
private ArrayList<String> getAllShownImagesPath(Activity activity) {
Uri uri;
Cursor cursor;
int column_index_data, column_index_folder_name;
ArrayList<String> listOfAllImages = new ArrayList<String>();
String absolutePathOfImage = null;
uri = android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
String[] projection = { MediaColumns.DATA,
MediaStore.Images.Media.BUCKET_DISPLAY_NAME };
cursor = activity.getContentResolver().query(uri, projection, null,
null, null);
column_index_data = cursor.getColumnIndexOrThrow(MediaColumns.DATA);
column_index_folder_name = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.BUCKET_DISPLAY_NAME);
while (cursor.moveToNext()) {
absolutePathOfImage = cursor.getString(column_index_data);
listOfAllImages.add(absolutePathOfImage);
}
return listOfAllImages;
}
}
問題2: -現在你已經在JS端的所有圖片的路徑,你需要顯示科爾多瓦web視圖圖像
解決方案: -你可以參考這篇文章Load the image saved in sdcard in webview
備選: -You can implement your own gallery app並將其嵌入到您的cordova應用程序中。
我需要設備上的所有圖片(如Android Gallery應用中的「所有圖片」文件夾)不僅SD卡 http://s31.postimg.org/d1fbj32t7/emulator.png –
添加新的答案 –
看看這個插件:[cordova-plugin-imagepicker](https://www.npmjs.com/package/cordova-plugin-imagepicker)。支持Android和iOS – utamanna
不,我不希望用戶選擇圖片,我希望他們在屏幕上看到他們的所有圖片 –