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.youkuaiyun.com/shen332401890/article/details/8826827