日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

app分发平台java_集成 Asset Delivery (Java)

發(fā)布時(shí)間:2024/10/8 java 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 app分发平台java_集成 Asset Delivery (Java) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

您可以按照本指南中的步驟,從 Java 代碼獲取應(yīng)用的資源包。如果您尚未使用 Asset Pack 構(gòu)建 app bundle,請(qǐng)參閱針對(duì)原生代碼或 Java 代碼構(gòu)建后再繼續(xù)。

概覽

Play Core Java API 提供了用于請(qǐng)求資源包、管理下載內(nèi)容和獲取資源的 AssetPackManager 類。根據(jù)您希望獲取的 Asset Pack 的分發(fā)類型實(shí)現(xiàn)該 API。這些步驟如以下流程圖所示。

注意:用于獲取 install-time Asset Pack 的 API 與用于獲取 fast-follow 和 on-demand Asset Pack 的 API 不同。

圖 1. 獲取 Asset Pack 的流程圖

安裝時(shí)分發(fā)

配置為 install-time 的資源包可以在應(yīng)用啟動(dòng)后立即使用。使用 Java AssetManager API 獲取在此模式下提供的資產(chǎn):

import android.content.res.AssetManager;

...

Context context = createPackageContext("com.example.app", 0);

AssetManager assetManager = context.getAssets();

InputStream is = assetManager.open("asset-name");

快速跟進(jìn)式分發(fā)和按需分發(fā)

以下幾部分介紹了如何在下載 Asset Pack 前獲取其相關(guān)信息、如何調(diào)用 API 以開始下載,以及之后如何獲取已下載的 Asset Pack。這幾部分適用于 fast-follow 和 on-demand Asset Pack。

查看狀態(tài)

每個(gè)資源包都存儲(chǔ)于應(yīng)用的內(nèi)部存儲(chǔ)空間內(nèi)單獨(dú)的文件夾中。使用 getPackLocation() 方法確定 Asset Pack 的根文件夾。此方法會(huì)返回以下值:

返回值

狀態(tài)

null

未知 Asset Pack 或資產(chǎn)無法使用

注意:請(qǐng)勿依賴在兩次應(yīng)用啟動(dòng)之間的間隔時(shí)間內(nèi)緩存的 Asset Pack 位置。應(yīng)用應(yīng)在每次啟動(dòng)時(shí)始終檢查是否存在 Asset Pack。Asset Pack 可能會(huì)因應(yīng)用更新或用戶清除應(yīng)用數(shù)據(jù)而變?yōu)闊o效。

獲取有關(guān)資源包的下載信息

在提取資源包之前,應(yīng)用必須披露下載內(nèi)容的大小。使用 getPackStates() 方法確定下載內(nèi)容的大小,以及資源包是否已在下載。

Task getPackStates(List packNames)

getPackStates() 是用于返回任務(wù)的異步方法。該任務(wù)的結(jié)果包含一個(gè) AssetPackStates 對(duì)象。AssetPackStates 對(duì)象的 packStates() 方法會(huì)返回一個(gè) Map

AssetPackState>。此映射包含所請(qǐng)求的每個(gè) Asset Pack 的狀態(tài),按其名稱進(jìn)行鍵控:

Map AssetPackStates#packStates()

最終請(qǐng)求如下所示:

final String assetPackName = "myasset";

assetPackManager

.getPackStates(Collections.singletonList(assetPackName))

.addOnCompleteListener(new OnCompleteListener() {

@Override

public void onComplete(Task task) {

AssetPackStates assetPackStates;

try {

assetPackStates = task.getResult();

AssetPackState assetPackState =

assetPackStates.packStates().get(assetPackName);

} catch (RuntimeExecutionException e) {

Log.d("MainActivity", e.getMessage());

return;

})

以下 AssetPackState 方法提供了資源包的大小、截至目前已下載的數(shù)據(jù)量(如已請(qǐng)求),以及已傳輸?shù)綉?yīng)用的數(shù)據(jù)量:

如需獲取資源包的狀態(tài),請(qǐng)使用 status() 方法,該方法以整數(shù)形式返回與 AssetPackStatus 類中某個(gè)常量字段相對(duì)應(yīng)的狀態(tài)。尚未安裝的資源包狀態(tài)為 AssetPackStatus.NOT_INSTALLED。

如果請(qǐng)求失敗,請(qǐng)使用 errorCode() 方法,該方法的返回值與 AssetPackErrorCode 類中的某個(gè)常量字段相對(duì)應(yīng)。

安裝

使用 fetch() 方法首次下載資源包,或要求進(jìn)行資源包更新以完成操作:

Task fetch(List packNames)

