Android常用代码之普通及系统权限静默安装APK
2015-06-20 00:00
567 查看
本文主要介绍程序如何安装apk,包括普通模式安装和系统权限静默安装。
如果是非系统应用请直接查看:Android常用代码之APK root权限静默安装,查看更完美的解决方案。
1、普通模式安装,调用系统Intent,代码如下:
public static void install(Context context, String filePath) {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setDataAndType(Uri.parse("file://" + filePath), "application/vnd.android.package-archive");
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
2、静默安装
如果是非系统应用请移步:Android常用代码之APK root权限静默安装,查看更完美的解决方案。
分为如下三步
(1)、静默安装需要系统应用安装权限,需要在AndroidManifest.xml中添加
Java
(2)、实现代码
静默安装代码如下,实际是通过pm install -r 命令安装。
注意:该函数最好在新建的线程中运行并通过handler发送安装结果给主线程,否则安装时间较长会导致ANR。
静默安装实现
Java
返回值0表示安装成功,1表示文件不存在,2表示其他错误。需要更丰富的安装失败信息(内存不足、解析包出错)可直接使用PackageUtils.installSlient。
(3) 、获取系统权限
完成了上面两步后,普通方式安装我们的应用仍然无法静默安装。需要我们的应用获得系统权限,编译应用并通过
adb push <your_apk_path> /system/app/
命令实现安装,即可拥有系统权限。
如果是非系统应用请直接查看:Android常用代码之APK root权限静默安装,查看更完美的解决方案。
1、普通模式安装,调用系统Intent,代码如下:
public static void install(Context context, String filePath) {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setDataAndType(Uri.parse("file://" + filePath), "application/vnd.android.package-archive");
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
2、静默安装
如果是非系统应用请移步:Android常用代码之APK root权限静默安装,查看更完美的解决方案。
分为如下三步
(1)、静默安装需要系统应用安装权限,需要在AndroidManifest.xml中添加
Java
1 | < uses - permission android : name = "android.permission.INSTALL_PACKAGES" / > |
静默安装代码如下,实际是通过pm install -r 命令安装。
注意:该函数最好在新建的线程中运行并通过handler发送安装结果给主线程,否则安装时间较长会导致ANR。
静默安装实现
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | /** * install slient * * @param context * @param filePath * @return 0 means normal, 1 means file not exist, 2 means other exception error */ public static int installSlient ( Context context , String filePath ) { File file = new File ( filePath ) ; if ( filePath == null || filePath . length ( ) == 0 || ( file = new File ( filePath ) ) == null || file . length ( ) <= 0 || ! file . exists ( ) || ! file . isFile ( ) ) { return 1 ; } String [ ] args = { "pm" , "install" , "-r" , filePath } ; ProcessBuilder processBuilder = new ProcessBuilder ( args ) ; Process process = null ; BufferedReader successResult = null ; BufferedReader errorResult = null ; StringBuilder successMsg = new StringBuilder ( ) ; StringBuilder errorMsg = new StringBuilder ( ) ; int result ; try { process = processBuilder . start ( ) ; successResult = new BufferedReader ( new InputStreamReader ( process . getInputStream ( ) ) ) ; errorResult = new BufferedReader ( new InputStreamReader ( process . getErrorStream ( ) ) ) ; String s ; while ( ( s = successResult . readLine ( ) ) != null ) { successMsg . append ( s ) ; } while ( ( s = errorResult . readLine ( ) ) != null ) { errorMsg . append ( s ) ; } } catch ( IOException e ) { e . printStackTrace ( ) ; result = 2 ; } catch ( Exception e ) { e . printStackTrace ( ) ; result = 2 ; } finally { try { if ( successResult != null ) { successResult . close ( ) ; } if ( errorResult != null ) { errorResult . close ( ) ; } } catch ( IOException e ) { e . printStackTrace ( ) ; } if ( process != null ) { process . destroy ( ) ; } } // TODO should add memory is not enough here if ( successMsg . toString ( ) . contains ( "Success" ) || successMsg . toString ( ) . contains ( "success" ) ) { result = 0 ; } else { result = 2 ; } Log . d ( "installSlient" , "successMsg:" + successMsg + ", ErrorMsg:" + errorMsg ) ; return result ; } |
(3) 、获取系统权限
完成了上面两步后,普通方式安装我们的应用仍然无法静默安装。需要我们的应用获得系统权限,编译应用并通过
adb push <your_apk_path> /system/app/
命令实现安装,即可拥有系统权限。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories