Android 静默安装和静默卸载(系统层)
来源:互联网 发布:王侯将相宁有种乎出自 编辑:程序博客网 时间:2024/06/10 23:29
在Android系统开发过程中,有第三方App开发需要静默安装和卸载。纯App必须需要root权限,还要通过反射(相关接口被隐藏了)去调用,有些麻烦。自己就写了个App(SilentInstaller),实现静默安装和卸载,调用代码简洁,无需任何权限。
下面贴下静默安装和卸载代码:
private void silentInstall(String path) { File apkFile = new File(path); if (!apkFile.exists()) { mH.sendMessage(mH.obtainMessage(HANDLER_SHOW_MESSAGE, String.format(getString(R.string.apk_file_not_exist), path))); Log.e(TAG, "silentInstall " + path + " is not exists!"); return; } Uri uri = Uri.fromFile(new File(path)); String packageName; int installFlags = 0; PackageManager pm = getPackageManager(); PackageInfo info = pm.getPackageArchiveInfo(path, PackageManager.GET_ACTIVITIES); if (info != null) { packageName = info.applicationInfo.packageName; try { PackageInfo packageInfo = pm.getPackageInfo(packageName, PackageManager.GET_UNINSTALLED_PACKAGES); if (packageInfo != null) { installFlags |= PackageManager.INSTALL_REPLACE_EXISTING; } } catch (NameNotFoundException e) { Log.e(TAG, "silentInstall NameNotFoundException = " + e.getMessage()); } mAutoStartPackageName = packageName; pm.installPackage(uri, new PackageInstallObserver(), installFlags, packageName); } if (!mAppAutoStart) { mH.sendEmptyMessageDelayed(HANDLER_KILL_SELF, 3000); } }
private void silentDelete(String packageName) { PackageManager pm = getPackageManager(); try { PackageInfo packageInfo = pm.getPackageInfo(packageName, PackageManager.GET_UNINSTALLED_PACKAGES); if (packageInfo == null) { return; } String appName = packageInfo.applicationInfo.loadLabel(pm) .toString(); pm.deletePackage(packageName, new PackageDeleteObserver(appName), 0); } catch (NameNotFoundException e) { String text = String.format(getString(R.string.package_not_exist), packageName); sendMessage(text); Log.e(TAG, "silentRemove NameNotFoundException = " + e.getMessage()); } mH.sendEmptyMessageDelayed(HANDLER_KILL_SELF, 3000); }就是调用PackageManager的installPackage和deletePackage
第三方Apk调用
安装:
Intent intent = new Intent("android.intent.action.SILENT_PACKAGE_INSTALL"); intent.putExtra("silent_install_file", "/sdcard/Helloworld.apk"); intent.putExtra("silent_install_auto_start", true);//是否安装并启动 intent.putExtra("silent_install_start_clazz", "com.example.helloworld.MainActivity");//如果安装并启动,则需指定activityName sendBroadcast(intent);卸载:
Intent intent = new Intent("android.intent.action.SILENT_PACKAGE_DELETE"); intent.putExtra("silent_delete_package", "com.example.helloworld");//指定需要卸载apk的包名 sendBroadcast(intent);
是不是很方便?但系统需要内置SilentInstaller。
SilentInstaller点击下载
阅读全文
0 0
- Android 静默安装和静默卸载(系统层)
- Android静默安装和静默卸载
- Android--静默安装和静默卸载
- Android静默安装和静默卸载
- Android静默安装和静默卸载
- android实现静默卸载和静默安装
- Android静默安装和静默卸载
- Android静默安装和静默卸载
- 静默安装和静默卸载
- android 静默安装和卸载
- android静默安装和卸载
- Android 静默安装和卸载
- Android静默安装和静默卸载接口封装
- android静默安装、静默卸载apk方法
- android静默安装与静默卸载
- android apk静默安装和卸载
- android 实现静默安装和卸载
- android apk静默安装和卸载
- 在使用apt-get update 时更行列表,显示[Connecting to archive.ubuntu.com (2001:67c:1360:8001::21)]超时
- SQLite的一点学习心得(以后会慢慢补充)
- 数据结构与算法-堆、基于堆实现的优先队列、堆排序
- noip2017
- 百钱百鸡C语言
- Android 静默安装和静默卸载(系统层)
- 一种基于喊话模式的排序算法
- 有个弹窗模板不错, 就是不知道 怎么弹到的
- leetcode: 36. Valid Sudoku
- Go(全栈)开发企业级后台管理系统
- uva-10299-Relatives-(欧拉函数)
- c++字符串操作函数的源码实现
- 系统之间的通讯方式之(Java AIO异步详解)(五)
- ROS+SLAM笔记(5)创建包