1.使用linux命令安装:

apk事先保存在sdcard上面,如果安装不成功,可能权限不够,chmod 777一下,问题就解决了。

try {String cmd = "pm install -r sdcard/TestStartActivity_sig2.apk";Runtime.getRuntime().exec(cmd);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}

2.使用adb命令安装。

am start -n 包名/Activity所在包名及类名

adb shell am start -n com.liusl.test/com.liusl.test.MainActivity

3.使用发送Intent消息打开apk安装程序

public void installApk(String saveFileName) {File apkfile = new File(saveFileName);if (!apkfile.exists()) {Log.i(TAG, "installApk..file not exist!" + apkfile);return;}Intent i = new Intent(Intent.ACTION_VIEW);i.setDataAndType(Uri.parse("file://" + apkfile.toString()),"application/vnd.android.package-archive");mContext.startActivity(i);}

4.静默安装:安装过程中没有任何提示的安装

[1]重写pacakgemanager的相关类

IPackageDateObserver.java ,IPackageDeleteObserver.java,IPackageInstallObserver.java,IPackageMoveObserver.java,IPackageStateObserver.java,PackageManager.java

[2] 注册消息接收类

private static BroadcastReceiver mPackageInstallReceiver = new BroadcastReceiver() {     @Override     public void onReceive(Context context, Intent intent) {         String action = intent.getAction();         if (action.equals(UpdateManager.PACKAGE_INSTALL_SUCC)) {             Log.i(TAG, " receive .PACKAGE_INSTALL_SUCC");         } else {             Log.i(TAG, " receive .PACKAGE_INSTALL_FAILED.");         }    }};

[3]安装apk发送消息

private boolean installApkDefault(Context context, String fileName, String packageName) {        Log.d(TAG, "installApkDefault:" + packageName + ",fileName:" + fileName);File file = new File(fileName);int installFlags = 0;if (!file.exists())return false;installFlags |= PackageManager.INSTALL_REPLACE_EXISTING;PackageManager pm = context.getPackageManager();try {    IPackageInstallObserver observer = new MyPakcageInstallObserver(context, fileName,packageName);    Log.i(TAG, "installFlags:" + installFlags + "packagename:" + packageName);    pm.installPackage(Uri.fromFile(file), observer, installFlags, packageName);    return true;} catch (Exception e) {    Log.e(TAG, "installApkDefault fail ;exception: " + e.getMessage());}return false; }private class MyPakcageInstallObserver extends IPackageInstallObserver.Stub {Context cxt;String filename;String pkname;public MyPakcageInstallObserver(Context c, String filename, String packagename) {this.cxt = c;this.filename = filename;this.pkname = packagename;}@Overridepublic void packageInstalled(String packageName, int returnCode) {Log.i("MyPakcageInstallObserver", "returnCode = " + returnCode);// 返回1代表安装成功if (pkname != null && pkname.equals(packageName)) {Intent it = new Intent();it.putExtra("install_returnCode", returnCode);it.putExtra("install_packageName", packageName);if (returnCode == 1) {it.setAction(UpdateManager.PACKAGE_INSTALL_SUCC);} else {it.setAction(UpdateManager.PACKAGE_INSTALL_FAILED);File f = new File(filename);if (f.exists()) {f.delete();}}cxt.sendBroadcast(it);}}}

更多相关文章

  1. GitHub 标星 2.5K+!教你通过玩游戏的方式学习 VIM!
  2. 如何在后台运行Linux命令?
  3. No.11 使用firewall配置的防火墙策略的生效模式
  4. Android(安卓)开发常用命令
  5. Android的源代码下载教程-android学习之旅(102)
  6. Mac中用命令行启动AVD模拟器
  7. Android(安卓)LockScreen .
  8. Android(安卓)Studio添加jar包
  9. Android(安卓)Activity的显示过程简述

随机推荐

  1. android拨号器...
  2. Android的SDK与源代码
  3. androidのemail学习
  4. Android String类型转换为float、double
  5. Android网格布局的简单使用
  6. Android(安卓)访问 Tomcat SSL双向验证服
  7. Android常见小问题汇总
  8. Android studio 3.2.0 使用Android Devic
  9. Android recovery 工作原理
  10. Android中TextView内容过长加省略号,设置