android.content.IntentSender.SendIntentException#android.content.pm.PackageInstaller源码实例Demo

下面列出了android.content.IntentSender.SendIntentException#android.content.pm.PackageInstaller 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: splitapkinstall   文件: APKInstallService.java
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    int status = intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -999);
    switch (status) {
        case PackageInstaller.STATUS_PENDING_USER_ACTION:
            Log.d(TAG, "Requesting user confirmation for installation");
            Intent confirmationIntent = intent.getParcelableExtra(Intent.EXTRA_INTENT);
            confirmationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            try {
                startActivity(confirmationIntent);
            } catch (Exception e) {
            }
            break;
        case PackageInstaller.STATUS_SUCCESS:
            Log.d(TAG, "Installation succeed");
            break;
        default:
            Log.d(TAG, "Installation failed");
            break;
    }
    stopSelf();
    return START_NOT_STICKY;
}
 
源代码2 项目: splitapkinstall   文件: MainActivity.java
private int doCommitSession(int sessionId, boolean logSuccess) throws RemoteException {
    PackageInstaller.Session session = null;
    try {
        try {
            session = packageInstaller.openSession(sessionId);
        } catch (IOException e) {
            e.printStackTrace();
        }

        Intent callbackIntent = new Intent(getApplicationContext(), APKInstallService.class);
        PendingIntent pendingIntent = PendingIntent.getService(getApplicationContext(), 0, callbackIntent, 0);
        session.commit(pendingIntent.getIntentSender());
        session.close();

        System.out.println("install request sent");

        Log.d(TAG, "doCommitSession: " + packageInstaller.getMySessions());
        Log.d(TAG,
                "doCommitSession: after session commit ");
        return 1;
    } finally {
        session.close();
    }
}
 
private int doRemoveSplit(int sessionId, String splitName, boolean logSuccess)
        throws RemoteException {
    final PrintWriter pw = getOutPrintWriter();
    PackageInstaller.Session session = null;
    try {
        session = new PackageInstaller.Session(
                mInterface.getPackageInstaller().openSession(sessionId));
        session.removeSplit(splitName);

        if (logSuccess) {
            pw.println("Success");
        }
        return 0;
    } catch (IOException e) {
        pw.println("Error: failed to remove split; " + e.getMessage());
        return 1;
    } finally {
        IoUtils.closeQuietly(session);
    }
}
 
@Override
public void onPackageDeleted(String basePackageName, int returnCode, String msg) {
    if (PackageManager.DELETE_SUCCEEDED == returnCode && mNotification != null) {
        NotificationManager notificationManager = (NotificationManager)
                mContext.getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(basePackageName,
                SystemMessage.NOTE_PACKAGE_STATE,
                mNotification);
    }
    final Intent fillIn = new Intent();
    fillIn.putExtra(PackageInstaller.EXTRA_PACKAGE_NAME, mPackageName);
    fillIn.putExtra(PackageInstaller.EXTRA_STATUS,
            PackageManager.deleteStatusToPublicStatus(returnCode));
    fillIn.putExtra(PackageInstaller.EXTRA_STATUS_MESSAGE,
            PackageManager.deleteStatusToString(returnCode, msg));
    fillIn.putExtra(PackageInstaller.EXTRA_LEGACY_STATUS, returnCode);
    try {
        mTarget.sendIntent(mContext, 0, fillIn, null, null);
    } catch (SendIntentException ignored) {
    }
}
 
