在 Android 系统里,有两种类型的 App 存在:
一种是系统级 App ,比如打电话,发短信,拍照等等,这些 App 最明显的特点就是 普通方法不可以卸载。
另一种是普通 App ,用户从应用市场上下载主动安装的 App ,这样的 APP 可以卸载。
系统 App 和普通 App 还有很多其他重要的区别,主要体现在一下几个方面:
1、广播接受权限
什么是广播接受权限?简单来说,在 Android 3.0 之后,Google 采取一些安全措施,对于没有被用户主动打开的 App 处于静默状态,收不到系统发送的广播信息(各种广播信息,开机,锁屏,网络变化等)。这样防止一些病毒类的 App 主动下载后自动打开运行。在 Android 2.3 以及之前的版本没有这个措施。
BTW,这个限制是针对普通 App 的 ,对于系统 App,即使没有被用户打开过,也还是可以收到各种广播信息。
2、安装位置的标记值
Android SDK 有开放接口获取APP 安装位置,系统 APP 和普通 APP 返回值不同 ,以此可以判断 APP 是系统 APP 还是普通 APP
获取 安装位置的方法
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String packageName = getPackageName();
PackageInfo packageInfo = null;
try {
packageInfo = getPackageManager().getPackageInfo(packageName, 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
Log.d("isSystemApp:",isSystemApp(packageInfo)+"");
}
public boolean isSystemApp(PackageInfo pInfo) {
//判断是否是系统软件
return ((pInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0);
}
public boolean isUserApp(PackageInfo pInfo) {
//是否是系统软件或者是系统软件正在更新
return (!isSystemApp(pInfo) && !isSystemUpdateApp(pInfo));
}
public boolean isSystemUpdateApp(PackageInfo pInfo) {
//判断是否是软件更新..
return ((pInfo.applicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0);
}
更多工具: