qt 안드로이드 개발 관련 질문드립니다.

lalupo20의 이미지

일단 연습용으로 mp3플레이어 앱을 만드려고 합니다.

우선 mp3 파일을 불러와야 해서 메모리 읽기쓰기 권한이 필요한데

qt상에서는 권한을 어떻게 얻는지 모르겠습니다.

일단 웹상에서

 auto  result = QtAndroid::checkPermission(QString("android.permission.CAMERA"));
        if(result == QtAndroid::PermissionResult::Denied){
            QtAndroid::PermissionResultMap resultHash = QtAndroid::requestPermissionsSync(QStringList({"android.permission.CAMERA"}));
            if(resultHash["android.permission.CAMERA"] == QtAndroid::PermissionResult::Denied)
                return 0;
        }

위와 같은 소스코드를 얻었는데요.

QtAndroid.h 라는 헤더파일을 추가해야 되는데

제가 설치한 환경에서는 해당 헤더파일이 없는것 같습니다..

인터넷 검색해도 별다른 정보 없는듯 하구요.

혹시 Qt 개발 경험 있는 분 계신가요?

lalupo20의 이미지

QtAndroid.h 파일이 qandroidextras_p.h로 대체되었다 합니다. #include <6.4.2(qt 버전)/QtCore/private/qandroidextras_p.h> 이렇게 해주어야 되네요. 근데 이 헤더파일 인클루드하면 qandroidextras_p.h파일에 인클루드된 헤더파일을 못찾는다고 나옵니다. 이부분은 qandroidextras_p.h파일의 인클루드된 경로를 수정해주어야 할 것 같습니다

lalupo20의 이미지

일단 헤더파일의 경로가 "QtCore/6.4.2(qt 버전)/QtCore/private/qandroidextras_p.h 이렇게 되는데 private 폴더를 첫번째 QtCore폴더로 복사했습니다. 이렇게 해서 "QtCore/private/qandroidextras_p.h"를 인클루드해주면 헤더파일을 못찾는다는 메시지 안나오고 빌드 잘 됩니다.
그리고 파일 권한 얻는 함수는

bool checkPermission()
{
    auto r = QtAndroidPrivate::checkPermission(QtAndroidPrivate::Storage).result();
    if (r == QtAndroidPrivate::Denied)
    {
        r = QtAndroidPrivate::requestPermission(QtAndroidPrivate::Storage).result();
        if (r == QtAndroidPrivate::Denied)
            return false;
    }
    return true;
}

위와 같은 함수를 웹상에서 얻었습니다.

그리고 Mp3파일을 찾는 함수는

QString path1 = "/storage/emulated/0";
    QString path2 = "/mnt/sdcard";
 
    QDirIterator it(path1, QStringList() << "*.mp3", QDir::Files, QDirIterator::Subdirectories);
    while (it.hasNext()) {
        it.next();
        listWidget->addItem(it.fileName());
    }

이와 같은 함수를 또한 구했구요.

위 세가지 사항을 이용해서 코드를 구현하면 파일 찾기 기능이 정상 작동합니다.

그리고 파일찾기 코드에서 path1부분은 안드로이드 루트경로를 넣어주어야 하는데

QDir::rootPath() 함수는 '/'로서 정상적으로 작동하지 않습니다.

위에 root경로를 두개 넣어 놨는데, 폰마다 루트경로가 다르다고 해서 위와 같이 해두었습니다.

이 글이 다른분들께 조금이나마 도움이 되었으면 합니다.

shint의 이미지

PermissionResultMap
qandroidextras_p 구글 검색

코틀린 코루틴으로 onRequestPermis.. : 네이버블로그
http://blog.naver.com/eominsuk55/222614936904

makersweb - 안드로이드용 Qt 6.2
http://makersweb.net/qt/22901

Re: [Interest] Qt6: Android: checkPermission is not available yet?
http://www.mail-archive.com/interest@qt-project.org/msg36331.html

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com