下面列出了android.content.Intent#ACTION_INSTALL_PACKAGE 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private void displayInstallNotification(Context context, Uri uri) {
Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setData(uri);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
Notification notification = new NotificationCompat.Builder(context, NotificationChannels.APP_UPDATES)
.setOngoing(true)
.setContentTitle(context.getString(R.string.UpdateApkReadyListener_Signal_update))
.setContentText(context.getString(R.string.UpdateApkReadyListener_a_new_version_of_signal_is_available_tap_to_update))
.setSmallIcon(R.drawable.ic_notification)
.setColor(context.getResources().getColor(R.color.core_ultramarine))
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setCategory(NotificationCompat.CATEGORY_REMINDER)
.setContentIntent(pendingIntent)
.build();
ServiceUtil.getNotificationManager(context).notify(666, notification);
}
void runInstall(Context context, String updateName) {
File f = getFile(Environment.DIRECTORY_DOWNLOADS + "/" + updateName);
Uri data = Uri.fromFile(f);
Log.e(TAG, "runInstall: Uri of FIle: " + data.toString());
if (f.exists()) {
Uri uri = getApkUri(f.getPath());
Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
intent.setData(uri);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true);
intent.putExtra(Intent.EXTRA_RETURN_RESULT, true);
intent.putExtra(Intent.EXTRA_INSTALLER_PACKAGE_NAME, context.getApplicationInfo().packageName);
if (context.getPackageManager().queryIntentActivities(intent, 0) != null) {// checked on start Activity
Activity act = (Activity) context;
act.startActivityForResult(intent, 100);
((Activity) context).finish();
}
} else
Toast.makeText(context, "Update file does not exist!", Toast.LENGTH_SHORT).show();
}
@Override
protected void onPostExecute(String result) {
WakeLockHelper.release(mWakeLock);
mProgressDialog.dismiss();
if (result != null) {
ToastCompat.makeText(getApplicationContext(), getString(R.string.failed), Toast.LENGTH_LONG).show();
Log.d(Config.LOGTAG, "AppUpdater: failed with " + result);
UpdaterActivity.this.finish();
} else {
Log.d(Config.LOGTAG, "AppUpdater: download ready in " + ((System.currentTimeMillis() - startTime) / 1000) + " sec");
//start the installation of the latest localVersion
Intent installIntent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
installIntent.setDataAndType(FileBackend.getUriForFile(UpdaterActivity.this, file), "application/vnd.android.package-archive");
installIntent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true);
installIntent.putExtra(Intent.EXTRA_RETURN_RESULT, true);
installIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
installIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(installIntent);
overridePendingTransition(R.animator.fade_in, R.animator.fade_out);
UpdaterActivity.this.finish();
}
}
static void installApkNormally(Context context, String localFilename) {
Intent installIntent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
installIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Uri uri;
uri = FileProvider.getUriForFile(context, "org.meowcat.edxposed.manager.fileprovider", new File(localFilename));
installIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
installIntent.setDataAndType(uri, DownloadsUtil.MIME_TYPE_APK);
installIntent.putExtra(Intent.EXTRA_INSTALLER_PACKAGE_NAME, context.getApplicationInfo().packageName);
context.startActivity(installIntent);
}
private static void OpenNewVersion(Context context, File file) {
Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Uri uriFile;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
uriFile = FileProvider.getUriForFile(context, "com.moro.mtweaks.provider", file);
} else {
uriFile = Uri.fromFile(file);
}
intent.setDataAndType(uriFile,"application/vnd.android.package-archive");
context.startActivity(Intent.createChooser(intent, "Open_Apk"));
}
private void instChromium() {
// Install package ChromePublic.apk(Chromium for Android).
Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
intent.setDataAndType(Uri.fromFile(
new File(String.valueOf(GetStorage.getDir
(this, "getChromium/chrome-android/apks/ChromePublic.apk")))),
"application/vnd.android.package-archive");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
// Call to delete 'ContentShell.apk'
deleteAPk();
}
private void installWithActionInstallPackageIntent(File file, String packageName) {
Intent promptInstall = new Intent(Intent.ACTION_INSTALL_PACKAGE);
promptInstall.putExtra(Intent.EXTRA_RETURN_RESULT, true);
promptInstall.putExtra(Intent.EXTRA_INSTALLER_PACKAGE_NAME, context.getApplicationContext()
.getPackageName());
promptInstall.setData(Uri.fromFile(file));
promptInstall.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
promptInstall.setFlags(
Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
installResultCallback.onInstallationResult(
new InstallStatus(InstallStatus.Status.INSTALLING, "Installing...", packageName));
context.startActivity(promptInstall);
}
/**
* Start the installation.
*/
final void install() {
if (mFile != null) {
Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Uri uri = AndPermission.getFileUri(mSource.getContext(), mFile);
intent.setDataAndType(uri, "application/vnd.android.package-archive");
mSource.startActivity(intent);
}
}
private void install(String path) {
Uri uri = composeUri(path, fileProviderAuthority);
//Intent promptInstall = new Intent(Intent.ACTION_VIEW);
Intent promptInstall = new Intent(Intent.ACTION_INSTALL_PACKAGE);
promptInstall.setDataAndType(uri, APP_TYPE_ID);
promptInstall.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
promptInstall.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
context.grantUriPermission(context.getPackageName(), uri,
Intent.FLAG_GRANT_READ_URI_PERMISSION);
context.startActivity(promptInstall);
}
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
intent.setData(Uri.fromFile(prepareApk("HelloActivity.apk")));
intent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true);
intent.putExtra(Intent.EXTRA_RETURN_RESULT, true);
intent.putExtra(Intent.EXTRA_INSTALLER_PACKAGE_NAME,
getApplicationInfo().packageName);
startActivityForResult(intent, REQUEST_INSTALL);
}
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
intent.setData(Uri.fromFile(prepareApk("HelloActivity.apk")));
intent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true);
intent.putExtra(Intent.EXTRA_RETURN_RESULT, true);
intent.putExtra(Intent.EXTRA_ALLOW_REPLACE, true);
intent.putExtra(Intent.EXTRA_INSTALLER_PACKAGE_NAME,
getApplicationInfo().packageName);
startActivityForResult(intent, REQUEST_INSTALL);
}
private void actionInstallPackage() {
Uri uri = null;
if (getIntent().hasExtra("package")) {
uri = Uri.fromParts("package", getIntent().getStringExtra("package"), null);
}
StrictMode.VmPolicy policy = StrictMode.getVmPolicy();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O || getIntent().hasExtra("direct_install_apk")) {
if (getIntent().hasExtra("apk")) {
// I really have no idea about why the "package:" uri do not work
// after Android O, anyway we fall back to using the apk path...
// Since I have plan to support pre-O in later versions, I keep this
// branch in case that we reduce minSDK in the future.
uri = Uri.fromFile(new File(getIntent().getStringExtra("apk")));
} else if (getIntent().hasExtra("direct_install_apk")) {
// Directly install an APK inside the profile
// The APK will be an Uri from our own FileProviderProxy
// which points to an opened Fd in another profile.
// We must close the Fd when we finish.
uri = getIntent().getParcelableExtra("direct_install_apk");
}
// A permissive VmPolicy must be set to work around
// the limitation on cross-application Uri
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().build());
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
try {
actionInstallPackageQ(uri);
} catch (IOException e) {
throw new RuntimeException(e);
}
} else {
Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE, uri);
intent.putExtra(Intent.EXTRA_INSTALLER_PACKAGE_NAME, getPackageName());
intent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true);
intent.putExtra(Intent.EXTRA_RETURN_RESULT, true);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivityForResult(intent, REQUEST_INSTALL_PACKAGE);
}
// Restore the VmPolicy anyway
StrictMode.setVmPolicy(policy);
}
public static void installApk(Context context, File filename) {
Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setData(Uri.fromFile(filename));
context.startActivity(intent);
}
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
intent.setData(Uri.fromFile(prepareApk("HelloActivity.apk")));
startActivity(intent);
}