在 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);
}
更多工具: