'Uninstalling packages silently in Android PackageInstaller doesn't work

I'm using PackageInstaller in Android 6.0.1 to uninstall packages silently but it's not working.

This is my code:

AndroidManifest.xml

<uses-permission android:name="android.permission.DELETE_PACKAGE" />
<uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" />

MainActivity.java

public boolean uninstallPackage(Context context, String packageName) {
    if (isPackageExisted(packageName) {
      say("Package is exists.");
    } else {
        say("Package is not found or not exists!");
        return false;
    }

    ComponentName name = new ComponentName(this, AdminReceiver.class.getCanonicalName());
    PackageManager packageManger = context.getPackageManager();

    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
        PackageInstaller packageInstaller = packageManger.getPackageInstaller();
        PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(
            PackageInstaller.SessionParams.MODE_FULL_INSTALL);
        params.setAppPackageName(packageName);

        int sessionId = 0;
        try {
            sessionId = packageInstaller.createSession(params);
        } catch (Exception e) {
            say(e.toString());
            return false;
        }
        packageInstaller.uninstall(packageName, PendingIntent.getBroadcast(context, sessionId,
            new Intent("android.intent.action.MAIN"), 0).getIntentSender());
        return true;
    }
    say("Old SDK");
    return false;
}

public boolean isPackageExisted(String targetPackage) {
    PackageManager pm = getPackageManager();

    try {
        PackageInfo info = pm.getPackageInfo(targetPackage, PackageManager.GET_META_DATA);
    } catch (PackageManager.NameNotFoundException e) {
        return false;
    }

    return true;
}

private void say(Object text) {
    android.widget.Toast.makeText(this, String.valueOf(text), 0).show();
}

AdminReceiver.java

package com.example.deviceadmin;

import android.app.admin.DeviceAdminReceiver;
import android.content.Intent;
import android.content.Context;
import android.widget.Toast;

public class AdminReceiver extends DeviceAdminReceiver
{

    @Override
    public void onEnabled(Context context, Intent intent)
    {
        Toast.makeText(context, "Device Admin is Enabled", 0).show();
    }

    @Override
    public void onDisabled(Context context, Intent intent)
    {
        Toast.makeText(context, "Device Admin is Disabled", 0).show();
    }
}

I've tried this code, there is no error and when I click Uninstall just say Uninstalling and nothing happened. I've enabled DeviceAdmin to the application too.

and I have another questions like:

Can I uninstall my app using packageinstaller or I can just uninstall other apps?

What exacly I need for this process? (uninstall packages using packageinstaller)

If you have any questions ask me, hope I found solution.

With my sincere appreciation.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source