Как вернуть Uri уже существующего медиа-файла? - PullRequest
0 голосов
/ 08 января 2012

в моем методе я сохраняю файл в SDCard и возвращаю Uri

String path = "/sdcard/media/audio/ringtones/";
String resourceEntryName = activity.getApplicationContext().getResources().getResourceEntryName(audioResourceId);
String filename = resourceEntryName + ".ogg";

File mediaFile = new File(path, filename);
if (!mediaFile.exists()) {

        saveFile();

        ContentValues values = new ContentValues();
        values.put(MediaStore.MediaColumns.DATA, mediaFile.getAbsolutePath());
        values.put(MediaStore.MediaColumns.TITLE, resourceEntryName);
        values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/*");
        values.put(MediaStore.Audio.Media.ARTIST, name);
        values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
        values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);
        values.put(MediaStore.Audio.Media.IS_ALARM, true);
        values.put(MediaStore.Audio.Media.IS_MUSIC, false);

        Uri uri = MediaStore.Audio.Media.getContentUriForPath(mediaFile.getAbsolutePath());
        return activity.getContentResolver().insert(uri, values);
    } else {
        return ???
    }

Если файл существует, я хочу вернуть Uri этого файла, но если я сделаю

return MediaStore.Audio.Media.getContentUriForPath(mediaFile.getAbsolutePath());

iНеправильно, Ури, потому что, используя этот Ури, я не могу установить его в качестве мелодии звонка.Я хочу вернуть Uri, который я могу использовать для установки этого звука в качестве мелодии звонка.

Я попробовал MediaStore.Audio.Media.getContentUri (resourceEntryName);это тоже не сработало

1 Ответ

1 голос
/ 08 января 2012

Вы можете преобразовать этот Uri в пригодный для использования Uri с помощью моего небольшого статического метода:

public static String getRealPathFromUri(Activity activity, Uri contentUri) {
    String[] proj = { MediaStore.Images.Media.DATA };
    Cursor cursor = activity.managedQuery(contentUri, proj, null, null, null);
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}

Используйте его следующим образом:

Uri uri = MediaStore.Audio.Media.getContentUriForPath(mediaFile.getAbsolutePath());
Uri uri = FileUtil.getRealPathFromUri(getApplicationContext(), uri);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...