源代码5 项目: SAI   文件: RootlessSaiPiBroadcastReceiver.java
@Override
public void onReceive(Context context, Intent intent) {
    int status = intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -999);
    switch (status) {
        case PackageInstaller.STATUS_PENDING_USER_ACTION:
            Log.d(TAG, "Requesting user confirmation for installation");
            dispatchOnConfirmationPending(intent.getIntExtra(PackageInstaller.EXTRA_SESSION_ID, -1), intent.getStringExtra(PackageInstaller.EXTRA_PACKAGE_NAME));
            Intent confirmationIntent = intent.getParcelableExtra(Intent.EXTRA_INTENT);

            ConfirmationIntentWrapperActivity2.start(context, intent.getIntExtra(PackageInstaller.EXTRA_SESSION_ID, -1), confirmationIntent);
            break;
        case PackageInstaller.STATUS_SUCCESS:
            Log.d(TAG, "Installation succeed");
            dispatchOnInstallationSucceeded(intent.getIntExtra(PackageInstaller.EXTRA_SESSION_ID, -1), intent.getStringExtra(PackageInstaller.EXTRA_PACKAGE_NAME));
            break;
        default:
            Log.d(TAG, "Installation failed");
            dispatchOnInstallationFailed(intent.getIntExtra(PackageInstaller.EXTRA_SESSION_ID, -1), parseError(intent), getRawError(intent), null);
            break;
    }
}
 
源代码6 项目: SAI   文件: RootlessSaiPiBroadcastReceiver.java
private String parseError(Intent intent) {
    int status = intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -999);
    String otherPackage = intent.getStringExtra(PackageInstaller.EXTRA_OTHER_PACKAGE_NAME);
    String error = intent.getStringExtra(PackageInstaller.EXTRA_STATUS_MESSAGE);
    int errorCode = intent.getIntExtra(ANDROID_PM_EXTRA_LEGACY_STATUS, AndroidPackageInstallerError.UNKNOWN.getLegacyErrorCode());

    if (status == STATUS_BAD_ROM) {
        return mContext.getString(R.string.installer_error_lidl_rom);
    }

    AndroidPackageInstallerError androidPackageInstallerError = getAndroidPmError(errorCode, error);
    if (androidPackageInstallerError != AndroidPackageInstallerError.UNKNOWN) {
        return androidPackageInstallerError.getDescription(mContext);
    }

    return getSimplifiedErrorDescription(status, otherPackage);
}
 
源代码7 项目: SAI   文件: RootlessSAIPIService.java
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    int status = intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -999);
    switch (status) {
        case PackageInstaller.STATUS_PENDING_USER_ACTION:
            Log.d(TAG, "Requesting user confirmation for installation");
            sendStatusChangeBroadcast(intent.getIntExtra(PackageInstaller.EXTRA_SESSION_ID, -1), STATUS_CONFIRMATION_PENDING, intent.getStringExtra(PackageInstaller.EXTRA_PACKAGE_NAME));
            Intent confirmationIntent = intent.getParcelableExtra(Intent.EXTRA_INTENT);

            ConfirmationIntentWrapperActivity.start(this, intent.getIntExtra(PackageInstaller.EXTRA_SESSION_ID, -1), confirmationIntent);
            break;
        case PackageInstaller.STATUS_SUCCESS:
            Log.d(TAG, "Installation succeed");
            sendStatusChangeBroadcast(intent.getIntExtra(PackageInstaller.EXTRA_SESSION_ID, -1), STATUS_SUCCESS, intent.getStringExtra(PackageInstaller.EXTRA_PACKAGE_NAME));
            break;
        default:
            Log.d(TAG, "Installation failed");
            sendErrorBroadcast(intent.getIntExtra(PackageInstaller.EXTRA_SESSION_ID, -1), getErrorString(status, intent.getStringExtra(PackageInstaller.EXTRA_OTHER_PACKAGE_NAME)));
            break;
    }
    stopSelf();
    return START_NOT_STICKY;
}
 
源代码8 项目: Shelter   文件: DummyActivity.java
@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);

    if (intent.getAction().equals(PACKAGEINSTALLER_CALLBACK)) {
        int status = intent.getExtras().getInt(PackageInstaller.EXTRA_STATUS);

        switch (status) {
            case PackageInstaller.STATUS_PENDING_USER_ACTION:
                startActivity((Intent) intent.getExtras().get(Intent.EXTRA_INTENT));
                break;
            case PackageInstaller.STATUS_SUCCESS:
                appInstallFinished(Activity.RESULT_OK);
                break;
            default:
                appInstallFinished(Activity.RESULT_CANCELED);
                break;
        }
    }
}
 
