需要ROOT权限
package com.ys.adv.util; import android.app.ActivityManager; import android.app.ActivityManager.RunningAppProcessInfo; import android.content.Context; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.net.Uri; import android.util.Log; import com.ys.adv.view.MyToastView; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; public class APKUtil { Context context; public APKUtil(Context context) { this.context = context; } /** * 获取所有进程包名 * * @param context * @return */ public static ArrayList<String> getAllProcess(Context context) { ArrayList<String> list = new ArrayList<String>(); ActivityManager activityManager = (ActivityManager) context .getSystemService(Context.ACTIVITY_SERVICE); List<RunningAppProcessInfo> appProcesses = activityManager .getRunningAppProcesses(); for (RunningAppProcessInfo runningApp : appProcesses) { list.add(runningApp.processName); } return list; } /*** * 返回当前前台运行的app * * @return */ public static String appIsRunForset(Context context) { ActivityManager activityManager = (ActivityManager) context .getSystemService(Context.ACTIVITY_SERVICE); List<RunningAppProcessInfo> appProcesses = activityManager .getRunningAppProcesses(); String packName = appProcesses.get(0).processName; return packName; } /** * 安装APK文件 */ public void installApk(String outpath) { try { File apkfile = new File(outpath); if (!apkfile.exists()) { MyToastView.getInstance().Toast(context, "安装文件不存在,请先下载"); return; } // 通过Intent安装APK文件 Intent i = new Intent(Intent.ACTION_VIEW); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); i.setDataAndType(Uri.parse("file://" + apkfile.toString()), "application/vnd.android.package-archive"); context.startActivity(i); } catch (Exception e) { e.printStackTrace(); } } /*** * 判断APK有没有安装 * @return */ public static boolean ApkState(final Context context, String packageName) { boolean isInstall = false; try { PackageManager packageManager = context.getPackageManager(); PackageInfo packageInfo = packageManager.getPackageInfo( packageName, 0); if (packageInfo != null) { isInstall = true; } else { isInstall = false; } } catch (Exception e) { isInstall = false; } return isInstall; } //版本名 public static String getVersionName(Context context) { return getPackageInfo(context).versionName; } //版本号 public static int getVersionCode(Context context) { return getPackageInfo(context).versionCode; } private static PackageInfo getPackageInfo(Context context) { PackageInfo pi = null; try { PackageManager pm = context.getPackageManager(); pi = pm.getPackageInfo(context.getPackageName(), PackageManager.GET_CONFIGURATIONS); return pi; } catch (Exception e) { e.printStackTrace(); } return pi; } public static void writeFile(String str) throws IOException, InterruptedException { File file = new File("/sys/devices/fb.11/graphics/fb0/pwr_bl"); file.setExecutable(true); file.setReadable(true);//设置可读权限 file.setWritable(true);//设置可写权限 if (str.equals("0")) { do_exec("busybox echo 0 > /sys/devices/fb.11/graphics/fb0/pwr_bl"); } else { do_exec("busybox echo 1 > /sys/devices/fb.11/graphics/fb0/pwr_bl"); } } public static void do_exec(String cmd) { try { /* Missing read/write permission, trying to chmod the file */ Process su; su = Runtime.getRuntime().exec("su"); String str = cmd + "\n" + "exit\n"; su.getOutputStream().write(str.getBytes()); if ((su.waitFor() != 0)) { System.out.println("cmd=" + cmd + " error!"); throw new SecurityException(); } } catch (Exception e) { e.printStackTrace(); } } public static void openOrClose(String cmd) { try { APKUtil.writeFile(cmd); } catch (Exception e) { e.printStackTrace(); } } /*** * 静默安装APK * @param apkPath * @return */ public static boolean installApkSlient(String apkPath) { boolean result = false; File f = new File(apkPath); if (f != null && f.exists()) { DataOutputStream dataOutputStream = null; BufferedReader errorStream = null; try { // 申请su权限 Process process = Runtime.getRuntime().exec("su"); dataOutputStream = new DataOutputStream(process.getOutputStream()); // 执行pm install命令 String command = "pm install -r " + apkPath + "\n"; dataOutputStream.write(command.getBytes(Charset.forName("utf-8"))); dataOutputStream.flush(); dataOutputStream.writeBytes("exit\n"); dataOutputStream.flush(); process.waitFor(); errorStream = new BufferedReader(new InputStreamReader(process.getErrorStream())); String msg = ""; String line; // 读取命令的执行结果 while ((line = errorStream.readLine()) != null) { msg += line; } Log.d("TAG", "install msg is " + msg); // 如果执行结果中包含Failure字样就认为是安装失败,否则就认为安装成功 if (!msg.contains("Failure")) { result = true; } } catch (Exception e) { Log.e("TAG", e.getMessage(), e); } finally { try { if (dataOutputStream != null) { dataOutputStream.close(); } if (errorStream != null) { errorStream.close(); } } catch (IOException e) { Log.e("TAG", e.getMessage(), e); } } return result; } return result; } }