Android 程序的安装、卸载和更新

 
安装程序:软件从无到有。

卸载程序:软件从有到无。

更新程序:软件的覆盖安装,可以保留原版本的数据,提升软件版本。

 

安装程序的方法:

 

1、  通过Intent机制,调出系统安装应用,重新安装应用的话,会保留原应用的数据。

 

String fileName = Environment.getExternalStorageDirectory() + apkName;

Uri uri = Uri.fromFile(new File(fileName));

Intent intent = new Intent(Intent.ACTION_VIEW);

intent.setDataAndType(Uri, application/vnd.android.package-archive");

startActivity(intent);

 

2、  直接调用安装接口。

 

Uri mPackageURI = Uri.fromFile(new File(Environment.getExternalStorageDirectory() + apkName));

int installFlags = 0;

PackageManager pm = getPackageManager();

try

{

    PackageInfo pi = pm.getPackageInfo(packageName,

    PackageManager.GET_UNINSTALLED_PACKAGES);

    if(pi != null)

    {

        installFlags |= PackageManager.REPLACE_EXISTING_PACKAGE;

    }

}

catch (NameNotFoundException e)

{}

PackageInstallObserver observer = new PackageInstallObserver();

pm.installPackage(mPackageURI, observer, installFlags);

 

安装应用权限:android.permission.INSTALL_PACKAGES

 

系统应用(安装在/system/app下面)可以采用该方式,第三方应用无法申请安装卸载权限。

java.lang.SecurityException: Neither user 10039 nor current process has android.permission.INSTALL_PACKAGES.

 

3、  执行install命令。

 

install –r 更新安装,默认新安装;如果不附上-r参数,则会清楚原应用的数据,版本一致则无法安装。

(1)am start …

(2)Runtime.exec(String[] args)

(3)Class<?> execClass = Class.forName("android.os.Exec");

 

4、  执行cp / adb push命令。

 

由系统检测到应用程序有更新,自动完成重新安装。

 

5、  通过第三方软件实现。

 

Market,EOE,eTrackDog均采用第一种方法实现更新。

优点:由系统核心应用程序控制安装程序;

缺点:无法控制安装过程;安装完成后,也无法立刻启动应用,需要用户确认;无法扩展。

 

实例:Market查找安装程序

Intent intent =

new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=pname:your.app.id"));

startActivity(intent);

 

卸载程序的方法:

 

1、  通过Intent机制,调出系统卸载应用。

Uri packageURI = Uri.parse("package: your.app.id");

Intent intent = new Intent(Intent.ACTION_DELETE);

startActivity(intent);

 

2、  直接调用卸载接口。

 

PackageInstallObserver observer = new PackageInstallObserver();

pm.installPackage(mPackageURI, observer, installFlags);

 

卸载应用权限:android.permission.DELETE_PACKAGES

 

3、  运行rm apk安装文件,由系统检测后调用卸载应用。

 

备注说明:

Android系统的应用安装,在系统设置里面有一项,是否安装未知源,所在在软件更新的时候,需要检测这个选项,如果打钩,则只允许安装Market源提供的安装程序,如果没有打钩的话,系统安装应用时会提示用户设置,如果选择设置,设置好后,无法返回安装界面;如果选择取消,则推出安装程序。所以,如果是更新的话,一定要在下载之前就检测许可安装源的设置,或者在下载前检测是否已经下载过新的安装程序,避免重复下载安装程序。

 

相关的代码如下:

1.          int result = Settings.Secure.getInt(getContentResolver(), Settings.Secure.INSTALL_NON_MARKET_APPS, 0);      

2.          if (result == 0) {      

3.          // show some dialog here      

4.          // ...      

5.          // and may be show application settings dialog manually      

6.          Intent intent = new Intent();      

7.          intent.setAction(Settings.ACTION_APPLICATION_SETTINGS);      

8.          startActivity(intent);     

9.          }

 

public static final class Settings.Secure extends Settings.NameValueTable

public static final String INSTALL_NON_MARKET_APPS

Since: API Level 3

Whether the package installer should allow installation of apps downloaded from sources other than the Android Market (vending machine). 1 = allow installing from other sources 0 = only allow installing from the Android Market。

时间: 2011-07-15

Android 程序的安装、卸载和更新的相关文章

用自删除dll实现应用程序的安装/卸载代码

[译者]:本文译自 Alex Tilles 在 Windows Developer Network (2003 第12期)发表的一篇文章:"Writing Your Own Install and Uninstall Code".这是一篇具有一定技术含量的文章,相信许多开发人员都需要本文介绍的技术,其中包括几个重要的技术点: Rundll32.exe 实用程序的使用方法: DLL 或 EXE 的自删除技术: 嵌入资源的处理技巧: LZCOPY API 使用示范: compress.ex

迅雷显示“先前程序的安装/卸载未完成”

原因:安装时出现如下情况, 先前程序的安装/卸载未完成.您需要重新启动您的电脑才能完成安装. 在重新启动电脑后,在完成 迅雷 的安装. 安装程序无法继续.请单击"取消"退出. 解决办法: 开始 - 运行 - regedit - HKEY_LOCAL_MACHINESYSTEMControlSet001ControlSession Manager 找到根目录里面的 PendingFileRenameOperations. 删除它即可! 总结:出现其它类似问题参照该方法!

Android 静默方式实现批量安装卸载应用程序的深入分析_Android

前段时间做了一个批量安装卸载应用程序的小应用,由于安装卸载应用程序的部分API是隐藏的,所以必须在ubuntu下下载Android系统源码,并编译之后使用MM命令编译生成APK文件,其实也难. 思路是这样的,在XX/packages/apps目录下有一个PackageInstaller的应用程序,Android机器中安装卸载都是由这个应用程序完成的.但是它没有批量安装和卸载的功能,如果要在自己的应用程序中添加批量安装和卸载的功能,其实很简单,只需要参考PakcageInstaller里面的安装卸

Android 静默方式实现批量安装卸载应用程序的深入分析

前段时间做了一个批量安装卸载应用程序的小应用,由于安装卸载应用程序的部分API是隐藏的,所以必须在ubuntu下下载Android系统源码,并编译之后使用MM命令编译生成APK文件,其实也难. 思路是这样的,在XX/packages/apps目录下有一个PackageInstaller的应用程序,Android机器中安装卸载都是由这个应用程序完成的.但是它没有批量安装和卸载的功能,如果要在自己的应用程序中添加批量安装和卸载的功能,其实很简单,只需要参考PakcageInstaller里面的安装卸

android通过代码的形式来实现应用程序的安装与卸载

 因为应用程序的安装与卸载模块在android系统中已经写好了,所以我们只需要激活就行了 注意: intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");这一句话中,第一个参数是要安装的apk的路径,第二个参数是apk所对应的类型.可以砸tomcat的安装目录下的conf目录下的web.xml中找到 程序运行截图:  代码实现如下: 1.main.xml <?xml

从网站上安装更新 android 程序

问题描述 从网站上安装更新 android 程序 我在后台每24小时检查一次程序版本,这是在网络服务器上进行的而不是在android market上运行.如果更新可用,它会提示用户下载新的apk. Uri uri = Uri.parse(downloadURL);Intent intent = new Intent(Intent.ACTION_VIEWuri);startActivity(intent); 上面的代码用来打开用户浏览器然后开始下载.我需要不打开浏览器也能下载apk文件,或者我需要

android 程序显示未安装该应用

问题描述 android 程序显示未安装该应用 开发中通过Eclipse讲程序安装到手机上,可以正常运行,但是退出以后,直接点击图片运行程序,就显示"程序显示未安装该应用",(即每次打开程序都要通过eclipse安装才可)大家知道这是啥回事吗? 解决方案 你加个签名,然后打包安装呢 解决方案二: 因为程序可能在AndroidManifest.xml文件的根节点加了一个属性,就是运行安装到外部存储设备,然后程序运行的时候,发现有些文件找不到认为丢失. 可以去看看. 解决方案三: 卸载重新

Android实训案例(六)——四大组件之一BroadcastReceiver的基本使用,拨号,短信,SD卡,开机,应用安装卸载监听

Android实训案例(六)--四大组件之一BroadcastReceiver的基本使用,拨号,短信,SD卡,开机,应用安装卸载监听 Android中四大组件的使用时重中之重,我这个阶段也不奢望能把他所有的原理搞懂,但是最起码的,我要把他的各种使用方法了如指掌才行 BroadcastReceiver 接收系统的广播,比如电话,短信之类的 1.IP拨号器 我们在拨打电话的时候,我们系统也会事先发送一个广播,所以我们可以用广播接收者来接收到这个广播拨打电话的时候在电话号码前面加上一些优惠的长途短号,

android实现静默安装与卸载的方法_Android

本文实例讲述了android实现静默安装与卸载的方法.分享给大家供大家参考.具体如下: 方法1:[使用调用接口方法,由于安装卸载应用程序的部分API是隐藏的,所以必须下载Android系统源码,在源码下开发并编译之后使用MM命令编译生成APK文件] import java.io.File; import android.app.Activity; import android.os.Bundle; import android.content.Intent; import android.con