首页 > 系统 > Android > 正文

Android 应用的安装和卸载

2019-11-09 17:56:47
字体:
来源:转载
供稿:网友

1.普通的应用安装和卸载

/* 安装apk */  public static void installApk(Context context, String fileName) {      Intent intent = new Intent();      intent.setAction(Intent.ACTION_VIEW);      intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);      intent.setDataAndType(Uri.parse("file://" + fileName),"application/vnd.android.package-archive");      context.startActivity(intent);  }    /* 卸载apk */  public static void uninstallApk(Context context, String packageName) {      Uri uri = Uri.parse("package:" + packageName);      Intent intent = new Intent(Intent.ACTION_DELETE, uri);      context.startActivity(intent);  }当应用安装或卸载成功后,系统会发送相应的广播

监听系统发出的安装广播

在安装和卸载完后,android系统会发一个广播

android.intent.action.PACKAGE_ADDED(安装)

android.intent.action.PACKAGE_REMOVED(卸载)

我们可以监听这两个广播,来进行相应的处理

public class MonitorSysReceiver extends BroadcastReceiver{              @Override        public void onReceive(Context context, Intent intent){          //接收安装广播           if (intent.getAction().equals("android.intent.action.PACKAGE_ADDED")) {                 //TODO              }             //接收卸载广播            if (intent.getAction().equals("android.intent.action.PACKAGE_REMOVED")) {                 //TODO          }      }  }在AndroidMainFest.xml中,我们需要注册该广播

<receiver android:name=".MonitorSysReceiver">               <intent-filter>               <action android:name="android.intent.action.PACKAGE_ADDED" />               <action android:name="android.intent.action.PACKAGE_REMOVED" />              </intent-filter>    </receiver> 

2.Android的静默安装和卸载

Android的静默安装和卸载,需要将应用注册成系统用户组,并且需要在系统源码下编译才行。

android:sharedUserId="android.uid.system"  还需要相应的权限

<uses-permission android:name="android.permission.INSTALL_PACKAGES" />  <uses-permission android:name="android.permission.DELETE_PACKAGES" /> 报红的话,clean一下就行了

静默安装

安装方法:

        String fileName = Environment.getExternalStorageDirectory() + File.separator + "baidu"+File.separator +"UC.apk";        Uri uri = Uri.fromFile(new File(fileName));        int installFlags = 0;        PackageManager pm = getPackageManager();        try {            PackageInfo pi = pm.getPackageInfo("com.UCMobile",PackageManager.GET_UNINSTALLED_PACKAGES);            if(pi != null) {                installFlags |= PackageManager.INSTALL_REPLACE_EXISTING;            }        } catch (Exception e) {            Log.e("exception",e.toString());        }        MyPakcageInstallObserver observer = new MyPakcageInstallObserver();        pm.installPackage(uri, observer, installFlags, "com.UCMobile");

安装回调

/*静默安装回调*/  class MyPakcageInstallObserver extends ipackageInstallObserver.Stub{                @Override      public void packageInstalled(String packageName, int returnCode) {          if (returnCode == 1) {              Log.e("DEMO","安装成功");              new ToastThread(InstallActivity.this,"安装成功").start();          }else{              Log.e("DEMO","安装失败,返回码是:"+returnCode);              new ToastThread(InstallActivity.this,"安装失败,返回码是:"+returnCode).start();          }      }  } 

静默卸载:

	PackageManager pm = ParentManagementSettings.this.getPackageManager();  	IPackageDeleteObserver observer = new MyPackageDeleteObserver();  	pm.deletePackage("com.readboy.microclassphone", observer, 0);
	/**	 * 应用静默删除回调	 * @author 1	 *	 */	class MyPackageDeleteObserver extends IPackageDeleteObserver.Stub {  	    @Override  	    public void packageDeleted(String packageName, int returnCode) {  	        if (returnCode == 1) {  	            Log.e("DEMO","success...");	        }else{  	            Log.e("DEMO","fail code:"+returnCode);   	        }  	    }  	} 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表