Android(安卓)apk安装的几种方法
16lz
2021-01-25
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);}}}
更多相关文章
- GitHub 标星 2.5K+!教你通过玩游戏的方式学习 VIM!
- 如何在后台运行Linux命令?
- No.11 使用firewall配置的防火墙策略的生效模式
- Android(安卓)开发常用命令
- Android的源代码下载教程-android学习之旅(102)
- Mac中用命令行启动AVD模拟器
- Android(安卓)LockScreen .
- Android(安卓)Studio添加jar包
- Android(安卓)Activity的显示过程简述