此方法會(huì)返回一個(gè) AssetPackStates 對(duì)象,其中包含資源包列表及其初始下載狀態(tài)和大小。如果通過 fetch() 請(qǐng)求的 Asset Pack 已經(jīng)在下載,就會(huì)返回下載狀態(tài),并且不會(huì)啟動(dòng)其他下載。

注意:在大多數(shù)情況下,您需要實(shí)現(xiàn) listener 以跟蹤下載和安裝過程,如下一部分所述。

監(jiān)控下載狀態(tài)

您應(yīng)實(shí)現(xiàn) listener 以跟蹤 Asset Pack 的安裝進(jìn)度。狀態(tài)更新按 Asset Pack 細(xì)分,以支持跟蹤各 Asset Pack 的狀態(tài)。在請(qǐng)求的所有其他下載完成之前,您就可以開始使用已可供使用的資源包。

void

registerListener(AssetPackStateUpdatedListener

listener)

void

unregisterListener(AssetPackStateUpdatedListener listener)

注意:在用戶安裝或更新應(yīng)用后,Play 商店會(huì)自動(dòng)觸發(fā)下載任何 fast-follow 資源包。不過,這些資源包可能無法立即供用戶使用。您必須在每次應(yīng)用啟動(dòng)時(shí)檢查 fast-follow Asset Pack 的狀態(tài)。如果下載正在進(jìn)行,請(qǐng)使用監(jiān)聽器對(duì)其進(jìn)行監(jiān)控。如果下載已取消或暫停,您可以使用 fetch() 方法恢復(fù)下載,如安裝部分所述。

下載內(nèi)容較大

如果下載內(nèi)容超過 150 MB 并且用戶未連接到 WLAN,那么在用戶明確同意使用移動(dòng)網(wǎng)絡(luò)連接繼續(xù)下載前,下載不會(huì)開始。同樣,如果下載內(nèi)容較大并且用戶與 WLAN 的連接斷開,下載會(huì)暫停,需要用戶明確同意才能使用移動(dòng)網(wǎng)絡(luò)連接繼續(xù)下載。已暫停的 Asset Pack 狀態(tài)為 WAITING_FOR_WIFI。如需觸發(fā)界面流程以提示用戶同意,請(qǐng)使用 showCellularDataConfirmation() 方法。

請(qǐng)注意,如果應(yīng)用不調(diào)用此方法,下載會(huì)暫停,并且只有當(dāng)用戶重新連接到 WLAN 時(shí)才會(huì)自動(dòng)恢復(fù)下載。

以下是監(jiān)聽器的一個(gè)實(shí)現(xiàn)示例:

assetPackStateUpdateListener = new AssetPackStateUpdateListener() {

@Override

public void onStateUpdate(AssetPackState assetPackState) {

switch (assetPackState.status()) {

case AssetPackStatus.PENDING:

Log.i(TAG, "Pending");

break;

case AssetPackStatus.DOWNLOADING:

long downloaded = assetPackState.bytesDownloaded();

long totalSize = assetPackState.totalBytesToDownload();

double percent = 100.0 * downloaded / totalSize;

Log.i(TAG, "PercentDone=" + String.format("%.2f", percent));

break;

case AssetPackStatus.TRANSFERRING:

// 100% downloaded and assets are being transferred.

// Notify user to wait until transfer is complete.

break;

case AssetPackStatus.COMPLETED:

// Asset pack is ready to use. Start the game.

break;

case AssetPackStatus.FAILED:

// Request failed. Notify user.

Log.e(TAG, assetPackState.errorCode());

break;

case AssetPackStatus.CANCELED:

// Request canceled. Notify user.

break;

case AssetPackStatus.WAITING_FOR_WIFI:

if (!waitForWifiConfirmationShown) {

assetPackManager.showCellularDataConfirmation(MainActivity.this)

.addOnSuccessListener(new OnSuccessListener () {

@Override

public void onSuccess(Integer resultCode) {

if (resultCode == RESULT_OK) {

Log.d(TAG, "Confirmation dialog has been accepted.");

} else if (resultCode == RESULT_CANCELED) {

Log.d(TAG, "Confirmation dialog has been denied by the user.");

}

}

});

waitForWifiConfirmationShown = true;

}

break;

case AssetPackStatus.NOT_INSTALLED:

// Asset pack is not downloaded yet.

break;

}

}

}

或者,您也可以使用 getPackStates() 方法獲取當(dāng)前下載的狀態(tài)。AssetPackStates 包含下載進(jìn)度、下載狀態(tài)和任何失敗的錯(cuò)誤代碼。

獲取資源包

