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

标签 android c++ qt

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

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

最佳答案

我已经解决了:

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

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),最后将此权限添加到 list 中(因为扩展文件位于外部存储中):

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

我在加载之前没有检查文件是否存在(我测试的每台设备都可以直接运行),但 android 文档说您可能需要手动下载它。上传扩展文件也有一些问题,您只能在第二次提交 apk 时添加它们(在 Google play 中)。

关于android - 如何从 Qt 获取 android <shared-storage> 路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31910050/

相关文章:

c++ - 如何在 Qt 中重新启动一个线程?

android - 如何在 Activity 从 Web 服务请求 SoapObject 时实现 ProgressDialog?

android - 迁移到 AndroidX 后的 SingleLiveEvent 问题

c++ - QGraphicsItem 上的事件过滤器

c++ - 如何检查两个元组的所有成员是否不同?

c++ - 关于 new[][] 和初始化数组中的类

python - 如何在 QtDesigner 中移动项目?

android - 如何以一种语言显示字符串资源并将其存储在其他语言中?

android - 偶尔的二进制 XML 文件行 #XX : Error inflating class <unknown>

C++ - 临界值概率分布