package com.example.InstalledDemo; import android.animation.AnimatorSet; import android.app.Activity; import android.app.AlertDialog; import android.app.Application; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.util.Log; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; public class MyActivity extends Activity { /** * Called when the activity is first created. */ ArrayList<AppInfo> appList; List<PackageInfo> packages; PackageInfo packageInfo; /** * 获取手机需要安装应用的信息 */ public String packageName = "com.example.myapp"; public int packageVersion = 3; public static int UNINSTALLED = 0;//未安装该版本 public static int INSTALLED = 1;//安装了最新版本 public static int UPDATE = 2;//安装了该版本,但不是最高版本 private Context mContext; private boolean isCopy = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mContext = this; initVar(); judgeVersion(judgeExist()); } /** * 初始化 */ public void initVar(){ appList = new ArrayList<AppInfo>(); packages = getPackageManager().getInstalledPackages(0); } /** * 获取手机与当前已安装的所有应用的信息 */ public void getAllApplicationMessage(){ appList = new ArrayList<AppInfo>(); packages = getPackageManager().getInstalledPackages(0); for(int i = 0 ;i < packages.size();i++){ PackageInfo packageInfo = packages.get(i); AppInfo appInfo = appList.get(i); appInfo.appName = packageInfo.applicationInfo.loadLabel(getPackageManager()).toString(); appInfo.packageName = packageInfo.packageName; appInfo.versionName = packageInfo.versionName; appInfo.versionCode = packageInfo.versionCode; if((packageInfo.applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM) == 0){ appList.add(appInfo); } } } /** * 检测是否存已经安装了该包和对应的包的版本 */ public int judgeExist(){ if (packages.size() <= 0) return 5; for(int i = 0 ;i < packages.size();i++){ packageInfo = packages.get(i); // Log.e("packageInfo.packageName",packageInfo.packageName); if((packageInfo.applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM) == 0){ if (packageInfo.packageName.equals(packageName)){ // Log.e("packageInfo.packageName",packageInfo.packageName); if(packageInfo.versionCode < packageVersion){ Log.e("packageInfo.versionCode",packageInfo.versionCode+""); return UPDATE; }else{ Log.e("packageInfo.versionCode1",packageInfo.versionCode+""); return INSTALLED; } }else{ if(i == packages.size()-1){ return UNINSTALLED; } } } } return 4; } /** * 判断版本号 */ public void judgeVersion(int i){ switch (i){ case 0 : Log.e("UNINSTALLED","未安装该应用"); install(); break; case 1 : Log.e("INSTALLED","安装最新版本"); break; case 2 : Log.e("UPDATE","安装了该版本,但不是最新版本"); install(); break; } } /** * 安装应用程序 */ public void install(){ if(copyToSDCard(this,"UpdateDemo.apk", Environment.getExternalStorageDirectory().getAbsolutePath()+ "/UpdateDemo.apk")){ final AlertDialog.Builder builder = new AlertDialog.Builder(mContext).setTitle("下载对话框...").setMessage("是否选择下载").setPositiveButton("yes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setDataAndType(Uri.parse("file://" + Environment.getExternalStorageDirectory().getAbsolutePath()+"/UpdateDemo.apk"),"application/vnd.android.package-archive"); startActivity(intent); Log.e("程序已安装","ok"); } }).setNegativeButton("no", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); builder.show(); } } /** * 将assests的资源复制到SD中 */ public boolean copyToSDCard(Context context,String fileName,String path){ isCopy = false; try{ InputStream inputStream = context.getAssets().open(fileName); File file = new File(path); file.createNewFile(); FileOutputStream fileOutputStream = new FileOutputStream(file); byte[] temp = new byte[1024]; int i = 0; while((i = inputStream.read(temp))>0){ fileOutputStream.write(temp,0,i); } fileOutputStream.close(); inputStream.close(); isCopy = true; }catch (IOException e){ e.printStackTrace(); } return isCopy; } /** * 初始化的信息 */ public class AppInfo{ public String appName = ""; public String packageName = ""; public String versionName = ""; public int versionCode = 0; public Drawable icon = null; } } 直接上代码,这里需要检测手机是否安装了该应用然后在作出相应的判断 参考:http://blog.csdn.net/shen332401890/article/details/8826827
关于启动和检测assets包里面的apk包,需要更新或者删除旧版本的apk
最新推荐文章于 2023-03-06 18:03:02 发布