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

来源:互联网 发布:算法流程图怎么写 编辑:程序博客网 时间:2024/06/01 11:01
 

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

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

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

 

安装程序的方法:

 

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。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孩子之间发生争执怎么办 被打耳光后耳鸣怎么办 被打了耳鸣怎么办 打到鼻子流鼻血怎么办 一岁多宝宝有痰怎么办 一岁半咳嗽有痰怎么办 12岁说话不清楚怎么办 梦见前夫打孩子怎么办 小儿咳嗽带痰怎么办 孩子扁桃体发炎咳嗽怎么办 一岁宝宝总有痰怎么办 四岁宝宝总有痰怎么办 5岁宝宝总有痰怎么办 一岁宝宝有痰咳不出怎么办 三岁宝宝有痰咳不出怎么办 孩子不听话打她怎么办 孩子笨上学吃力怎么办 孩子学习就睡着怎么办 孩子对父母大喊大叫怎么办 老师面对熊孩子怎么办 妈妈故意打孩子怎么办 老是被妈妈打怎么办 父母老打骂孩子怎么办 后妈总是欺负我怎么办 小朋友屁股被打紫了怎么办 儿童被咬出血怎么办 小宝宝蚊子咬了怎么办 幼儿被咬了怎么办 把孩子屁股肿打紫怎么办 小孩老是咬小孩怎么办 宝宝对蚊子过敏怎么办 胳膊打红了怎么办 孩子生气摔东西怎么办 爱发脾气摔东西怎么办 宝宝生气扔东西怎么办 人流后屁股疼怎么办 生孩子后膝盖痛怎么办 怀孕初期生气了怎么办 孕晚期天天生气怎么办 孩子拉肚子屁股红怎么办 孩子的屁股红怎么办