Папка RAW файлов (аудио) в Nativescript - PullRequest
0 голосов
/ 24 января 2019

Является ли папка raw автоматически учитываемой NativeScript при упаковке приложения?

Я не мог найти ссылку на это. Поэтому я пытаюсь сохранить файл .mp3 в этой папке и использовать его в качестве пользовательского звука уведомления.

Проблема в следующем: Как я могу ссылаться на этот файл? Что я должен написать как путь? Вот соответствующий код:

// how should my path be like here?
const sound = android.net.Uri.fromFile(new java.io.File('path????'));

const notification = notificationBuilder
    .setSmallIcon(ad.resources.getDrawableId('icon'))
    .setContentTitle('Some test notification')
    .setContentText('Done with native builder')
    .setPriority(2)
    .setSound() 
    .setVibrate([0, 550, 200, 500])
    .setLights(200, 500, 1000)
    .build();

Заранее спасибо всем, кто хочет помочь 100

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Попробуйте это для URI звукового файла

    import * as application from 'tns-core-modules/application';

    const uri = new android.net.Uri.Builder()
        .scheme(android.content.ContentResolver.SCHEME_ANDROID_RESOURCE)
        .authority(application.android.nativeApp.getPackageName())
        .appendPath("raw")
        .appendPath("filename")
        .build();
0 голосов
/ 24 января 2019

Нет прямого доступа к содержимому папки raw.Между тем, вы можете получить доступ следующим образом.

export function createSound(){
    var context = app.android.context;
    var resourcestmp = context.getResources();
    var ident = resourcestmp.getIdentifier("test", "raw", context.getPackageName());
    readFile(ident);
}

function getFDForResource(context, resId) {
    var afd = context.getResources().openRawResourceFd(resId);
    if (afd != null) {
       return afd.getFileDescriptor();
    }
    return null;
}

function readFile(resId) {
    var context = app.android.context;
    var fd = getFDForResource(context, resId);
    if(fd != null) {
        var inputStream = new java.io.FileInputStream(fd);
        var nextByte;
        console.log(inputStream);
        while((nextByte = inputStream.read()) != -1) {
            // read here.
        }
    }
}

Для дальнейшего чтения, вы можете сослаться здесь .

...