扩展文件 - 复制和使用

时间:2014-07-06 22:12:36

标签: java android apk-expansion-files

我一直在寻找一些不同的教程,但我真的很难确切地看到如何将扩展文件首先复制到用户无法访问的位置以及如何在我的实际应用中使用它们。

我会在扩展文件中包含大量关键图像,因此在下载所有内容之前还需要阻止用户玩游戏。

最后,我还必须为大量图像访问基于密度的部分,以及一些原始文件,如视频,这是我目前要解决的问题,在扩展文件中打开哪个文件夹

String ExpansionFolder = "";
switch (getResources().getDisplayMetrics().densityDpi)
{
    case DisplayMetrics.DENSITY_MEDIUM:
        ExpansionFolder = "mdpi";
        break;
    case DisplayMetrics.DENSITY_HIGH:
        ExpansionFolder = "hdpi";
        break;
    default: // This cover XHDPI, XXHDPI, TVDPI
        ExpansionFolder = "xhdpi";
        break;
}

我非常感谢我可以使用的一些示例代码。

1 个答案:

答案 0 :(得分:1)

我没有示例代码,因为我自己还没有使用过扩展文件,但是Android Developer APK Expansion Files page似乎可以找到问题的具体答案。

  

如何首先将扩展文件复制到用户无法访问的位置以及如何在我的实际应用中使用它们。

来自" Storag位置"扩展文件(APK Expansion Files)上的Android开发者页面部分:

  

当Google Play将您的扩展文件下载到设备时,它会将其保存到系统的共享存储位置。要确保正确的行为,您不得删除,移动或重命名扩展文件。如果您的应用程序必须从Google Play本身执行下载,则必须将文件保存到完全相同的位置。

     

扩展文件的具体位置是:

     

[共享存储] / Android设备/ OBB //   [shared-storage]是共享存储空间的路径,可从getExternalStorageDirectory()获得。   [package-name]是您的应用程序的Java样式包名,可从getPackageName()获得。   对于每个应用程序,此目录中永远不会有两个以上的扩展文件。一个是主扩展文件,另一个是补丁扩展文件(如果需要)。使用新的扩展文件更新应用程序时,将覆盖以前的版本。

     

如果必须解压缩扩展文件的内容,请不要删除.obb扩展文件,也不要将解压缩的数据保存在同一目录中。您应该将解压缩的文件保存在getExternalFilesDir()指定的目录中。但是,如果可能,最好使用扩展文件格式,允许您直接从文件中读取,而不是要求您解压缩数据。例如,我们提供了一个名为APK Expansion Zip Library的库项目,可直接从ZIP文件中读取数据。

     

注意:与APK文件不同,用户和其他应用程序可以读取共享存储上保存的所有文件。

来自http://developer.android.com/reference/android/content/Context.html#getExternalFilesDir(java.lang.String)

getExternalFilesDir

  

返回主外部文件系统上的目录的绝对路径(在Environment.getExternalStorageDirectory()上的某个位置),其中应用程序可以放置它拥有的持久文件。 这些文件是应用程序的内部文件,通常不会被用户视为媒体。


  

我会在扩展文件中包含大量关键图像,因此在下载所有内容之前还需要阻止用户玩游戏。

从"下载扩展文件" APK Expansion Files的部分:

  

在大多数情况下,Google Play会在安装或更新APK的同时下载并将扩展文件保存到设备。这样,当您的应用程序首次启动时,扩展文件可用。但是,在某些情况下,您的应用必须通过Google Play应用许可服务的响应中提供的URL请求扩展文件本身。

     

下载扩展文件所需的基本逻辑如下:

     

当您的应用程序启动时,在共享存储位置(在Android / obb / [package-name] /目录中)查找扩展文件。

     
      
  1. 如果存在扩展文件,则您已全部设置,您的应用程序可以继续。
  2.   
  3. 如果扩展文件不存在:   一个。使用Google Play的应用程序许可执行请求,以获取应用程序的扩展文件名,大小和URL。   湾使用Google Play提供的网址下载扩展文件并保存扩展文件。您必须将文件保存到共享存储位置(Android / obb / [package-name] /)并使用Google Play的响应提供的确切文件名。
  4.         

    注意:Google Play为您的扩展文件提供的网址对于每次下载都是唯一的,并且每个下载后的每个网址都会在您的应用程序发布后立即过期。

         

    除了LVL之外,还需要一组代码,通过HTTP连接下载扩展文件,并将它们保存到设备共享存储的正确位置。在将此过程构建到应用程序中时,您应该考虑以下几个问题:

         
        
    • 设备可能没有足够的空间容纳扩展文件,因此您应该在开始下载之前进行检查,并在用户空间不足时发出警告。
    •   
    • 文件下载应在后台服务中进行,以避免阻止用户交互,并允许用户在下载完成时离开您的应用。
    •   
    • 在您必须正常处理的请求和下载过程中可能会发生各种错误。
    •   
    • 下载过程中网络连接可能会发生变化,因此您应该处理此类更改,如果中断,请尽可能恢复下载。
    •   
    • 在后台进行下载时,您应该提供指示下载进度的通知,在用户完成时通知用户,并在选择后将用户带回您的应用程序。
    •   
         

    为了简化这项工作,我们构建了下载程序库,它通过许可服务请求扩展文件URL,下载扩展文件,执行上面列出的所有任务,甚至允许您暂停和恢复下载的活动。通过向应用程序添加下载程序库和一些代码挂钩,几乎所有下载扩展文件的工作都已经为您编码。因此,为了代表您以最小的努力提供最佳用户体验,我们建议您使用下载程序库下载扩展文件。 以下各节中的信息说明了如何将库集成到您的应用程序中

您可能还会发现Steps to create APK expansion file有用,如果您还没有看到它,但我不知道Google是否更改了有关扩展文件的内容,因为该问题及其答案已发布。