V.March Asked:2020-07-26 19:25:14 +0000 UTC2020-07-26 19:25:14 +0000 UTC 2020-07-26 19:25:14 +0000 UTC android应用程序的初始安装或更新,如何以编程方式查找? 772 在一个 android 应用程序中,我想实现一个弹出窗口的外观,其中包含有关新版本应用程序更改的信息。 如果用户更新应用程序,那么我想显示一个弹出窗口。 在从 GooglePlay 进行初始安装期间,不应出现此窗口。 如何以编程方式区分应用程序的初始安装和更新? android 3 个回答 Voted Best Answer woesss 2020-07-26T20:26:44Z2020-07-26T20:26:44Z 有这样一种方法——我们注册receiver来重新安装我们的应用程序: <receiver android:name=".MyAppUpdatedReceiver"> <intent-filter> <action android:name="android.intent.action.MY_PACKAGE_REPLACED"/> </intent-filter> </receiver> public class MyAppUpdatedReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // этот код будет выполнен после каждой переустановки // но при первой установке не вызывается } } 另一种选择:我们在某处写下版本号,并在每次启动时将其与当前版本号进行比较,如果已更改,则显示更改日志 Cypher 2020-07-26T19:52:35Z2020-07-26T19:52:35Z 你可以这样检查: public static boolean isFirstInstall() { try { long firstInstallTime = App.getContext().getPackageManager().getPackageInfo(getPackageName(), 0).firstInstallTime; long lastUpdateTime = App.getContext().getPackageManager().getPackageInfo(getPackageName(), 0).lastUpdateTime; return firstInstallTime == lastUpdateTime; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); return true; } } public static boolean isInstallFromUpdate() { try { long firstInstallTime = App.getContext().getPackageManager().getPackageInfo(getPackageName(), 0).firstInstallTime; long lastUpdateTime = App.getContext().getPackageManager().getPackageInfo(getPackageName(), 0).lastUpdateTime; return firstInstallTime != lastUpdateTime; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); return false; } } McDaggen 2020-07-27T02:57:08Z2020-07-27T02:57:08Z 一切都非常简单。 理论上: 您以编程方式获取应用程序代码的当前版本,将其保存到SharedPrefereneces并设置条件,如果保存的版本与当前版本匹配,则不会发生任何事情。即用户第一次下载应用程序,代码版本等于1,或者设为32,保存这个数字。并且一旦保存的代码号变得小于当前代码号,这将意味着应用程序已经更新,那么调用对话框的条件,例如,具有更改列表,就满足了。 在实践中: // Реализовываем SharedPreferences SharedPreferences mPreferences = PreferenceManager.getDefaultSharedPreferences(this); @SuppressLint("CommitPrefEdits") SharedPreferences.Editor mEditor = mPreferences.edit(); // Получаем текущую версию кода int versionCode = BuildConfig.VERSION_CODE; // Получаем сохраненную версию кода int lastVersionCode = mPreferences.getInt("update_true", versionCode); // Если lastVersionCode меньше чем текущий versionCode выполняется условие if (lastVersionCode < versionCode) { // Вызываем диалоговое окно со списком измненений } // Сохраняем текущую версию кода mEditor.putInt("update_true", versionCode).apply();
有这样一种方法——我们注册receiver来重新安装我们的应用程序:
另一种选择:我们在某处写下版本号,并在每次启动时将其与当前版本号进行比较,如果已更改,则显示更改日志
你可以这样检查:
一切都非常简单。
理论上:
您以编程方式获取应用程序代码的当前版本,将其保存到
SharedPrefereneces并设置条件,如果保存的版本与当前版本匹配,则不会发生任何事情。即用户第一次下载应用程序,代码版本等于1,或者设为32,保存这个数字。并且一旦保存的代码号变得小于当前代码号,这将意味着应用程序已经更新,那么调用对话框的条件,例如,具有更改列表,就满足了。在实践中: