首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从Qt获取android <shared-storage>路径?

如何从Qt获取android <shared-storage>路径?
EN

Stack Overflow用户
提问于 2015-08-10 08:11:05
回答 3查看 4K关注 0票数 3

我不得不在Google Play控制台上用我的应用程序(用Qt开发)上传一个单独的扩展文件。这是一个简单的rcc文件。上传后我有文件的名称(它显示在google控制台页面上)。但我似乎在Android文档页面(http://developer.android.com/google/play/expansion-files.html#StorageLocation)上找不到任何关于如何获取共享存储路径(如上所述)的信息。

我确实遇到了这个问题(How to add android expansion files using Qt),用户似乎已经解决了这个问题,但没有给出如何获取共享存储路径的任何细节。

EN

回答 3

Stack Overflow用户

发布于 2015-08-10 11:16:04

我已经解决了:

我使用qt rcc tool将包含大文件的qrc转换为二进制文件,然后使用以下代码从expansion活动中调用适当的方法并检索到扩展文件的正确路径:

代码语言:javascript
复制
QAndroidJniObject mediaDir = QAndroidJniObject::callStaticObjectMethod("android/os/Environment", "getExternalStorageDirectory", "()Ljava/io/File;");
QAndroidJniObject mediaPath = mediaDir.callObjectMethod( "getAbsolutePath", "()Ljava/lang/String;" );
QAndroidJniObject activity = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative", "activity", "()Landroid/app/Activity;");
QAndroidJniObject package = activity.callObjectMethod("getPackageName", "()Ljava/lang/String;");

QString dataAbsPath = mediaPath.toString()+"/Android/obb/"+package.toString()+"/yourExpansionFileName.obb";

QAndroidJniEnvironment env; // Don't know what this is for ? 
if (env->ExceptionCheck()) { env->ExceptionClear(); } // Or this...?

bool loadResource = QResource::registerResource(dataAbsPath);

别忘了在你的应用中添加#include <QAndroidJniEnvironment> (以及pro文件中的QT += androidextras ),最后将此权限添加到清单中(因为扩展文件位于外部存储中):

代码语言:javascript
复制
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

我在加载之前没有检查文件是否在那里(我测试的每个设备都正常工作),但android文档说你可能需要手动下载它。上传扩展文件也有一些问题,你只能在第二次提交apk时添加它们(在Google play中)。

票数 7
EN

Stack Overflow用户

发布于 2016-02-04 02:55:33

这段代码可能会对你有所帮助。

代码语言:javascript
复制
QStringList systemEnvironment = QProcess::systemEnvironment();

寻找

  1. EXTERNAL_STORAGE=/storage/emulated/legacy
  2. EXTERNAL_ADD_STORAGE=/storage/external_SD
  3. SECONDARY_STORAGE=/storage/external_SD
  4. ...
票数 1
EN

Stack Overflow用户

发布于 2022-01-25 11:45:15

这段代码对我来说很有效:

代码语言:javascript
复制
QString s = QStandardPaths::writableLocation(QStandardPaths::movieLoaction);
QDir MyDir;
s = s + "/MyFolder"
MyDir.mkdir(s);

在Android设备中,您必须检查应用程序的存储权限。如果没有添加此权限,则运行应用程序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31910050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档