安装指定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);
}
进入什么界面?如图: