it-swarm-eu.dev

Comment puis-je démarrer Android écran d'informations d'application par programmation?

Est-il possible de démarrer l'écran "application info" (c'est-à-dire MenuSettingsApplicationsManage Applications → sélectionner une application) à partir d'une autre application?

52
kopi_b

Dans les versions 2.2 et inférieures, aucune API publique n'est accessible. Mais vous pouvez toujours démarrer l'activité InstalledAppDetails tout comme le fait ManageApplications . voir ici

 // 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 : vous pouvez démarrer l'écran "application info" comme ceci que j'ai écrit:

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);
}
81
ZhengZhiren

Depuis API niveau 9 (Android 2.3), vous pouvez démarrer une intention avec Android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS . Donc:

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);

}
63
Paolo Rovelli

Ancienne question, meilleure réponse:

/**
 * <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;
}
15
Jared Rummler

J'ai utilisé la solution Paolo pour ouvrir les paramètres des détails de l'application dans le SDK 23+ lorsque l'utilisateur a refusé la demande d'autorisation dans le passé et choisir l'option "Ne plus demander" dans la boîte de dialogue système de demande d'autorisation.

Mais dans ce cas, j'ai utilisé directement la méthode getPackageName().

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

Dans Android 2.3, vous pouvez utiliser startActivity() sur un ACTION_APPLICATION_DETAILS_SETTINGSIntent, avec un Uri approprié, pour afficher l'écran "gérer" de votre application. Cependant, ceci est nouveau pour Android 2.3 - Je ne connais pas de moyen de le faire dans les versions précédentes d'Android.

8
CommonsWare
startActivity(new Intent(Android.provider.Settings.ACTION_APPLICATION_SETTINGS));

vous amènera à la liste des paramètres/applications. Si vous voulez ouvrir une application spécifique, je pense que dans 2.2 et ci-dessous, il n'y a aucun moyen, vous devez donc suivre une voie (pas nécessairement suggérée, car non officielle):

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);

Mais notez que ce n'est pas recommandé car ce n'est pas une API/intention officielle (filtre) et pourrait donc changer à l'avenir.

6
Mathias Conradt