源代码9 项目: Shelter   文件: DummyActivity.java
private void actionInstallPackageQ(Uri uri) throws IOException {
    PackageInstaller pi = getPackageManager().getPackageInstaller();
    PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(
            PackageInstaller.SessionParams.MODE_FULL_INSTALL);
    int sessionId = pi.createSession(params);

    // Show the progress dialog first
    pi.registerSessionCallback(new InstallationProgressListener(this, pi, sessionId));

    PackageInstaller.Session session = pi.openSession(sessionId);
    doInstallPackageQ(uri, session, () -> {
        // We have finished piping the streams, show the progress as 10%
        session.setStagingProgress(0.1f);

        // Commit the session
        Intent intent = new Intent(this, DummyActivity.class);
        intent.setAction(PACKAGEINSTALLER_CALLBACK);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
                intent, PendingIntent.FLAG_UPDATE_CURRENT);
        session.commit(pendingIntent.getIntentSender());
    });
}
 
源代码10 项目: container   文件: VPackageInstallerService.java
@Override
public void uninstall(String packageName, String callerPackageName, int flags, IntentSender statusReceiver, int userId) throws RemoteException {
    boolean success = VAppManagerService.get().uninstallApp(packageName);
    if (statusReceiver != null) {
        final Intent fillIn = new Intent();
        fillIn.putExtra(PackageInstaller.EXTRA_PACKAGE_NAME, packageName);
        fillIn.putExtra(PackageInstaller.EXTRA_STATUS, success ? PackageInstaller.STATUS_SUCCESS : PackageInstaller.STATUS_FAILURE);
        fillIn.putExtra(PackageInstaller.EXTRA_STATUS_MESSAGE, PackageHelper.deleteStatusToString(success));
        fillIn.putExtra("android.content.pm.extra.LEGACY_STATUS", success ? 1 : -1);
        try {
            statusReceiver.sendIntent(mContext, 0, fillIn, null, null);
        } catch (IntentSender.SendIntentException e) {
            e.printStackTrace();
        }
    }
}
 
源代码11 项目: container   文件: VPackageInstallerService.java
@Override
public void onPackageInstalled(String basePackageName, int returnCode, String msg,
                               Bundle extras) {
    final Intent fillIn = new Intent();
    fillIn.putExtra(PackageInstaller.EXTRA_PACKAGE_NAME, basePackageName);
    fillIn.putExtra(PackageInstaller.EXTRA_SESSION_ID, mSessionId);
    fillIn.putExtra(PackageInstaller.EXTRA_STATUS,
            installStatusToPublicStatus(returnCode));
    fillIn.putExtra(PackageInstaller.EXTRA_STATUS_MESSAGE,
            installStatusToString(returnCode, msg));
    fillIn.putExtra("android.content.pm.extra.LEGACY_STATUS", returnCode);
    if (extras != null) {
        final String existing = extras.getString("android.content.pm.extra.FAILURE_EXISTING_PACKAGE");
        if (!TextUtils.isEmpty(existing)) {
            fillIn.putExtra(PackageInstaller.EXTRA_OTHER_PACKAGE_NAME, existing);
        }
    }
    try {
        mTarget.sendIntent(mContext, 0, fillIn, null, null);
    } catch (IntentSender.SendIntentException ignored) {
    }
}
 
源代码12 项目: YalpStore   文件: InstallerPrivilegedSession.java
@Override
protected void install(App app) {
    registerReceiver();
    PackageInstaller packageInstaller = context.getPackageManager().getPackageInstaller();
    PackageInstaller.SessionParams sessionParams = new PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL);
    sessionParams.setAppPackageName(app.getPackageName());
    sessionParams.setAppLabel(app.getDisplayName());
    PackageInstaller.Session session = null;
    try {
        int sessionId = packageInstaller.createSession(sessionParams);
        session = packageInstaller.openSession(sessionId);
        for (File file: Paths.getApkAndSplits(context, app.getPackageName(), app.getVersionCode())) {
            writeFileToSession(file, session);
        }
        session.commit(getIntentSender(sessionId));
    } catch (IOException e) {
        fail(e, app.getPackageName());
    } finally {
        com.github.yeriomin.yalpstore.Util.closeSilently(session);
    }
}
 
