簡體   English   中英

在Android中靜默卸載應用程序?

[英]uninstall app silently in android?

我想從設備靜默刪除應用程序。 我正在嘗試此代碼,但給出異常“用戶10051或當前進程都沒有android.permission.DELETE_PACKAGES。”

 class PackageInstallObserver extends IPackageInstallObserver.Stub {
    public void packageInstalled(String packageName, int returnCode) throws RemoteException {
        if (onInstalledPackaged != null) {
            onInstalledPackaged.packageInstalled(packageName, returnCode);
        }
    }
}

class PackageDeleteObserver extends IPackageDeleteObserver.Stub { 

    public void packageDeleted(String packageName, int returnCode) throws RemoteException {
        /*if (onInstalledPackaged != null) {
            onInstalledPackaged.packageInstalled(packageName, returnCode);
        }*/
    }
}

public ApplicationManager(Context context) throws SecurityException, NoSuchMethodException {

    observer = new PackageInstallObserver();
    observerdelete = new PackageDeleteObserver(); 
    pm = context.getPackageManager();



    Class<?>[] types = new Class[] {Uri.class, IPackageInstallObserver.class, int.class, String.class};
    Class<?>[] uninstalltypes = new Class[] {String.class, IPackageDeleteObserver.class, int.class};

    method = pm.getClass().getMethod("installPackage", types);
      uninstallmethod = pm.getClass().getMethod("deletePackage", uninstalltypes);
}

public void setOnInstalledPackaged(OnInstalledPackaged onInstalledPackaged) {
    this.onInstalledPackaged = onInstalledPackaged; 
}

public void uninstallPackage(String packagename) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {

    uninstallmethod.invoke(pm, new Object[] {packagename, observerdelete, 0});


}

以編程方式靜默刪除Android應用程序是不可能的

最好的辦法是讓用戶在對話框中刪除該應用程序。 當他按“確定”時,然后重定向到指向該應用程序的Uninstaller應用程序。 用戶是否要完成刪除操作仍然是用戶的選擇。

有一種方法可以堅持要求用戶完成刪除操作,但它相當樂觀。 關閉卸載程序后,他將在onActivityResult()返回到您的活動。 您可以檢查該應用是否已刪除。 如果尚未刪除,則可以返回到同一對話框,然后再次要求他刪除該應用程序。 如果您選擇直到用戶最終刪除該應用程序或停止使用您的主應用程序(例如,您告訴用戶他要刪除其他應用程序后才能使用您的應用程序),則可以繼續循環進行。

如何檢查是否已安裝應用程序

final String packageName = "com.company.other-app-name";
android.content.pm.PackageManager pm = getPackageManager();
PackageInfo info = pm.getPackageInfo(packageName, 0);

如果info==null或拋出NameNotFoundException ,則表示未安裝該應用程序。

如何啟動卸載程序指向一個應用程序

Uri uri = Uri.parse("package:com.company.other-app-name");
Intent intent = new Intent(Intent.ACTION_DELETE, uri);
startActivityForResult(intent, REQUEST_CODE_UNINSTALL_FREE_APP);

SDK應用程序不能具有DELETE_PACKAGES權限,除非它們是固件的一部分。 這意味着未使用固件編譯的應用程序無權獲得無提示刪除應用程序的權限。

查看此帖子以獲取更多信息。

暫無
暫無

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

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