Android-通过意图安装、卸载、打开指定的apk和进入指定程序的应用信息

这篇博客介绍了如何在Android平台上通过Intent来实现对apk的安装、卸载以及打开操作。针对卸载,区分了用户apk和系统apk的处理方式,并且提到了需要使用RootTools.jar库来支持系统apk的卸载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安装指定apk:

protected void installApk(String path) {
		// 安装的意图在Android系统上层所有应用的源代码\packages\apps\PackageInstaller\manifest.xml
		// <intent-filter>
		// <action android:name="android.intent.action.VIEW" />
		// <category android:name="android.intent.category.DEFAULT" />
		// <data android:scheme="content" />
		// <data android:scheme="file" />
		// <data android:mimeType="application/vnd.android.package-archive" />
		// </intent-filter>
		Intent i = new Intent();
		i.setAction("android.intent.action.VIEW");
		i.addCategory("android.intent.category.DEFAULT");
		String type = "application/vnd.android.package-archive";
		Uri data = Uri.fromFile(new File(path));//一般是这样<span style="font-size: 12.6316px; font-family: Arial, Helvetica, sans-serif;">"/mnt/sdcard/xxxx.apk"</span>
		i.setDataAndType(data, type);
		// 不知道是否安装成功所以如果有返回值就是说明不成
		startActivityForResult(i, 0);

	}

	// 不知道是否安装成功所以如果有返回值就是说明不成
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		//不成功就干嘛
               //loadMain();
		super.onActivityResult(requestCode, resultCode, data);
	}


卸载指定apk要分两种情况,一个用户apk和系统apk,这里用到RootTools.jar文件,我资源里有上传:

public void removeApk(Context context, String packName) {
		// 获取包管理器
		PackageManager pm = context.getPackageManager();
		// 所有安装的apk
		List<PackageInfo> installedPackages = pm.getInstalledPackages(0);
		for (PackageInfo packageInfo : installedPackages) {

			// 获取当前apk的flag属性
			int flag = packageInfo.applicationInfo.flags;

			// 是否是系统apk
			if ((flag & ApplicationInfo.FLAG_SYSTEM) != 0) {
				// 系统apk
				try {
					//如果手机没root过就return
					if (!RootTools.isRootAvailable())
						return;
					//如果没有进去权限就return
					if (!RootTools.isAccessGiven())
						return;
					RootTools.sendShell("mount -o remount rw/system", 8000);
					// 获取AppName
					String appName = packageInfo.applicationInfo.loadLabel(pm)
							+ "";
					// 这里路径可能错了,有错自己改
					RootTools.sendShell(
							"rm -r /system/app/" + appName + ".apk", 8000);
					// remove
					RootTools.sendShell("mount -o remount r/system", 8000);
				} catch (Exception e){
					e.printStackTrace();
				}
			} else {
				// 用户apk
				Intent intent = new Intent("android.intent.action.DELETE");
				intent.addCategory("android.intent.category.DEFAULT");
				intent.setData(Uri.parse("package:" + packName));
				context.startActivity(intent);// 删除用户apk的Activity
				// 刷新自己的数据,监听:package remove 注册删除数据广播,通过广播来更新数据
			}
		}
	}


打开指定的apk:

public void startAPk(Context context,String packName) {
		// 获取包管理器
		PackageManager pm = context.getPackageManager();
		Intent launchIntentForPackage = pm.getLaunchIntentForPackage(packName);
		context.startActivity(launchIntentForPackage);

	}

进入指定程序的应用信息

public void EnterSettingCenter(Context context,String packName) {
		//通过以下的log信息得出Action
		// 02-23 10:59:54.659: I/ActivityManager(1217): START u0
		// {act=android.settings.APPLICATION_DETAILS_SETTINGS
		// dat=package:com.itheima.login flg=0x10800000
		// cmp=com.android.settings/.applications.InstalledAppDetails} from pid
		// 1398
		Intent intent = new Intent();
		intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
		intent.setData(Uri.parse("package:" + packName));
		context.startActivity(intent);
	}

进入什么界面?如图:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值