修复进程被杀重建时出现的安装状态异常问题
This commit is contained in:
@ -745,184 +745,6 @@ public class MainActivity extends BaseActivity {
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
public void onEventMainThread(EBPackage busFour) {
|
||||
final String packageName = busFour.getPackageName();
|
||||
final String versionName = busFour.getVersionName();
|
||||
String gameId = "";
|
||||
|
||||
DownloadEntity mDownloadEntity = null;
|
||||
for (DownloadEntity downloadEntity : DownloadManager.getInstance(getApplicationContext()).getAllDownloadEntity()) {
|
||||
if (packageName.equals(downloadEntity.getPackageName())) {
|
||||
mDownloadEntity = downloadEntity;
|
||||
gameId = mDownloadEntity.getRealGameId(Constants.GAME_ID_DIVIDER);
|
||||
if (TextUtils.isEmpty(busFour.getVersionName())) {
|
||||
// 没有版本号的事件直接选用第一个找到的 downloadEntity
|
||||
break;
|
||||
} else {
|
||||
// 有版本号的事件直接尽量找到版本一致的 downloadEntity
|
||||
if (versionName.equals(downloadEntity.getVersionName())) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ("安装".equals(busFour.getType())) {
|
||||
mPackageViewModel.addInstalledGame(packageName);
|
||||
|
||||
// 删除下载完成 弹窗
|
||||
NotificationManager nManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
nManager.cancel(packageName.hashCode());
|
||||
|
||||
if (mDownloadEntity != null) {
|
||||
if (mDownloadEntity.isPluggable()) {
|
||||
Map<String, Object> kv6 = new HashMap<>();
|
||||
kv6.put("安装或卸载", "安装完成");
|
||||
DataUtils.onEvent(this, "插件化", mDownloadEntity.getName(), kv6);
|
||||
|
||||
// DataUtils.onMtaEvent(this,
|
||||
// "插件化_新",
|
||||
// "位置", mDownloadEntity.getEntrance(),
|
||||
// "游戏", mDownloadEntity.getName() + "-" + mDownloadEntity.getPlatform(),
|
||||
// "操作", "安装完成",
|
||||
// "网络状态", DeviceUtils.getNetwork(HaloApp.getInstance().getApplication()));
|
||||
}
|
||||
|
||||
// 没有光环 ID 的都记录一下游戏 ID,供'我的游戏'区分同包名不同插件用
|
||||
Object gh_id = PackageUtils.getMetaData(this, mDownloadEntity.getPackageName(), "gh_id");
|
||||
if (gh_id == null) {
|
||||
ThirdPartyPackageHelper.saveGameId(mDownloadEntity.getPackageName(), mDownloadEntity.getGameId());
|
||||
}
|
||||
DownloadManager.getInstance(getApplicationContext()).cancel(
|
||||
mDownloadEntity.getUrl(), false, true); // 默认不删除安装包 mSp.getBoolean("autodelete", true)
|
||||
}
|
||||
|
||||
|
||||
if (mSp.getBoolean(SettingsFragment.CONCERN_GAME_SP_KEY, true)) { //设置页面控制是否安装后自动关注
|
||||
// 安装后关注游戏
|
||||
DownloadEntity finalDownloadEntity = mDownloadEntity;
|
||||
RetrofitManager.getInstance(this).getSensitiveApi().getGameDigestByPackageName(UrlFilterUtils.getFilterQuery("package", packageName))
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new Response<List<GameDigestEntity>>() {
|
||||
@Override
|
||||
public void onResponse(List<GameDigestEntity> response) {
|
||||
for (GameDigestEntity gameDigestEntity : response) {
|
||||
if (!TextUtils.isEmpty(gameDigestEntity.getId())) { // 关注游戏
|
||||
if (finalDownloadEntity != null && gameDigestEntity.getId().equals(finalDownloadEntity.getRealGameId(Constants.GAME_ID_DIVIDER))) {
|
||||
ConcernUtils.INSTANCE.postConcernGameId(MainActivity.this, gameDigestEntity.getId(), null, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
postNewlyInstalledApp(gameId, packageName);
|
||||
}
|
||||
if ("卸载".equals(busFour.getType())) {
|
||||
mPackageViewModel.addUninstalledGame(packageName);
|
||||
|
||||
if (mDownloadEntity != null && mDownloadEntity.isPluggable()) {
|
||||
Map<String, Object> kv6 = new HashMap<>();
|
||||
kv6.put("安装或卸载", "卸载完成");
|
||||
DataUtils.onEvent(this, "插件化", mDownloadEntity.getName(), kv6);
|
||||
|
||||
// DataUtils.onMtaEvent(this,
|
||||
// "插件化_新",
|
||||
// "位置", mDownloadEntity.getEntrance(),
|
||||
// "游戏", mDownloadEntity.getName() + "-" + mDownloadEntity.getPlatform(),
|
||||
// "操作", "卸载完成",
|
||||
// "网络状态", DeviceUtils.getNetwork(HaloApp.getInstance().getApplication()));
|
||||
|
||||
PackageInstaller.install(this, mDownloadEntity);
|
||||
}
|
||||
|
||||
// 更新已安装游戏
|
||||
deleteInstalledPackage(packageName);
|
||||
}
|
||||
|
||||
DataCollectionUtils.uploadInorunstall(this, busFour.getType(), busFour.getPackageName());
|
||||
}
|
||||
|
||||
@SuppressWarnings("ResultOfMethodCallIgnored")
|
||||
@SuppressLint("CheckResult")
|
||||
private void postNewlyInstalledApp(String gameId, String packageName) {
|
||||
|
||||
// 发送应用变更前都检查一下是否需要把所有应用都上传
|
||||
PackageRepository.checkAndUploadAppList();
|
||||
|
||||
// 更新已安装游戏
|
||||
JSONObject packageObject = PackageUtils.getAppBasicInfoByPackageName(packageName);
|
||||
JSONObject dataObject = new JSONObject();
|
||||
JSONObject wrapperObject = new JSONObject();
|
||||
try {
|
||||
dataObject.put("type", "POST");
|
||||
dataObject.put("device_id", HaloApp.getInstance().getGid());
|
||||
dataObject.put("app", packageObject);
|
||||
dataObject.put("time", Utils.getTime(getApplicationContext()));
|
||||
wrapperObject.put("content", dataObject.toString());
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
LoghubUtils.log(wrapperObject, "halo-api-device-installed", true);
|
||||
|
||||
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"),
|
||||
packageObject.toString());
|
||||
// 更新已安装游戏
|
||||
RetrofitManager.getInstance(MainActivity.this).getApi()
|
||||
.postNewlyInstalledApp(HaloApp.getInstance().getGid(), requestBody)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(Schedulers.io())
|
||||
.subscribe(new EmptyResponse<>());
|
||||
|
||||
if (!TextUtils.isEmpty(gameId) && UserManager.getInstance().isLoggedIn()) {
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
try {
|
||||
jsonObject.put("game_id", gameId);
|
||||
jsonObject.put("package", packageName);
|
||||
RequestBody rBody = RequestBody.create(MediaType.parse("application/json"), jsonObject.toString());
|
||||
|
||||
RetrofitManager.getInstance(MainActivity.this).getApi()
|
||||
.postPlayedGame(UserManager.getInstance().getUserId(), rBody)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(Schedulers.io())
|
||||
.subscribe(new EmptyResponse<>());
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
private void deleteInstalledPackage(String packageName) {
|
||||
|
||||
// 发送应用变更前都检查一下是否需要把所有应用都上传
|
||||
PackageRepository.checkAndUploadAppList();
|
||||
|
||||
// 删除已安装游戏
|
||||
JSONObject dataObject = new JSONObject();
|
||||
JSONObject wrapperObject = new JSONObject();
|
||||
try {
|
||||
dataObject.put("type", "DELETE");
|
||||
dataObject.put("device_id", HaloApp.getInstance().getGid());
|
||||
dataObject.put("package", packageName);
|
||||
dataObject.put("time", Utils.getTime(getApplicationContext()));
|
||||
wrapperObject.put("content", dataObject.toString());
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
LoghubUtils.log(wrapperObject, "halo-api-device-installed", true);
|
||||
|
||||
// 删除已安装游戏
|
||||
RetrofitManager.getInstance(MainActivity.this).getApi()
|
||||
.deleteInstalledApp(HaloApp.getInstance().getGid(), packageName)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(Schedulers.io())
|
||||
.subscribe(new EmptyResponse<>());
|
||||
}
|
||||
|
||||
// 接收登录和登出更新事件统计的 Meta
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
public void onEventMainThread(EBReuse reuse) {
|
||||
|
||||
Reference in New Issue
Block a user