2015-03-07 2 views
0

Я пытаюсь записать файл на SD-карте устройства Android из AudioSystem.cpp. Это сервис в Android Framework. Я изменяю исходный код.Записать файл на sdcard из AudioSystem (код на C++) в Android 5.0.1_r1

Я использую следующий код:

int fd = open("/sdcard/file.txt", O_RDWR | O_APPEND | O_CREAT, 0666); 
    if(fd > -1) { 
    __android_log_print(ANDROID_LOG_DEBUG, "gxp18", "Writing to SDCARD"); 
     write(fd, "1", strlen("1")); 
     write(fd, "\n", 1); 
     close(fd); 
    } 
    else __android_log_print(ANDROID_LOG_DEBUG, "gxp18", "ERROR while writing to SDCARD fd = %d", fd); 

Запустив код, который я всегда получаю Fd = -1

исходный код имеет следующий вид:

status_t AudioSystem::startInput(audio_io_handle_t input, 
           audio_session_t session) 
{ 
    const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); 

    if (aps == 0) return PERMISSION_DENIED; 
    return aps->startInput(input, session); 
} 

Модифицированный один это:

status_t AudioSystem::startInput(audio_io_handle_t input, 
           audio_session_t session) 
{ 
    const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); 

    /* start */ 

    int fd = open("/sdcard/file.txt", O_RDWR | O_APPEND | O_CREAT, 0666); 
    if(fd > -1) { 
    __android_log_print(ANDROID_LOG_DEBUG, "gxp18", "Writing to SDCARD"); 
     write(fd, "1", strlen("1")); 
     write(fd, "\n", 1); 
     close(fd); 
    } 
    else __android_log_print(ANDROID_LOG_DEBUG, "gxp18", "ERROR while writing to SDCARD fd = %d", fd); 

    /* end */ 

    if (aps == 0) return PERMISSION_DENIED; 
    return aps->startInput(input, session); 
} 
+0

Разрешение WRITE_EXTERNAL_STORAGE, запрошенное в файле манифеста? – greenapps

+0

Какой файл манифеста? Это не приложение для Android является частью Android Framework (AOSP). Я изменяю исходный код. – Giuseppe

+0

Ну, пожалуйста, покажите немодифицированный исходный код. – greenapps

ответ

0

Попробуйте написать /storage/emulated/0/file.txt Поскольку JB Dir немного изменился. Я предполагаю, что вы делаете это из системного сервиса

+0

Я использую устройство Nexus 5 для проверки своего кода. В этом случае путь к sdcard - /storage/sdcard0/file.txt. Я дважды проверил его, используя adb. К сожалению, я все еще получаю fd = -1 – Giuseppe