android实现静默安装与卸载的方法
本文实例讲述了android实现静默安装与卸载的方法。分享给大家供大家参考。具体如下:
方法1:【使用调用接口方法,由于安装卸载应用程序的部分API是隐藏的,所以必须下载Android系统源码,在源码下开发并编译之后使用MM命令编译生成APK文件】
importjava.io.File; importandroid.app.Activity; importandroid.os.Bundle; importandroid.content.Intent; importandroid.content.pm.PackageInfo; importandroid.content.pm.PackageManager; importandroid.content.pm.PackageManager.NameNotFoundException; importandroid.content.pm.IPackageInstallObserver; importandroid.content.pm.IPackageDeleteObserver; importandroid.content.res.Resources; importandroid.graphics.drawable.Drawable; importandroid.net.Uri; importandroid.os.Environment; importandroid.os.Handler; importandroid.os.Message; importandroid.util.Log; importandroid.view.View; importandroid.view.View.OnClickListener; importandroid.widget.Button; importandroid.widget.ProgressBar; importandroid.widget.TextView; importandroid.widget.Toast; publicclassInstallActivityextendsActivity{ /**Calledwhentheactivityisfirstcreated.*/ privateStringAPK_NAME="QQHD-mini.apk"; privateButtoninstall=null; privateButtonuninstall=null; privatefinalintINSTALL_COMPLETE=1; privatefinalintUNINSTALL_COMPLETE=2; finalstaticintSUCCEEDED=1; finalstaticintFAILED=0; publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.install_uninstall); install=(Button)findViewById(R.id.install); uninstall=(Button)findViewById(R.id.uninstall); uninstall.setOnClickListener(listener1); install.setOnClickListener(listener2); } privateOnClickListenerlistener2=newOnClickListener(){ publicvoidonClick(Viewv){ StringfileName=Environment.getExternalStorageDirectory()+"/"+APK_NAME; Uriuri=Uri.fromFile(newFile(fileName)); intinstallFlags=0; PackageManagerpm=getPackageManager(); try{ PackageInfopi=pm.getPackageInfo("com.tencent.minihd.qq", PackageManager.GET_UNINSTALLED_PACKAGES); if(pi!=null){ installFlags|=PackageManager.INSTALL_REPLACE_EXISTING; } }catch(NameNotFoundExceptione){} PackageInstallObserverobserver=newPackageInstallObserver(); pm.installPackage(uri,observer,installFlags,"com.tencent.minihd.qq"); } }; classPackageInstallObserverextendsIPackageInstallObserver.Stub{ publicvoidpackageInstalled(StringpackageName,intreturnCode){ Messagemsg=mHandler.obtainMessage(INSTALL_COMPLETE); msg.arg1=returnCode; mHandler.sendMessage(msg); } }; privateHandlermHandler=newHandler(){ publicvoidhandleMessage(Messagemsg){ switch(msg.what){ caseINSTALL_COMPLETE: intcenterTextLabel; DrawablecenterTextDrawable=null; if(msg.arg1==SUCCEEDED){ Toast.makeText(getApplicationContext(),"installapkSUCCEEDED",Toast.LENGTH_SHORT).show(); }else{} if(centerTextDrawable!=null){} break; caseUNINSTALL_COMPLETE: intcenterTextLabel2; DrawablecenterTextDrawable2=null; if(msg.arg1==SUCCEEDED){ Toast.makeText(getApplicationContext(),"uninstallapkSUCCEEDED",Toast.LENGTH_SHORT).show(); }else{} if(centerTextDrawable2!=null){} break; default: break; } } }; privateOnClickListenerlistener1=newOnClickListener(){ publicvoidonClick(Viewv){ PackageManagerpm=getPackageManager(); PackageDeleteObserverobserver=newPackageDeleteObserver(); pm.deletePackage("com.tencent.minihd.qq",observer,0); } }; privateclassPackageDeleteObserverextendsIPackageDeleteObserver.Stub{ publicvoidpackageDeleted(StringpackageName,intreturnCode){ Messagemsg=mHandler.obtainMessage(UNINSTALL_COMPLETE); msg.arg1=returnCode; mHandler.sendMessage(msg); } } }
安装、卸载相关权限:
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permissionandroid:name="android.permission.INSTALL_PACKAGES"/> <uses-permissionandroid:name="android.permission.DELETE_PACKAGES"/> <uses-permissionandroid:name="android.permission.CLEAR_APP_CACHE"/> <uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/> <uses-permissionandroid:name="android.permission.CLEAR_APP_USER_DATA"/>
方法2:【需要获取root权限或者和rom拥有一样的签名,即让该apk以System的身份在系统中运行】
privatevoidtest(){ execCommand("system/bin/pminstall-r"+"sdcard/xxx.apk"); //xxx.apk放置在内置储存的根目录下(mnt/sdcard/xxx.apk) //execCommand("system/bin/pmuninstall"+PACKAGE_NAME); //PACKAGE_NAME为xxx.apk包名 } publicbooleanexecCommand(Stringcmd){ Processprocess=null; try{ process=Runtime.getRuntime().exec(cmd); process.waitFor(); }catch(Exceptione){ returnfalse; }finally{ try{ process.destroy(); }catch(Exceptione){ } } returntrue; }
其他方法:一些第三方jar包等方式。
希望本文所述对大家的Android程序设计有所帮助。