Попытка получить информацию о версии пакета для отображения в сообщении "О программе"

Я боролся с получением имени versionName для запущенного приложения из типа объекта PackageInfo.

Я построил Parcelable Interface со всеми полями, связанными с типом объекта PackageInfo. Первичный ввод для этого интерфейса - объект Parcel.

Я не могу понять, как правильно связать объекты Parcelable, Parcel и PackageInfo.

Есть ли какой-нибудь образец кода, который я могу посмотреть? Кажется, что это не должно быть так сложно, но, похоже, оно меня превзошло.

Спасибо Джаз

Ответ 1

Пример кода:

try {
    PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
    return packageInfo.versionName;
} catch (NameNotFoundException e) {
    //Handle exception
}

Ответ 2

Я использую следующий код, чтобы получить версию, используемую в манифесте. Я написал небольшую функцию, чтобы инкапсулировать и скрыть этот несколько большой фрагмент, чтобы просто получить int.

private int getVersion() {
    int version = -1;
    try {
        PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_META_DATA);
        version = pInfo.versionCode;
    } catch (NameNotFoundException e1) {
        Log.e(this.getClass().getSimpleName(), "Name not found", e1);
    }
    return version;
}

Это вернет выбранный int для идентификации вашей версии на рынке (VersionCode). Не имя VersionName. Чтобы посмотреть, как изменить код для этого, посмотрите код из Casebash.

Ответ 3

Современный способ:

Если вы создаете свой проект Android на Gradle (с Android Studio), есть лучший ярлык для получения версии:

com.yourproject.BuildConfig.VERSION_NAME

Он связан с versionName в вашем build.gradle файле.

Фактически вы можете получить идентификатор приложения и дополнительную информацию из вашего файла build.gradle таким образом.

Ответ 4

PackageInfo versionName является публичным элементом данных. Вам не нужно ничего делать, чтобы получить "versionName для запущенного приложения из типа объекта PackageInfo". Если у вас есть объект PackageInfo с именем info, вы получаете доступ к versionName через info.versionName.

Ответ 5

Также есть ярлык:

String version = new PackageInfo().versionName;