相关疑难解决方法(0)

当用户更新应用时,是否会删除Android应用中的共享偏好设置?

如果我将一些用户设置和信息存储在我的Android应用程序的共享首选项中,然后我在市场中更新应用程序,这些设置会在应用程序更新时被删除吗?

android

33
推荐指数
1
解决办法
6534
查看次数

在应用更新时删除了活动别名

我已经实现了两个activity-alias用户应该能够在运行时启用或禁用的功能.

<activity-alias
    android:name=".ui.alias.open_location"
    android:targetActivity=".ui.activity.location"
    android:enabled="false">

    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity-alias>
Run Code Online (Sandbox Code Playgroud)

我不希望在开始时启用它们,以免弄乱用户设备的应用程序屏幕.但在运行时,用户应该能够启用别名.我这样做是通过PackageManager:

PackageManager pm  = getApplicationContext().getPackageManager();
ComponentName componentName = new ComponentName(context, ".ui.alias.open_location");
pm.setComponentEnabledSetting(componentName,
                              PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                              PackageManager.DONT_KILL_APP);
Run Code Online (Sandbox Code Playgroud)

这在开始时就像魅力一样,但是当安装了我的应用程序的更新时,别名会再次被禁用.如何防止系统被清单覆盖启用状态?我不希望用户在开始时使用Launcher,我不希望用户在更新后重新创建所有别名快捷方式.

我想我需要类似的东西PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER,但仅限于启用状态.

谢谢!

android android-manifest android-activity android-activity-alias

18
推荐指数
1
解决办法
778
查看次数

Update/Uninstall上的SharedPreferences行为

我使用共享首选项来存储我的应用程序启动的次数.只有在第一次启动时,我才会显示一条欢迎消息,告诉用户该版本中的新功能和更改.

但是当我专注于重新安装应用程序或升级应用程序时,我无法删除以前的共享首选项.我想在重新安装软件或升级它时获得对话框.

AppLauncher

public class AppLauncher {
    static long launch_count = 0;
    private static boolean isLaunch = false;

    public static void app_launched(Context mContext) {
        System.out.println("I m in AppLauncher");
        SharedPreferences prefs = mContext.getSharedPreferences("apprater", 0);
        if (prefs.getBoolean("dontshowagain", false)) {
            return;
        }

        SharedPreferences.Editor editor = prefs.edit();

        // Increment launch counter

        launch_count = prefs.getLong("launch_count", 0);
        editor.putLong("launch_count", launch_count);

        System.out.println("launch_count=" + launch_count);
        if (launch_count == 0 || launch_count == 1) {
            // showLaunchDialog(mContext);
            isLaunch = true;
        }
        if (isLaunch == true) {
            showLaunchDialog(mContext);
            isLaunch = false; …
Run Code Online (Sandbox Code Playgroud)

android sharedpreferences

5
推荐指数
2
解决办法
9147
查看次数

更新应用程序是否清除共享偏好或删除应用程序设置的警报?

我已经在谷歌商店发布了我的应用程序,现在我想更新它.

但我想确保我的应用程序共享首选项中不会丢失存储的数据.我还在我的应用程序中设置了一些警报,它会启动通知,我也不想丢失它们.

我不确定更新应用程序的工作原理?它会改写这些东西吗?无论如何,我可以在全球发布之前对其进行测试吗?

我要指出,我在这个版本中所做的更改含有清单中有些变化:我改变targetSdkVersionminSdkVersion(它曾经有过minSdk=8,现在我把它改成4和添加targetsdk=15),我给了一个进程名我alarmservice(这是一个intentservice到设置警报但后来决定更改它,它现在没有进程名称.

android alarmmanager sharedpreferences

5
推荐指数
1
解决办法
6440
查看次数

应用更新后 SharedPreferences 丢失

我一整天都在研究这个问题。以下是关键点:

  • 当用户更新应用程序时,SharedPreferences应该是持久的
  • 就我而言,更新应用程序后,它们丢失了
  • 该问题每次都可以重现(我从 Play 商店安装旧的 APK,然后adb install -r new.apk安装新的(更新、签名、版本代码递增)APK)

8小时后

为了测试我改变SharedPrefs的文件名new.apkSP2.xml),并在更新,从旧SharedPrefs文件old.apkSP.xml删除了!这是 adb shell 输出:

  1. adb install old.apk

  2. adb shell "su -c 'ls /data/data/com.pkg.name/shared_prefs'": CRC.xml

  3. adb install -r new.apk

  4. adb shell "su -c 'ls /data/data/com.pkg.name/shared_prefs'":CRC2.xml(缺少CRC.xml!)

我的 SharedPreferences 单例类 (init:) SharedPrefs.init(getApplicationContext());

public final class SharedPrefs {
    private static SharedPrefs sp;

    private SharedPrefs() {
    }

    public static void init(Context context) {
        if (sp == null) …
Run Code Online (Sandbox Code Playgroud)

android sharedpreferences

4
推荐指数
1
解决办法
3128
查看次数