Android-通過意圖安裝、卸載、打開指定的apk和進入指定程序的應用信息

安裝指定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);
	}

進入什麼界面?如圖:




發佈了23 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章