安裝指定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);
}
進入什麼界面?如圖: