关于启动和检测assets包里面的apk包,需要更新或者删除旧版本的apk

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值