2013-03-04 4 views
0

Я работаю над приложением, которое требует от меня воспроизведения соответствующей мелодии звонка из собственного кода. До сих пор я не нашел решения для своей проблемы. Существуют ли какие-либо известные способы для получения байтов мелодий звонка для декодирования и воспроизведения их на i.e: OpenSL ES?Чтение файла мелодии звонка из родного кода на Android

Мое настоящее впечатление, что эти файлы, в общем, защищены и требуют доступа к корневому или другому теневому механизму. Это верно?

Заранее спасибо.

+1

http://stackoverflow.com/questions/3289038/play-audio-file-from-the-assets-directory –

ответ

0

У меня есть рабочее решение для этой проблемы, оно включает в себя 1 вызов JNI, чтобы получить ParcelFileDescriptor, чтобы затем получить соответствующий FD, который можно использовать на OpenSLES изначально. Просто нужно иметь в виду сохранить ParcelFileDescriptor для , закрыв FD в конце и не получая сбор мусора.

Примечание: Уровень API требуется 12, чтобы получить FD

Примечание 2: Если вы Wnt вы можете detachFd(), а затем вы должны закрыть FD на машинный код и не нужно сохранить ссылку.

static public ParcelFileDescriptor getFileDescriptor(Context context) { 
    Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE); 

    ContentResolver contentResolver = context.getContentResolver(); 

    ParcelFileDescriptor openFileDescriptor; 
    try { 
     openFileDescriptor = contentResolver.openFileDescriptor(uri, "r"); 
    } catch (FileNotFoundException e) { 
     return null; 
    } 

    return openFileDescriptor; 
} 
Смежные вопросы