源代码13 项目: YalpStore   文件: InstallerPrivilegedSession.java
private void writeFileToSession(File file, PackageInstaller.Session session) throws IOException {
    InputStream in = context.getContentResolver().openInputStream(FileProvider.getUriForFile(
        context,
        BuildConfig.APPLICATION_ID + ".fileprovider",
        file
    ));
    OutputStream out = session.openWrite(file.getName(), 0, file.length());
    try {
        int c;
        byte[] buffer = new byte[65536];
        while ((c = in.read(buffer)) != -1) {
            out.write(buffer, 0, c);
        }
        session.fsync(out);
    } finally {
        com.github.yeriomin.yalpstore.Util.closeSilently(in);
        com.github.yeriomin.yalpstore.Util.closeSilently(out);
    }
}
 
源代码14 项目: xDrip   文件: VersionFixer.java
private static boolean installPackage(Context context, InputStream in, String packageName)
        throws IOException {
    final PackageInstaller packageInstaller = context.getPackageManager().getPackageInstaller();
    final PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(
            PackageInstaller.SessionParams.MODE_FULL_INSTALL);
    params.setAppPackageName(packageName);

    final int sessionId = packageInstaller.createSession(params);
    final PackageInstaller.Session session = packageInstaller.openSession(sessionId);
    final OutputStream out = session.openWrite("COSU", 0, -1);
    final byte[] buffer = new byte[65536];
    int bytes_read;
    while ((bytes_read = in.read(buffer)) != -1) {
        out.write(buffer, 0, bytes_read);
    }
    session.fsync(out);
    in.close();
    out.close();

    session.commit(createIntentSender(context, sessionId));
    return true;
}
 
源代码15 项目: xDrip   文件: VersionFixer.java
private static boolean installPackage(Context context, byte[] buffer, String packageName)
        throws IOException {
    final PackageInstaller packageInstaller = context.getPackageManager().getPackageInstaller();
    final PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(
            PackageInstaller.SessionParams.MODE_FULL_INSTALL);
    params.setAppPackageName(packageName);

    final int sessionId = packageInstaller.createSession(params);
    final PackageInstaller.Session session = packageInstaller.openSession(sessionId);
    final OutputStream out = session.openWrite("COSU", 0, -1);
    out.write(buffer, 0, buffer.length);

    session.fsync(out);
    out.close();
    session.commit(createIntentSender(context, sessionId));
    return true;
}
 
源代码16 项目: xDrip-plus   文件: VersionFixer.java
private static boolean installPackage(Context context, InputStream in, String packageName)
        throws IOException {
    final PackageInstaller packageInstaller = context.getPackageManager().getPackageInstaller();
    final PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(
            PackageInstaller.SessionParams.MODE_FULL_INSTALL);
    params.setAppPackageName(packageName);

    final int sessionId = packageInstaller.createSession(params);
    final PackageInstaller.Session session = packageInstaller.openSession(sessionId);
    final OutputStream out = session.openWrite("COSU", 0, -1);
    final byte[] buffer = new byte[65536];
    int bytes_read;
    while ((bytes_read = in.read(buffer)) != -1) {
        out.write(buffer, 0, bytes_read);
    }
    session.fsync(out);
    in.close();
    out.close();

    session.commit(createIntentSender(context, sessionId));
    return true;
}
 
