Qt Androidで外部ストレージにアクセス出来ない場合に試すこと
概要
Qt Creatorを使って書いたソフトウェアでAndroidのストレージにアクセスしようとしても「permission denied」となりハマりました。
インターネットで調べても中々これだ!という記事が見つけられず困ったので記事として残そうと思います。
Qtを使ったAndroid開発は初心者です。
こうするのが今の主流だ!などがあれば、是非ご指摘ください。
確認環境
Qt Version : 5.13.1
Qt Creator : 4.10.0
解決方法
以下の設定を行う必要があります。
「AndroidManifest.xml」にて「android.permission.READ_EXTERNAL_STORAGE」を追加します。しかし、API Level 24以降(?)ではうまくいきません。
以下のようなコードを書き、呼び出すことでAndroidデバイス上で「〇〇へのアクセスを許可しますか?」という確認ダイアログを表示させることが出来るようです。ダイアログ上で許可することでソフトウェアはAndroidストレージへアクセス出来るようになります。肝は「requestAndroidPermissions」メソッドになります。
#if defined (Q_OS_ANDROID)
#include <QtAndroid>
bool requestAndroidPermissions(){
//Request requiered permissions at runtime
const QVector<QString> permissions({"android.permission.READ_EXTERNAL_STORAGE"});
for(const QString &permission : permissions){
auto result = QtAndroid::checkPermission(permission);
if(result == QtAndroid::PermissionResult::Denied){
auto resultHash = QtAndroid::requestPermissionsSync(QStringList({permission}));
if(resultHash[permission] == QtAndroid::PermissionResult::Denied)
return false;
}
}
return true;
}
#endif
~
int main(int argc, char *argv[])
{
#if defined (Q_OS_ANDROID)
if(!requestAndroidPermissions())
return -1;
#endif
~
参考にしたサイト様
- http://amin-ahmadi.com/2015/11/29/how-to-add-permissions-to-your-qt-android-app/
- https://forum.qt.io/topic/100134/android-runtime-permissons
終わり
一つのソフトウェア完成までの道のりは長いです...。Qiita、Qt Forum、Qtの公式ドキュメントには毎回助けられています。ありがとうございます。
Author And Source
この問題について(Qt Androidで外部ストレージにアクセス出来ない場合に試すこと), 我々は、より多くの情報をここで見つけました https://qiita.com/IwachanOrigin/items/6ed4a4aed361d3cc7c3c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .