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

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.