源代码17 项目: xDrip-plus   文件: VersionFixer.java
private static boolean installPackage(Context context, byte[] buffer, String packageName)
        throws IOException {
    final PackageInstaller packageInstaller = context.getPackageManager().getPackageInstaller();
    final PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(
            PackageInstaller.SessionParams.MODE_FULL_INSTALL);
    params.setAppPackageName(packageName);

    final int sessionId = packageInstaller.createSession(params);
    final PackageInstaller.Session session = packageInstaller.openSession(sessionId);
    final OutputStream out = session.openWrite("COSU", 0, -1);
    out.write(buffer, 0, buffer.length);

    session.fsync(out);
    out.close();
    session.commit(createIntentSender(context, sessionId));
    return true;
}
 
源代码18 项目: android-testdpc   文件: PackageInstallationUtils.java
public static boolean installPackage(Context context, InputStream in, String packageName)
        throws IOException {
    final PackageInstaller packageInstaller = context.getPackageManager().getPackageInstaller();
    final PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(
            PackageInstaller.SessionParams.MODE_FULL_INSTALL);
    params.setAppPackageName(packageName);
    // set params
    final int sessionId = packageInstaller.createSession(params);
    final PackageInstaller.Session session = packageInstaller.openSession(sessionId);
    final OutputStream out = session.openWrite("TestDPC", 0, -1);
    final byte[] buffer = new byte[65536];
    int c;
    while ((c = in.read(buffer)) != -1) {
        out.write(buffer, 0, c);
    }
    session.fsync(out);
    in.close();
    out.close();

    session.commit(createInstallIntentSender(context, sessionId));
    return true;
}
 
源代码19 项目: splitapkinstall   文件: MainActivity.java
private int doCreateSession(PackageInstaller.SessionParams params)
        throws RemoteException {

    int sessionId = 0 ;
    try {
        if(params == null)
        {
            Log.d(TAG, "doCreateSession: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!param is null");
        }
        sessionId = packageInstaller.createSession(params);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return sessionId;
}
 
源代码20 项目: splitapkinstall   文件: MainActivity.java
private InstallParams makeInstallParams(long totalSize ) {
    final PackageInstaller.SessionParams sessionParams = new PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL);
    final InstallParams params = new InstallParams();
    params.sessionParams = sessionParams;
    String opt;
    sessionParams.setSize(totalSize);
    return params;
}
 
private int uninstallSystemUpdates() {
    final PrintWriter pw = getOutPrintWriter();
    List<String> failedUninstalls = new LinkedList<>();
    try {
        final ParceledListSlice<ApplicationInfo> packages =
                mInterface.getInstalledApplications(
                        PackageManager.MATCH_SYSTEM_ONLY, UserHandle.USER_SYSTEM);
        final IPackageInstaller installer = mInterface.getPackageInstaller();
        List<ApplicationInfo> list = packages.getList();
        for (ApplicationInfo info : list) {
            if (info.isUpdatedSystemApp()) {
                pw.println("Uninstalling updates to " + info.packageName + "...");
                final LocalIntentReceiver receiver = new LocalIntentReceiver();
                installer.uninstall(new VersionedPackage(info.packageName,
                                info.versionCode), null /*callerPackageName*/, 0 /* flags */,
                        receiver.getIntentSender(), 0);

                final Intent result = receiver.getResult();
                final int status = result.getIntExtra(PackageInstaller.EXTRA_STATUS,
                        PackageInstaller.STATUS_FAILURE);
                if (status != PackageInstaller.STATUS_SUCCESS) {
                    failedUninstalls.add(info.packageName);
                }
            }
        }
    } catch (RemoteException e) {
        pw.println("Failure ["
                + e.getClass().getName() + " - "
                + e.getMessage() + "]");
        return 0;
    }
    if (!failedUninstalls.isEmpty()) {
        pw.println("Failure [Couldn't uninstall packages: "
                + TextUtils.join(", ", failedUninstalls)
                + "]");
        return 0;
    }
    pw.println("Success");
    return 1;
}
 
