Guest User

Untitled

a guest
Jan 16th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.72 KB | None | 0 0
  1. package com.imagecompressor;
  2.  
  3. import android.content.ContentResolver;
  4. import android.database.Cursor;
  5. import android.net.Uri;
  6. import android.os.AsyncTask;
  7.  
  8. import com.facebook.react.bridge.Arguments;
  9. import com.facebook.react.bridge.Promise;
  10. import com.facebook.react.bridge.ReactApplicationContext;
  11. import com.facebook.react.bridge.ReactContextBaseJavaModule;
  12. import com.facebook.react.bridge.ReactMethod;
  13. import com.facebook.react.bridge.WritableArray;
  14. import com.facebook.react.bridge.WritableMap;
  15. import com.facebook.react.bridge.WritableNativeArray;
  16.  
  17. import java.util.HashMap;
  18. import java.util.Map;
  19.  
  20.  
  21. /**
  22. * Created by varun on 5/1/18.
  23. */
  24.  
  25. public class GalleryModule extends ReactContextBaseJavaModule {
  26.  
  27. private static final String DISPLAY_NAME = "DISPLAY_NAME";
  28. private static final String DATA = "DATA";
  29. private static final String DATE_TAKEN = "DATE_TAKEN";
  30. private static final String SIZE_IN_BYTES = "SIZE_IN_BYTES";
  31. private ReactApplicationContext reactContext;
  32.  
  33. public GalleryModule(ReactApplicationContext reactContext) {
  34. super(reactContext);
  35. this.reactContext = reactContext;
  36. }
  37.  
  38. @Override
  39. public String getName() {
  40. return "GalleryModule";
  41. }
  42.  
  43. @Override
  44. public Map<String, Object> getConstants() {
  45. final Map<String, Object> constants = new HashMap<>();
  46. constants.put(DISPLAY_NAME, DISPLAY_NAME);
  47. constants.put(DATA, DATA);
  48. constants.put(DATE_TAKEN, DATE_TAKEN);
  49. constants.put(SIZE_IN_BYTES, SIZE_IN_BYTES);
  50. return constants;
  51. }
  52.  
  53. @ReactMethod
  54. public void getImages(final Promise promise) {
  55. new GetImagesTask(promise, reactContext).execute();
  56. }
  57.  
  58. private static class GetImagesTask extends AsyncTask<Void, Void, Void> {
  59.  
  60. private Promise promise;
  61. private ReactApplicationContext reactContext;
  62.  
  63. GetImagesTask(Promise promise, ReactApplicationContext reactContext) {
  64. this.promise = promise;
  65. this.reactContext = reactContext;
  66. }
  67.  
  68. @Override
  69. protected Void doInBackground(Void... voids) {
  70. try {
  71. WritableArray imagesArray = new WritableNativeArray();
  72. ContentResolver imageResolver = reactContext.getContentResolver();
  73. Uri imageUri = android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
  74. Cursor imageCursor =
  75. imageResolver.query(imageUri, null, null, null,
  76. android.provider.MediaStore.Images.Media.DATE_TAKEN + " DESC");
  77. if (imageCursor != null && imageCursor.moveToFirst()) {
  78. int displayNameColumn =
  79. imageCursor.getColumnIndex(
  80. android.provider.MediaStore.Images.Media.DISPLAY_NAME
  81. );
  82. int dataColumn =
  83. imageCursor.getColumnIndex(
  84. android.provider.MediaStore.Images.Media.DATA
  85. );
  86. int sizeColumn =
  87. imageCursor.getColumnIndex(
  88. android.provider.MediaStore.Images.Media.SIZE
  89. );
  90. int dateColumn =
  91. imageCursor.getColumnIndex(
  92. android.provider.MediaStore.Images.Media.DATE_TAKEN
  93. );
  94. do {
  95. WritableMap map = Arguments.createMap();
  96. map.putString(DISPLAY_NAME, imageCursor.getString(displayNameColumn));
  97. map.putString(DATA, imageCursor.getString(dataColumn));
  98. map.putString(DATE_TAKEN, imageCursor.getString(dateColumn));
  99. map.putInt(SIZE_IN_BYTES, imageCursor.getInt(sizeColumn));
  100. imagesArray.pushMap(map);
  101. } while (imageCursor.moveToNext());
  102. }
  103. promise.resolve(imagesArray);
  104. } catch (Exception e) {
  105. promise.reject(e);
  106. }
  107. return null;
  108. }
  109. }
  110. }
  111.  
  112. /**
  113. * (wrapping the native module in a JavaScript module GalleryModule.js)
  114. *
  115. * import {NativeModules} from 'react-native';
  116. * module.exports = NativeModules.GalleryModule;
  117. *
  118. */
  119.  
  120. /**
  121. * (Using GalleryModule in react-native)
  122. *
  123. * import GalleryModule from './native_modules/GalleryModule';
  124. *
  125. * async getImagesFromGallery() {
  126. * try {
  127. * const images = await GalleryModule.getImages();
  128. * this.setState({
  129. * photos: images
  130. * });
  131. * //console.log(images);
  132. * } catch (e) {
  133. * console.error(e);
  134. * }
  135. * }
  136. *
  137. */
Add Comment
Please, Sign In to add comment