ServiceApkInstaller.java
调用方式:可以在onResume()的时候加入
new ServiceApkInstaller(HomeActivity.this, "module_speech-ht54-debug.apk").install();
public class ServiceApkInstaller {
public final static String TAG = ServiceApkInstaller.class.getSimpleName();
private final String apkPackName = "net.easyconn.carmanservice";
private String apkName;
private final String newApkPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/carbit_speechservice.apk";
private Context mContext;
private Thread subThread;
public ServiceApkInstaller() {
}
public ServiceApkInstaller(Context context, String name) {
mContext = context;
apkName = name;
}
class installTask implements Runnable {
@Override
public void run() {
if (!hasInstalled()) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setDataAndType(Uri.parse("file://" + newApkPath),
"application/vnd.android.package-archive");
mContext.startActivity(intent);
}
}
}
public ServiceApkInstaller install() {
if (subThread != null && subThread.isAlive()) {
return this;
}
subThread = new Thread(new installTask());
subThread.start();
return this;
}
public void uninstall() {
Uri packageURI = Uri.parse("package:" + apkPackName);
Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);
mContext.startActivity(uninstallIntent);
}
public boolean hasInstalled() {
final PackageManager packageManager = mContext.getPackageManager();
List<PackageInfo> installedPackInfoList = packageManager.getInstalledPackages(0);
for (int i = 0; installedPackInfoList != null && i < installedPackInfoList.size(); i++) {
PackageInfo installedPackInfo = installedPackInfoList.get(i);
if (installedPackInfo != null && TextUtils.equals(apkPackName, installedPackInfo.packageName)) {
copyApkFromAssets(mContext, apkName, newApkPath);
PackageInfo assetPackInfo = packageManager.getPackageArchiveInfo(newApkPath, PackageManager.GET_ACTIVITIES);
if (assetPackInfo != null) {
ApplicationInfo appInfo = assetPackInfo.applicationInfo;
String assetVersionName = assetPackInfo.versionName;
int assetVersionCode = assetPackInfo.versionCode;
if (!TextUtils.equals(assetVersionName, installedPackInfo.versionName) || installedPackInfo.versionCode < assetVersionCode) {
return false;
} else {
return true;
}
}
return true;
}
}
return false;
}
public boolean copyApkFromAssets(Context context, String fileName, String path) {
boolean copyIsFinish = false;
try {
InputStream is = context.getAssets().open(fileName);
File file = new File(path);
file.createNewFile();
FileOutputStream fos = new FileOutputStream(file);
byte[] temp = new byte[1024];
int i = 0;
while ((i = is.read(temp)) > 0) {
fos.write(temp, 0, i);
}
fos.close();
is.close();
copyIsFinish = true;
} catch (IOException e) {
e.printStackTrace();
}
return copyIsFinish;
}
}
调用方式:可以在onResume()的时候加入
new ServiceApkInstaller(HomeActivity.this, "module_speech-ht54-debug.apk").install();