private int runInstall() throws RemoteException {
    final PrintWriter pw = getOutPrintWriter();
    final InstallParams params = makeInstallParams();
    final String inPath = getNextArg();

    setParamsSize(params, inPath);
    final int sessionId = doCreateSession(params.sessionParams,
            params.installerPackageName, params.userId);
    boolean abandonSession = true;
    try {
        if (inPath == null && params.sessionParams.sizeBytes == -1) {
            pw.println("Error: must either specify a package size or an APK file");
            return 1;
        }
        if (doWriteSplit(sessionId, inPath, params.sessionParams.sizeBytes, "base.apk",
                false /*logSuccess*/) != PackageInstaller.STATUS_SUCCESS) {
            return 1;
        }
        if (doCommitSession(sessionId, false /*logSuccess*/)
                != PackageInstaller.STATUS_SUCCESS) {
            return 1;
        }
        abandonSession = false;
        pw.println("Success");
        return 0;
    } finally {
        if (abandonSession) {
            try {
                doAbandonSession(sessionId, false /*logSuccess*/);
            } catch (Exception ignore) {
            }
        }
    }
}
 
private int runRemoveSplit(String packageName, String splitName) throws RemoteException {
    final PrintWriter pw = getOutPrintWriter();
    final SessionParams sessionParams = new SessionParams(SessionParams.MODE_INHERIT_EXISTING);
    sessionParams.installFlags |= PackageManager.INSTALL_REPLACE_EXISTING;
    sessionParams.appPackageName = packageName;
    final int sessionId =
            doCreateSession(sessionParams, null /*installerPackageName*/, UserHandle.USER_ALL);
    boolean abandonSession = true;
    try {
        if (doRemoveSplit(sessionId, splitName, false /*logSuccess*/)
                != PackageInstaller.STATUS_SUCCESS) {
            return 1;
        }
        if (doCommitSession(sessionId, false /*logSuccess*/)
                != PackageInstaller.STATUS_SUCCESS) {
            return 1;
        }
        abandonSession = false;
        pw.println("Success");
        return 0;
    } finally {
        if (abandonSession) {
            try {
                doAbandonSession(sessionId, false /*logSuccess*/);
            } catch (Exception ignore) {
            }
        }
    }
}
 
private int doCommitSession(int sessionId, boolean logSuccess) throws RemoteException {
    final PrintWriter pw = getOutPrintWriter();
    PackageInstaller.Session session = null;
    try {
        session = new PackageInstaller.Session(
                mInterface.getPackageInstaller().openSession(sessionId));

        // Sanity check that all .dm files match an apk.
        // (The installer does not support standalone .dm files and will not process them.)
        try {
            DexMetadataHelper.validateDexPaths(session.getNames());
        } catch (IllegalStateException | IOException e) {
            pw.println("Warning [Could not validate the dex paths: " + e.getMessage() + "]");
        }

        final LocalIntentReceiver receiver = new LocalIntentReceiver();
        session.commit(receiver.getIntentSender());

        final Intent result = receiver.getResult();
        final int status = result.getIntExtra(PackageInstaller.EXTRA_STATUS,
                PackageInstaller.STATUS_FAILURE);
        if (status == PackageInstaller.STATUS_SUCCESS) {
            if (logSuccess) {
                pw.println("Success");
            }
        } else {
            pw.println("Failure ["
                    + result.getStringExtra(PackageInstaller.EXTRA_STATUS_MESSAGE) + "]");
        }
        return status;
    } finally {
        IoUtils.closeQuietly(session);
    }
}
 
private int doAbandonSession(int sessionId, boolean logSuccess) throws RemoteException {
    final PrintWriter pw = getOutPrintWriter();
    PackageInstaller.Session session = null;
    try {
        session = new PackageInstaller.Session(
                mInterface.getPackageInstaller().openSession(sessionId));
        session.abandon();
        if (logSuccess) {
            pw.println("Success");
        }
        return 0;
    } finally {
        IoUtils.closeQuietly(session);
    }
}
 
