Как я могу запустить программный экран приложений Android? - программирование
Подтвердить что ты не робот

Как я могу запустить программный экран приложений Android?

Можно ли запустить экран "информация о приложении" (то есть MenuSettingsApplicationsManage Applications → выбрать любое приложение) из другого приложения?

4b9b3361

Ответ 1

В разделе 2.2 и ниже нет общедоступных API-интерфейсов, к которым вы можете получить доступ. Но вы все равно можете запустить InstalledAppDetails, как это делает ManageApplications. см. здесь

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

Заключение: вы можете запустить экран "информация о приложении", как это я написал:

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

Ответ 2

От API уровня 9 (Android 2.3) вы можете запустить Intent с android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS. Таким образом:

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

}

Ответ 3

Старый вопрос, улучшенный ответ:

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

Ответ 4

В Android 2.3 вы можете использовать startActivity() на ACTION_APPLICATION_DETAILS_SETTINGS Intent с правильным Uri, чтобы принести на экране вашего приложения "управлять". Тем не менее, это ново для Android 2.3 - я не знаю, как это сделать в предыдущих версиях Android.

Ответ 5

Я использовал решение Paolo, чтобы открыть настройки сведений о приложении в SDK 23+, когда пользователь отклонил запрос на разрешение в прошлом и в диалоговом окне системы запросов на запрос выберите параметр "Не спрашивать снова".

Но в этом случае я использовал метод getPackageName() напрямую.

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

Ответ 6

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

приведет вас к списку настроек/приложений. Если вы хотите открыть одно конкретное приложение, я думаю, что в 2.2 и ниже нет способа, поэтому вам нужно будет пойти (не обязательно предлагаемый, потому что неофициальный) способ:

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

Но обратите внимание, что это не рекомендуется, потому что это не официальный API/намерение (фильтр) и поэтому может измениться в будущем.