How can I start android application info screen programmatically?

Android

Android Problem Overview


Is it possible to start the "application info" screen (that is, MenuSettingsApplicationsManage Applications → select any application) from another app?

Android Solutions


Solution 1 - Android

In 2.2 and below, there is no public APIs you can access. But you can still start the InstalledAppDetails activity just as the ManageApplications does. see here

 // utility method used to start sub activity
 private void startApplicationDetailsActivity() {
     // Create intent to start new activity
     Intent intent = new Intent(Intent.ACTION_VIEW);
     intent.setClass(this, InstalledAppDetails.class);
     intent.putExtra(APP_PKG_NAME, mCurrentPkgName);
     // start new activity to display extended information
     startActivityForResult(intent, INSTALLED_APP_DETAILS);
 }

Conclusion: you can start the "application info" screen like this i wrote:

private static final String SCHEME = "package";

private static final String APP_PKG_NAME_21 = "com.android.settings.ApplicationPkgName";

private static final String APP_PKG_NAME_22 = "pkg";

private static final String APP_DETAILS_PACKAGE_NAME = "com.android.settings";

private static final String APP_DETAILS_CLASS_NAME = "com.android.settings.InstalledAppDetails";

public static void showInstalledAppDetails(Context context, String packageName) {
	Intent intent = new Intent();
	final int apiLevel = Build.VERSION.SDK_INT;
	if (apiLevel >= 9) { // above 2.3
		intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
		Uri uri = Uri.fromParts(SCHEME, packageName, null);
		intent.setData(uri);
	} else { // below 2.3
		final String appPkgName = (apiLevel == 8 ? APP_PKG_NAME_22
				: APP_PKG_NAME_21);
		intent.setAction(Intent.ACTION_VIEW);
		intent.setClassName(APP_DETAILS_PACKAGE_NAME,
				APP_DETAILS_CLASS_NAME);
		intent.putExtra(appPkgName, packageName);
	}
	context.startActivity(intent);
}

Solution 2 - Android

From API Level 9 (Android 2.3) you can start an Intent with android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS. Thus:

packageName = "your.package.name.here"

try {
	//Open the specific App Info page:
	Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
	intent.setData(Uri.parse("package:" + packageName));
	startActivity(intent);

} catch ( ActivityNotFoundException e ) {
	//e.printStackTrace();

	//Open the generic Apps page:
	Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS);
	startActivity(intent);

}

Solution 3 - Android

I used Paolo solution in order to open the Application Details Settings in SDK 23+ when the user turned down the permission request in the past and choose the "Don't ask again" option in the permission request system dialog.

But in this case I used the getPackageName() method directly.

Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivity(intent);

Solution 4 - Android

Old question, improved answer:

/**
 * <p>Intent to show an applications details page in (Settings) com.android.settings</p>
 * 
 * @param context		The context associated to the application
 * @param packageName	The package name of the application
 * @return the intent to open the application info screen.
 */
public static Intent newAppDetailsIntent(Context context, String packageName) {
	if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
		Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
		intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		intent.setData(Uri.parse("package:" + packageName));
		return intent;
	} else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.FROYO) {
		Intent intent = new Intent(Intent.ACTION_VIEW);
		intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		intent.setClassName("com.android.settings",
				"com.android.settings.InstalledAppDetails");
		intent.putExtra("pkg", packageName);
		return intent;
	}
	Intent intent = new Intent(Intent.ACTION_VIEW);
	intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
	intent.setClassName("com.android.settings",
			"com.android.settings.InstalledAppDetails");
	intent.putExtra("com.android.settings.ApplicationPkgName", packageName);
	return intent;
}

Solution 5 - Android

In Android 2.3, you can use startActivity() on an ACTION_APPLICATION_DETAILS_SETTINGS Intent, with a proper Uri, to bring up your app's "manage" screen. However, this is new to Android 2.3 -- I am not aware of a way to do that in previous versions of Android.

Solution 6 - Android

startActivity(new Intent(android.provider.Settings.ACTION_APPLICATION_SETTINGS));

will bring you to the settings / application list. If you want to open one specific application, I think in 2.2 and below there's no way, so you'd need to go a (not necessarily suggested, because inofficial) way:

final Intent i = new Intent("android.intent.action.VIEW");                
i.setComponent(new ComponentName("com.android.settings","com.android.settings.InstalledAppDetails"));
i.putExtra(...); // need to figure out the correct extra, probably app package name
startActivity(i);

But note that this is not recommended because it's not an official API / intent (filter) and might therefore change in the future.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionkopi_bView Question on Stackoverflow
Solution 1 - AndroidZhengZhirenView Answer on Stackoverflow
Solution 2 - AndroidPaolo RovelliView Answer on Stackoverflow
Solution 3 - AndroidGnzltView Answer on Stackoverflow
Solution 4 - AndroidJared RummlerView Answer on Stackoverflow
Solution 5 - AndroidCommonsWareView Answer on Stackoverflow
Solution 6 - AndroidMathias ConradtView Answer on Stackoverflow