簡體   English   中英

如何以編程方式阻止Android中應用程序的安裝/卸載?

[英]How to programmatically prevent Install/Uninstall of applications in android?

是否可以以編程方式阻止android中應用程序的安裝/卸載? 如果可能的話,如何為我的Kids應用程序執行此操作。我無法獲得有用的答案。任何幫助我都非常感謝。

提前致謝

沒有API可以做這樣的事情

但是-您可以開發自己的自定義啟動器

Android-創建自定義啟動器 ,並以此限制用戶查看或僅執行所需的操作。 例如-當您實現顯示所有應用程序的主屏幕時-當您實現卸載功能時-打開一些對話框,要求輸入密碼。

您還需要植根設備,以隱藏系統欄,以防止用戶訪問設置。 隱藏狀態欄有點棘手,並且需要運行linux命令。 例如,在蜂窩中,您可以這樣做-http://android.serverbox.ch/?p=306

stock-rom隨附的內置默認啟動器沒有提供此功能,但是我敢肯定,您可以在Google Play中找到一些提供此類功能的自定義啟動器。 在安裝啟動器並重新啟動設備后-您可以將他定義為默認啟動器-這樣,即使您的孩子將重新啟動設備-他們也只能訪問自定義啟動器。

作為Android開發人員,如果沒有人開發這樣的啟動器,我會感到非常驚訝,因為對於開發啟動器應用程序的人來說,這是非常簡單的開發功能。

從Android Lollipop(5)開始, DevicePolicyManager API允許配置文件所有者管理員或設備所有者管理員隱藏和阻止卸載托管應用程序。 在將您的管理應用程序設置為配置文件所有者或設備所有者之后,請使用以下API:

  • setUninstallBlocked :這允許定義無法從設備中刪除的軟件包名稱。 只有配置文件/設備所有者才能啟用/禁用此標志。
  • setApplicationHidden :這允許定義一個軟件包名稱,該名稱將被隱藏,這意味着它將被完全禁用,並且將從啟動器中消失。 請注意,隱藏應用程序不會將其卸載,管理員始終可以取消隱藏它,並使用其所有用戶數據完全還原該應用程序。

如果是個人資料所有者管理員,則這兩個API僅適用於個人資料托管的即時應用程序(設置工作個人資料后,大多數應用程序都會被克隆並具有2個實例-用戶即時和個人資料即時)。


通過直接調用IPackageManager接口 ,共享系統uid( android:sharedUserId =“ android.uid.system” )的系統應用程序可以使用相同的功能,而無需成為配置文件/設備所有者。

如果您想在孩子不知情的情況下進行此操作,則可以不時檢查手機中安裝的應用程序並卸載不需要的應用程序。 授予INSTALL_PACKAGES權限,以靜默方式安裝應用程序中的已接受答案。 您應該使用設備系統證書對應用程序進行簽名。

是的,可以以編程方式執行此操作。從下面的代碼中,您可以使用意圖進行操作。 安裝APK:

 Intent intent = new Intent(Intent.ACTION_VIEW);
 intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
 startActivity(intent);

卸載APK:

 Intent intent = new Intent(Intent.ACTION_DELETE, Uri.fromParts("package",
 getPackageManager().getPackageArchiveInfo(apkUri.getPath(), 0).packageName,null));
 startActivity(intent);

希望對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM