package com.tejia.lijin.app.updateApp;
|
|
import android.app.Activity;
|
import android.app.AlertDialog;
|
import android.content.Context;
|
import android.content.Intent;
|
import android.content.SharedPreferences;
|
import android.content.pm.ActivityInfo;
|
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageManager;
|
import android.content.pm.ResolveInfo;
|
import android.net.Uri;
|
import android.text.Html;
|
import android.text.TextUtils;
|
import android.view.LayoutInflater;
|
import android.view.View;
|
import android.widget.Button;
|
import android.widget.CheckBox;
|
import android.widget.ImageButton;
|
import android.widget.TextView;
|
import android.widget.Toast;
|
|
import com.wpc.library.DeviceUuidFactory;
|
import com.wpc.library.util.NetUtils;
|
import com.tejia.lijin.app.BasicTextHttpResponseHandler;
|
import com.tejia.lijin.app.R;
|
import com.tejia.lijin.app.ShoppingApi;
|
import com.tejia.lijin.app.util.TimeJudge;
|
import com.wpc.library.util.common.DeviceUtil;
|
|
import org.apache.http.Header;
|
import org.json.JSONObject;
|
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
|
/**
|
* 更新app
|
* 直接跳转至该手机对应的默认手机应用市场(跳转的链接和跳转的方式由小辉提供),
|
* 当该安卓手机上没有安装手机默认的应用市场,则跳转是应用宝。
|
* 当该安卓手机没有安装默认的应用市场,也没有安装应用宝,则跳转至我们的官方更新链接)。
|
*/
|
public class UpdateApp {
|
private Activity mActivity;
|
private String mKey;
|
private String link = "";//安装包链接
|
private String introduction;//更新介绍
|
private boolean lastTime = true;
|
|
public UpdateApp(Activity mActivity, String key) {
|
this.mActivity = mActivity;
|
if (key != null && key.length() > 0) {
|
mKey = key;
|
}
|
}
|
|
// private updateJudge mupdateJudge;//更新状态返回接口
|
|
/**
|
* 更新状态返回接口
|
*/
|
public interface UpdateJudgeCallback {
|
void onSuccess(boolean show);
|
|
//是否关闭弹窗
|
void closeUpdate(boolean close);
|
|
void onFinish();
|
}
|
|
/**
|
* 查询版本
|
*
|
* @param mupdateJudge 更新状态接口返回
|
* @param firm true是强制检测更新
|
*/
|
public void getUpdateInfo(final UpdateJudgeCallback mupdateJudge, final boolean firm) {
|
SharedPreferences threeday = mActivity.getSharedPreferences("threeday", Context.MODE_PRIVATE);// 三天不提示记录
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
Date date = null;
|
try {
|
date = sdf.parse(threeday.getString("localtime", ""));//localtime
|
} catch (ParseException e) {
|
e.printStackTrace();
|
}
|
//未点击三天不弹出,则需每次都弹出
|
int day = threeday.getInt("day", 0);
|
if (day == 1)
|
day = 0;
|
|
//强制检测 本地记录为空 或者 记录时间与当前时间大于等于3天/1天 有网络
|
if ((firm || threeday.getString("localtime", "").equals("") || TimeJudge.getday(date, "yyyy-MM-dd HH:mm:ss") >= day)
|
&& lastTime && NetUtils.isNetConnected(mActivity)) {
|
String deviceId = new DeviceUuidFactory(mActivity).getDeviceUuid() + "";// 获取deviceId
|
long cTime = System.currentTimeMillis();// 获取系统当前时间
|
int versionCode = 1;// 版本号
|
try {
|
versionCode = mActivity.getPackageManager().getPackageInfo(
|
mActivity.getPackageName(),
|
PackageManager.GET_CONFIGURATIONS).versionCode;
|
} catch (PackageManager.NameNotFoundException e) {
|
e.printStackTrace();
|
}
|
lastTime = false;
|
ShoppingApi.getAppUpdateInfo(mActivity, deviceId, "Android", cTime
|
+ "", mKey, versionCode + "", new BasicTextHttpResponseHandler() {
|
@Override
|
public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception {
|
if (jsonObject.optInt("code") == 0) {
|
mupdateJudge.onSuccess(true);
|
JSONObject data = jsonObject.optJSONObject("data");
|
link = data.optString("link");//更新链接
|
introduction = data.optString("introduction");//更新介绍
|
updateDialog(mupdateJudge, firm);// 弹出更新提示框
|
} else {
|
mupdateJudge.onSuccess(false);//不弹窗
|
if (firm) {//强制检测
|
Toast.makeText(mActivity, "已经是最新版本", Toast.LENGTH_LONG).show();
|
}
|
mupdateJudge.onFinish();
|
}
|
lastTime = true;
|
}
|
|
@Override
|
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
|
super.onFailure(statusCode, headers, responseString, throwable);
|
mupdateJudge.onFinish();//不弹窗
|
lastTime = true;
|
if (firm) {//强制检测
|
Toast.makeText(mActivity, "已经是最新版本", Toast.LENGTH_LONG).show();
|
}
|
}
|
|
@Override
|
public void onFinish() {
|
super.onFinish();
|
lastTime = true;
|
}
|
});
|
} else {
|
//本地时间 小于一天/三天或者没有网络
|
mupdateJudge.onSuccess(false);
|
mupdateJudge.onFinish();
|
lastTime = true;
|
}
|
}
|
|
/**
|
* 弹出更新提示框
|
*
|
* @param mupdateJudge
|
* @param firm 强制检测
|
*/
|
private void updateDialog(final UpdateJudgeCallback mupdateJudge, final boolean firm) {
|
LayoutInflater inflater = (LayoutInflater) mActivity
|
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
// instantiate the dialog with the custom Theme
|
final AlertDialog.Builder dialog = new AlertDialog.Builder(mActivity, R.style.dialog_activationinvitecode2);
|
View layout = inflater.inflate(R.layout.item_update, null);
|
ImageButton item_update_down = layout.findViewById(R.id.item_update_down);
|
TextView item_update_Radio = layout.findViewById(R.id.item_update_Radiotxt);//三天不提示布局
|
final CheckBox item_update_Radiobu = layout.findViewById(R.id.item_update_Radiobu);
|
TextView item_update_introduction = layout.findViewById(R.id.item_update_introduction);
|
Button item_update_up = layout.findViewById(R.id.item_update_up);
|
item_update_introduction.setText(Html.fromHtml(introduction));
|
dialog.setView(layout);
|
final AlertDialog Alertlog = dialog.create();
|
item_update_down.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
Alertlog.dismiss();
|
mupdateJudge.closeUpdate(true);
|
setdown(item_update_Radiobu.isChecked(), firm);//关闭弹窗
|
mupdateJudge.onFinish();
|
}
|
});
|
item_update_up.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
Alertlog.dismiss();
|
setApplicationmarket(mActivity, v.getContext().getPackageName());//跳转应用市场
|
mupdateJudge.onFinish();
|
// getInstalledMarketPkgs(mActivity);//获取当前手机上的应用商店数量
|
}
|
});
|
if (firm) {
|
item_update_Radio.setVisibility(View.GONE);
|
item_update_Radiobu.setVisibility(View.GONE);
|
}
|
Alertlog.setCanceledOnTouchOutside(false);//点击外面不消失
|
Alertlog.show();
|
}
|
|
/**
|
* 跳转应用市场更新
|
*/
|
private void setApplicationmarket(Context context, String packageName) {
|
Uri uri = Uri.parse("market://details?id=" + packageName);
|
Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
|
try {
|
context.startActivity(goToMarket);
|
} catch (Exception e) { //找不到activity
|
// 打开应用商店失败 可能是没有手机没有安装应用市场
|
e.printStackTrace();
|
goToTxMarket(context, packageName);//跳转到应用宝
|
}
|
}
|
|
|
/**
|
* 跳转到应用宝
|
*
|
* @param context
|
* @param packageName
|
*/
|
private void goToTxMarket(Context context, String packageName) {
|
if (isMobile_spExist()) {//检测是否安装了应用宝
|
Uri uri = Uri.parse("market://details?id=" + packageName);
|
Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
|
try {
|
goToMarket.setClassName("com.tencent.android.qqdownloader", "com.tencent.pangu.link.LinkProxyActivity");
|
context.startActivity(goToMarket);
|
} catch (Exception e) {//找不到activity
|
// 打开应用宝失败
|
e.printStackTrace();
|
openBrowser();//浏览器打开
|
}
|
} else {
|
openBrowser();//浏览器打开
|
}
|
}
|
|
/**
|
* 浏览器打开 app链接 下载
|
*/
|
private void openBrowser() {
|
try {
|
if (link != null && !link.equals("")) {
|
Intent intent = new Intent();
|
intent.setAction("android.intent.action.VIEW");
|
Uri content_url = Uri.parse(link);
|
intent.setData(content_url);
|
mActivity.startActivity(intent);
|
} else {
|
Toast.makeText(mActivity, "请到官网下载", Toast.LENGTH_SHORT).show();
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
Toast.makeText(mActivity, "请安装浏览器", Toast.LENGTH_SHORT).show();
|
}
|
|
}
|
|
//检测是否安装了应用宝
|
private boolean isMobile_spExist() {
|
List<PackageInfo> pkgList = DeviceUtil.getInstalledPackagesCache(mActivity);
|
for (int i = 0; i < pkgList.size(); i++) {
|
PackageInfo pI = pkgList.get(i);
|
if (pI.packageName.equalsIgnoreCase("com.tencent.android.qqdownloader"))
|
return true;
|
}
|
return false;
|
}
|
|
/**
|
* 获取当前手机上的应用商店数量
|
*
|
* @param context
|
* @return
|
*/
|
private ArrayList<String> getInstalledMarketPkgs(Context context) {
|
ArrayList<String> pkgs = new ArrayList<>();
|
if (context == null)
|
return pkgs;
|
Intent intent = new Intent();
|
intent.setAction("android.intent.action.VIEW");
|
intent.addCategory(Intent.CATEGORY_DEFAULT);
|
intent.setData(Uri.parse("market://details?id="));
|
PackageManager pm = context.getPackageManager();
|
// 通过queryIntentActivities获取ResolveInfo对象
|
List<ResolveInfo> infos = pm.queryIntentActivities(intent,
|
0);
|
if (infos == null || infos.size() == 0)
|
return pkgs;
|
int size = infos.size();
|
for (int i = 0; i < size; i++) {
|
String pkgName = "";
|
try {
|
ActivityInfo activityInfo = infos.get(i).activityInfo;
|
pkgName = activityInfo.packageName;
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
if (!TextUtils.isEmpty(pkgName))
|
pkgs.add(pkgName);
|
}
|
return pkgs;
|
}
|
|
/**
|
* 关闭窗口
|
*
|
* @param firm 强制检测
|
* @param checked 是否勾选 三天不提醒
|
*/
|
private void setdown(boolean checked, boolean firm) {
|
//不是强制检测 记录提示时间
|
if (!firm) {
|
SharedPreferences threeday = mActivity.getSharedPreferences("threeday", Context.MODE_PRIVATE);// 三天不提示记录
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
|
String time = df.format(new Date());
|
SharedPreferences.Editor editor = threeday.edit();
|
if (checked) {//勾选三天不提醒
|
editor.putInt("day", 3);//三天
|
} else {
|
editor.putInt("day", 1);//一天
|
}
|
// 设置 记录时间
|
editor.putString("localtime", time);//记录时间
|
editor.commit();
|
}
|
}
|
}
|