Example usage for android.content Intent EXTRA_ORIGINATING_UID

List of usage examples for android.content Intent EXTRA_ORIGINATING_UID

Introduction

In this page you can find the example usage for android.content Intent EXTRA_ORIGINATING_UID.

Prototype

String EXTRA_ORIGINATING_UID

To view the source code for android.content Intent EXTRA_ORIGINATING_UID.

Click Source Link

Document

Used as an int extra field with #ACTION_INSTALL_PACKAGE and #ACTION_VIEW to indicate the uid of the package that initiated the install Currently only a system app that hosts the provider authority "downloads" or holds the permission android.Manifest.permission.MANAGE_DOCUMENTS can use this.

Usage

From source file:com.android.packageinstaller.PackageInstallerActivity.java

/** Get the originating uid if possible, or VerificationParams.NO_UID if not available */
private int getOriginatingUid(Intent intent) {
    // The originating uid from the intent. We only trust/use this if it comes from a
    // system application
    int uidFromIntent = intent.getIntExtra(Intent.EXTRA_ORIGINATING_UID, VerificationParams.NO_UID);

    // Get the source info from the calling package, if available. This will be the
    // definitive calling package, but it only works if the intent was started using
    // startActivityForResult,
    ApplicationInfo sourceInfo = getSourceInfo();
    if (sourceInfo != null) {
        if (uidFromIntent != VerificationParams.NO_UID
                && (mSourceInfo.privateFlags & ApplicationInfo.PRIVATE_FLAG_PRIVILEGED) != 0) {
            return uidFromIntent;

        }//from   w ww .j  av a2s . c  o  m
        // We either didn't get a uid in the intent, or we don't trust it. Use the
        // uid of the calling package instead.
        return sourceInfo.uid;
    }

    // We couldn't get the specific calling package. Let's get the uid instead
    int callingUid;
    try {
        callingUid = ActivityManagerNative.getDefault().getLaunchedFromUid(getActivityToken());
    } catch (android.os.RemoteException ex) {
        Log.w(TAG, "Could not determine the launching uid.");
        // nothing else we can do
        return VerificationParams.NO_UID;
    }

    // If we got a uid from the intent, we need to verify that the caller is a
    // privileged system package before we use it
    if (uidFromIntent != VerificationParams.NO_UID) {
        String[] callingPackages = mPm.getPackagesForUid(callingUid);
        if (callingPackages != null) {
            for (String packageName : callingPackages) {
                try {
                    ApplicationInfo applicationInfo = mPm.getApplicationInfo(packageName, 0);

                    if ((applicationInfo.privateFlags & ApplicationInfo.PRIVATE_FLAG_PRIVILEGED) != 0) {
                        return uidFromIntent;
                    }
                } catch (NameNotFoundException ex) {
                    // ignore it, and try the next package
                }
            }
        }
    }
    // We either didn't get a uid from the intent, or we don't trust it. Use the
    // calling uid instead.
    return callingUid;
}

From source file:com.android.packageinstaller.PackageInstallerActivity.java

private void startInstall() {
    // Start subactivity to actually install the application
    Intent newIntent = new Intent();
    newIntent.putExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO, mPkgInfo.applicationInfo);
    newIntent.setData(mPackageURI);/*from w w w .j  av a2 s.com*/
    newIntent.setClass(this, InstallAppProgress.class);
    String installerPackageName = getIntent().getStringExtra(Intent.EXTRA_INSTALLER_PACKAGE_NAME);
    if (mOriginatingURI != null) {
        newIntent.putExtra(Intent.EXTRA_ORIGINATING_URI, mOriginatingURI);
    }
    if (mReferrerURI != null) {
        newIntent.putExtra(Intent.EXTRA_REFERRER, mReferrerURI);
    }
    if (mOriginatingUid != VerificationParams.NO_UID) {
        newIntent.putExtra(Intent.EXTRA_ORIGINATING_UID, mOriginatingUid);
    }
    if (installerPackageName != null) {
        newIntent.putExtra(Intent.EXTRA_INSTALLER_PACKAGE_NAME, installerPackageName);
    }
    if (getIntent().getBooleanExtra(Intent.EXTRA_RETURN_RESULT, false)) {
        newIntent.putExtra(Intent.EXTRA_RETURN_RESULT, true);
        newIntent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
    }
    if (localLOGV)
        Log.i(TAG, "downloaded app uri=" + mPackageURI);
    startActivity(newIntent);
    finish();
}