在下載請(qǐng)求達(dá)到 COMPLETED 狀態(tài)后,您可以使用文件系統(tǒng)調(diào)用獲取資源包。使用 getPackLocation() 方法獲取資源包的根文件夾。

資源存儲(chǔ)于資源包根目錄內(nèi)的 assets 目錄下。您可以使用便捷方法 assetsPath() 獲取 assets 目錄的路徑。請(qǐng)使用以下方法獲取特定資產(chǎn)的路徑:

private String getAbsoluteAssetPath(String assetPack, String relativeAssetPath) {

AssetPackLocation assetPackPath = assetPackManager.getPackLocation(assetPack);

if (assetPackPath == null) {

// asset pack is not ready

return null;

}

String assetsFolderPath = assetPackPath.assetsPath();

// equivalent to: FilenameUtils.concat(assetPackPath.path(), "assets");

String assetPath = FilenameUtils.concat(assetsFolderPath, relativeAssetPath);

return assetPath;

}

其他 Play Core API 方法

以下是您可能希望在應(yīng)用中使用的一些其他 API 方法。

取消請(qǐng)求

使用 cancel() 取消有效的資源包請(qǐng)求。請(qǐng)注意,此請(qǐng)求是盡力而為的操作。

移除資源包

獲取多個(gè)資源包的位置

使用 getPackLocations() 批量查詢多個(gè)資源包的狀態(tài),此方法將返回資源包與其位置的映射。getPackLocations() 返回的映射包含當(dāng)前已下載且為最新狀態(tài)的每個(gè) Asset Pack 的條目。

后續(xù)步驟

與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的app分发平台java_集成 Asset Delivery (Java)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 夜色福利 | 开心激情综合 | 中文字幕无人区二 | 欧洲美熟女乱又伦 | 日批在线播放 | 91免费观看视频在线 | 国产浮力第一页 | 四虎av| 免费男女乱淫真视频免费播放 | 欧洲做受高潮欧美裸体艺术 | 日日夜夜av | 人妻无码一区二区三区免费 | 狠狠精品干练久久久无码中文字幕 | 欧美成人三级在线观看 | 男人的天堂a在线 | 日本学生初尝黑人巨免费视频 | 国产午夜免费视频 | 麻豆爱爱视频 | 92av视频 | 成年人午夜视频 | 91传媒入口| 深夜毛片 | 最新天堂中文在线 | 精品无码人妻一区二区三区 | 8x8ⅹ国产精品一区二区二区 | 可以免费看的黄色 | 五月婷婷伊人网 | 亚洲av成人无码一二三在线观看 | 91av在线视频观看 | 国产h在线| 91最新地址| 欧亚一区二区三区 | 亚洲成av人片 | 男女搞网站 | 丰满少妇被猛烈进入高清播放 | 少妇又色又紧又爽又刺激视频 | 亚洲一区二区免费看 | 日韩午夜激情电影 | 人人操在线播放 | 污视频大全 | 精品人妻无码一区二区三区换脸 | 色图插插插 | 久久欲 | 黄色网址视频在线观看 | 天天夜夜草| 欧美理伦片在线播放 | 热逼视频 | 一区二区三区激情视频 | av片免费在线 | 色黄视频在线观看 | 国产在线视频卡一卡二 | 欧美午夜网 | 欧美与黑人午夜性猛交久久久 | 欧美天堂在线观看 | 五月婷婷六月婷婷 | 久久男人网 | 亚洲一二三精品 | 精品黑人一区二区三区国语馆 | 亚洲va韩国va欧美va精品 | 日韩区在线观看 | 影音先锋黄色资源 | 久久免费一级片 | 久草免费福利 | 亚洲视频中文字幕在线观看 | 看全色黄大色黄女片18 | 欧美 日韩 国产 在线 | 嫩草私人影院 | 日本成人在线网站 | 成人黄网免费观看视频 | 国产av国片精品 | 人妻洗澡被强公日日澡电影 | 美女天天操 | 久久精品国产成人av | 欧美日韩国产区 | 黄色片免费在线播放 | 国产成人精品免费在线观看 | 久久99国产精品成人 | 日韩在线一二三 | 肉色丝袜小早川怜子av | 操bbbbb| 一区二区播放 | 国产一页 | 2024国产精品视频 | 日韩综合 | 国产乱码在线 | 疯狂做受xxxx国产 | 国产激情一区二区三区视频免樱桃 | 国产九色在线播放九色 | 国产v亚洲 | 久久久国产精品x99av | 欧美精品激情 | √天堂在线| 亚洲一区二区三区四区在线播放 | 日本在线视频免费 | 青青草狠狠干 | 免费国偷自产拍精品视频 | 中文字幕黄色 | 亚洲黄片一区 | 日本一区二区免费视频 |