Android实现静默安装与卸载
一般情况下,Android系统安装apk会出现一个安装界面,用户可以点击确定或者取消来进行apk的安装。
但在实际的项目需求中,有一种需求,就是希望apk在后台安装(不出现安装界面的提示),这种安装方式称为静默安装。
Android实现静默安装的方式有很多,这里只介绍一种比较简单易理解的方法,就是调用Android未公开的API(installPackage)来实现。
下面通过一种简单的Demo来简单实现静默安装,界面如下:
当点击"静默安装"的按钮时,会在后台安装360手机卫士的apk,安装成功后,会弹出Toast提示安装成功。
首先需要再AndroidManifest.xml声明下面的权限:
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
然后主要实现的代码如下:
从上面可以看出,事先需要再SD卡上放一个需要静默安装的apk(没有检测这个apk是否存在,只是简单实现)
上面的方法中涉及到了PackageInstallObserver类,实现代码如下:
代码部分已经基本实现完成,但是在eclipse里面,这个Demo是编译不过的,因为installPackage这个API没有公开,在上层是调用不到的,所以,需要在Android源码的环境下编译,在Demo根目录下新建Android.mk文件,内容如下:
Android.mk的写法有固定的格式和写法,如果不会写,可以参考Android源码中个系统应用mk文件的写法。
下面简单介绍下mk几个选项的含义:
下面的头和尾的写法都是固定的:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
......
LOCAL_SRC_FILES := $(call all-subdir-Java-files)
......
include $(BUILD_PACKAGE)
按照上面方法,有的人可能会出现下面的这个错误:
java.lang.SecurityException: Neither user 10034 nor current process has android.permission.INSTALL_PACKAGES.
这是因为只有系统应用才有android.permission.INSTALL_PACKAGES这个权限。出现这个问题的原因是,没有将自己的应用放在Android源码packages/app目录下就直接进行模块编译,这样编译出来的APK不是系统应用,没有系统的权限。解决这个问题有两种方法:
1. 将自己的应用放在packages/app目录下再进行模块编译
2. 直接安装out/target/product/generic/obj/APPS/应用名_intermediates/Package.apk.unaligned这个APK,就不会有这个问题。
Android实现静默安装与卸载的更多相关文章
- Android对于静默安装和卸载
在一般情况下,Android系统安装apk会有一个安装界面,用户可以单击确定或取消apk设备. 但在实际的项目需求中,有一种需求.就是希望apk在后台安装(不出现安装界面的提示),这样的安装方式称为静 ...
- android 实现静默安装、卸载
方法1:[使用调用接口方法,由于安装卸载应用程序的部分API是隐藏的,所以必须下载Android系统源码,在源码下开发并编译之后使用MM命令编译生成APK文件] import java.io.File ...
- Android随笔之——静默安装、卸载
随笔之所以叫随笔,就是太随意了,说起来,之前的闹钟系列随笔还没写完,争取在十月结束之前找时间把它给写了吧.今天要讲的Android APK的静默安装.卸载.网上关于静默卸载的教程有很多,更有说要调用隐 ...
- Android的静默安装
原文 Android的静默安装似乎是一个很有趣很诱人的东西,但是,用普通做法,如果手机没有root权限的话,似乎很难实现静默安装,因为Android并不提供显示的Intent调用,一般是通过以下方式安 ...
- Android apk的安装、卸载、更新升级(通过Eclipse实现静默安装)
一.通过Intent消息机制发送消息,调用系统应用进行,实现apk的安装/卸载 . (1) 调用系统的安装应用,让系统自动进行apk的安装 String fileName = "/data/ ...
- Android_实现静默安装和卸载应用
转:http://www.cnblogs.com/ondream/archive/2012/04/13/2446138.html 前段时间做了一个批量安装卸载应用程序的小应用,由于安装卸载应用程序的部 ...
- android apk静默安装
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/47803149 之前有很多朋友都问过我,在Android系统中怎样才能实现静默安装呢 ...
- innosetup的静默安装与卸载
静默安装,就是减少程序与用户的交互,一站式的安装过程(一气呵成) 1. 静默安装参数 innosetup的静默安装是通过参数来控制的 1.1. /silent ...
- android程序的安装与卸载
Android android在安装应用程序与卸载应用程序时都会发送广播,安装应用程序成功时会发送android.intent.action.PACKAGE_ADDED广播,可以通过intent.ge ...
随机推荐
- JAVA中的成员变量与局部变量
package com.imooc; //1.定义一个类 public class Telphone { //2.属性(成员变量)有什么 float screen; float cpu; float ...
- poj 1472(递归模拟)
题意:就是让你求出时间复杂度. 分析:由于指数最多为10次方,所以可以想到用一个数组保存各个指数的系数,具体看代码实现吧! 代码实现: #include<cstdio> #include& ...
- Delphi Val函数
在这里Val和iif都是你所用的数据库中的函数在delphi中Val是一个将字符串转换为数字的函数,Val(S; var V; var Code: Integer)第一个参数是要转换的字符串,第二个参 ...
- Aptana 插件 for Eclipse 4.4
http://download.aptana.com/studio3/plugin/install Aptana Update Site This site is designed to be use ...
- 白盒测试之初识gtest工具
因为公司最近对软件产品质量提高了要求,之前项目组中黑盒测试方法就越来越无法满足公司的要求.虽然作为研发,但是也要求对白盒测试有一个系统的了解(毕竟之前没有系统的接触过白盒测试). 单元测试工具有很多种 ...
- dzzoffice教程、文档、开发手册等内容地址
dzzoffice教程.文档.开发手册等内容全部都存放在DzzOffice开发者社区的文集中.搜索引擎收录不到DzzOffice中的应用内容,这里将文集地址提供在这里. 地址:http://dev.d ...
- string subscript out of range
刚刚练习华为机试上的题目遇到了这个问题,奉上两个小题: //题目描述 // //描述: //输入一个整数,将这个整数以字符串的形式逆序输出 //程序不考虑负数的情况,若数字含有0,则逆序形式也含有0, ...
- kali update can’t found win7 loader
安装win7,kali ,双系统,更新 kali 系统后, grub 找不到win7 ,无法进入win7系统. 解决: grub升级以后为grub2, grub2 默认不能识别win7, 更新一下,即 ...
- [翻译]HTML中不知名的语义标签
原文:http://docs.webplatform.org/wiki/tutorials/Lesser_-_known_semantic_elements HTML5中比较常用的语义元素有heade ...
- PartialView
一.客户端直接请求分部视图(如使用AJAX) Return PartialView() 不加载布局页面,不执行_ViewStart.cshtml AJAX /Home/LoginPart 二.视图 ...