Android将apk置置于asset目录下安装
Android将apk放置于asset目录下安装
ServiceApkInstaller.java
调用方式:可以在onResume()的时候加入
new ServiceApkInstaller(HomeActivity.this, "module_speech-ht54-debug.apk").install();
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();