Android将apk放置于asset目录下安装

ServiceApkInstaller.java

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();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值