@Override
public void onUserActionRequired(Intent intent) {
    final Intent fillIn = new Intent();
    fillIn.putExtra(PackageInstaller.EXTRA_PACKAGE_NAME, mPackageName);
    fillIn.putExtra(PackageInstaller.EXTRA_STATUS,
            PackageInstaller.STATUS_PENDING_USER_ACTION);
    fillIn.putExtra(Intent.EXTRA_INTENT, intent);
    try {
        mTarget.sendIntent(mContext, 0, fillIn, null, null);
    } catch (SendIntentException ignored) {
    }
}
 
@Override
public void onUserActionRequired(Intent intent) {
    final Intent fillIn = new Intent();
    fillIn.putExtra(PackageInstaller.EXTRA_SESSION_ID, mSessionId);
    fillIn.putExtra(PackageInstaller.EXTRA_STATUS,
            PackageInstaller.STATUS_PENDING_USER_ACTION);
    fillIn.putExtra(Intent.EXTRA_INTENT, intent);
    try {
        mTarget.sendIntent(mContext, 0, fillIn, null, null);
    } catch (SendIntentException ignored) {
    }
}
 
@Override
public void onPackageInstalled(String basePackageName, int returnCode, String msg,
        Bundle extras) {
    if (PackageManager.INSTALL_SUCCEEDED == returnCode && mShowNotification) {
        boolean update = (extras != null) && extras.getBoolean(Intent.EXTRA_REPLACING);
        Notification notification = buildSuccessNotification(mContext,
                mContext.getResources()
                        .getString(update ? R.string.package_updated_device_owner :
                                R.string.package_installed_device_owner),
                basePackageName,
                mUserId);
        if (notification != null) {
            NotificationManager notificationManager = (NotificationManager)
                    mContext.getSystemService(Context.NOTIFICATION_SERVICE);
            notificationManager.notify(basePackageName,
                    SystemMessage.NOTE_PACKAGE_STATE,
                    notification);
        }
    }
    final Intent fillIn = new Intent();
    fillIn.putExtra(PackageInstaller.EXTRA_PACKAGE_NAME, basePackageName);
    fillIn.putExtra(PackageInstaller.EXTRA_SESSION_ID, mSessionId);
    fillIn.putExtra(PackageInstaller.EXTRA_STATUS,
            PackageManager.installStatusToPublicStatus(returnCode));
    fillIn.putExtra(PackageInstaller.EXTRA_STATUS_MESSAGE,
            PackageManager.installStatusToString(returnCode, msg));
    fillIn.putExtra(PackageInstaller.EXTRA_LEGACY_STATUS, returnCode);
    if (extras != null) {
        final String existing = extras.getString(
                PackageManager.EXTRA_FAILURE_EXISTING_PACKAGE);
        if (!TextUtils.isEmpty(existing)) {
            fillIn.putExtra(PackageInstaller.EXTRA_OTHER_PACKAGE_NAME, existing);
        }
    }
    try {
        mTarget.sendIntent(mContext, 0, fillIn, null, null);
    } catch (SendIntentException ignored) {
    }
}
 
源代码29 项目: XAPKInstaller   文件: InstallActivity.java
@TargetApi(21)
private PackageInstaller.Session initSession() throws IOException {
    PackageInstaller.Session session = null;
    PackageInstaller packageInstaller = getPackageManager().getPackageInstaller();
    PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(
            PackageInstaller.SessionParams.MODE_FULL_INSTALL);
    int sessionId = 0;
    sessionId = packageInstaller.createSession(params);
    session = packageInstaller.openSession(sessionId);

    return session;
}
 
源代码30 项目: XAPKInstaller   文件: InstallActivity.java
@TargetApi(21)
private void addApkToInstallSession(String filePath, PackageInstaller.Session session)
        throws IOException {
    // It's recommended to pass the file size to openWrite(). Otherwise installation may fail
    // if the disk is almost full.
    try (OutputStream packageInSession = session.openWrite(getFileName(filePath), 0, new File(filePath).length());
         InputStream is = new BufferedInputStream(new FileInputStream(filePath))) {
        byte[] buffer = new byte[16384];
        int n;
        while ((n = is.read(buffer)) >= 0) {
            packageInSession.write(buffer, 0, n);
        }
    }
}