capacitor-community / capacitor-community/media

Unimplemented error in Media.getMedias, I have the code please migrate it

Open
#97 1 comment 1 reaction 0 assignees View on GitHub
Dominant language
TypeScript
Stars
133
Forks
62
PR merge metrics
No merged PRs in 30d

Description

This is my plugin https://www.npmjs.com/package/cordova-plugin-readmedia-codeplay
I have done this already in my cordova plugin, please check the code below and please implement these fractures on this plugin

```
package cordova.plugin.readmedia.codeplay;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CallbackContext;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.provider.MediaStore;

import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CallbackContext;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

/**
* This class echoes a string called from JavaScript.
*/
public class readmedia extends CordovaPlugin {

@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {

if (action.equals("getAudioFiles")) {
this.getFiles(callbackContext,"audio");
return true;
}
if (action.equals("getVideoFiles")) {
this.getFiles(callbackContext,"video");
return true;
}
if (action.equals("getImageFiles")) {
this.getFiles(callbackContext,"image");
return true;
}
return false;
}

private void getFiles(CallbackContext callbackContext,String fileType) {
ContentResolver contentResolver = this.cordova.getActivity().getContentResolver();
Uri uri=null;
String[] projection=null;

if (fileType.equals("audio")) {
uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
projection = new String[]{
MediaStore.Audio.Media.DURATION,
MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Audio.Media.DATA
};
}
else if (fileType.equals("video")) {
uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
projection = new String[]{
MediaStore.Video.Media.DURATION,
MediaStore.Video.Media._ID,
MediaStore.Video.Media.DISPLAY_NAME,
MediaStore.Video.Media.DATA
};
}
else if(fileType.equals("image"))
{
uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
projection = new String[]{
MediaStore.Images.Media.DURATION,
MediaStore.Images.Media._ID,
MediaStore.Images.Media.DISPLAY_NAME,
MediaStore.Images.Media.DATA
};
}

/* // Modify the selection clause to filter by directory
String selection = MediaStore.Audio.Media.DATA + " like ?";
String[] selectionArgs = new String[]{"%/Music/%"}; // Adjust this path to the desired directory */

Cursor cursor = contentResolver.query(uri, projection, null, null, null);
JSONArray audioFiles = new JSONArray();

if (cursor != null) {
while (cursor.moveToNext()) {
JSONObject audioFile = new JSONObject();
try {
audioFile.put("id", cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID)));
audioFile.put("name", cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME)));
audioFile.put("path", cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA)));
audioFiles.put(audioFile);
} catch (JSONException e) {
e.printStackTrace();
}
}
cursor.close();
}

callbackContext.success(audioFiles);
}

}

/*



cordova.plugins.readmedia.getAudioFiles(function(a){ debugger; },function(a){ debugger; })
cordova.plugins.readmedia.getVideoFiles(function(a){ debugger; },function(a){ debugger; })
cordova.plugins.readmedia.getImageFiles(function(a){ debugger; },function(a){ debugger; })

var permissions = cordova.plugins.permissions;

permissions.requestPermission(permissions.READ_MEDIA_AUDIO, function(status) {
if (status.hasPermission) {
console.log('Permission granted');
// Permission granted, you can now proceed with operations requiring this permission
} else {
console.log('Permission denied');
// Handle the case where permission is denied
}
}, function(error) {
console.error('Error requesting permission:', error);
});

var permissions = cordova.plugins.permissions;

permissions.requestPermission(permissions.READ_MEDIA_VIDEO, function(status) {
if (status.hasPermission) {
console.log('Permission granted');
// Permission granted, you can now proceed with operations requiring this permission
} else {
console.log('Permission denied');
// Handle the case where permission is denied
}
}, function(error) {
console.error('Error requesting permission:', error);
});


var permissions = cordova.plugins.permissions;

permissions.requestPermission(permissions.READ_MEDIA_IMAGES, function(status) {
if (status.hasPermission) {
console.log('Permission granted');
// Permission granted, you can now proceed with operations requiring this permission
} else {
console.log('Permission denied');
// Handle the case where permission is denied
}
}, function(error) {
console.error('Error requesting permission:', error);
});

*/
```

Contributor guide

Open the contributing guide

Research direction

Start at the Media.getMedias entry point and compare its current behavior with the supplied Android Cordova implementation using MediaStore. Trace how audio, video, and image results and media permissions are exposed by this Capacitor plugin; done means the requested media categories can be retrieved through the plugin API.

Written by the indexing model from the issue text.

Assessment

Tech stack
android, typescript
Domain
mobile
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.