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程序设计有所帮助。