1

我目前正在尝试在手机启动时基于布尔值 false 或 true 启动服务。问题是如果我使用 getBoolean

 boolean isPhysicalSirenFlagged = sp.getBoolean("isPhysicalSirenFlagged", true);
 boolean isSMSSirenFlagged = sp.getBoolean("isSMSSirenFlagged", true);

每当手机启动时,它们都会设置为 true,导致我的 isPhysicalSirenFlagged 和 isSMSSirenFlagged 都为 true。是否可以检查值的当前布尔值是什么?

代码:

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
     String value = sp.getString("serial", "");
     boolean isPhysicalSirenFlagged = sp.getBoolean("isPhysicalSirenFlagged", true);
     boolean isSMSSirenFlagged = sp.getBoolean("isSMSSirenFlagged", true);

     if (isPhysicalSirenFlagged) {
         //true
         Intent physicaldialog = new Intent(context, PhysicalTheftDialog.class);
         physicaldialog.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         context.startActivity(physicaldialog);
         context.startService(new Intent(context, PhysicalTheftService.class));
     }
     else {
         //false
     }

     if (isSMSSirenFlagged) {
         //true
         Intent smsdialog = new Intent(context, SMSNotificationPasswordDialog.class);
         smsdialog.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         context.startActivity(smsdialog);
         context.startService(new Intent(context, RemoteSirenService.class));
     }
     else {
         //false
     }
4

1 回答 1

1

将其设置为 false ,显然您所做的并不是对 SharedPrefereces 进行更改以指示标志。通过使用 false 作为默认值,您将防止对标志的意外 true 分配。说实话,您应该使用 int 标志(或首选枚举)来表示这一点。这是确定设备所处状态的一种更安全的方法。例如:

int NO_STATE    = 0
int IS_THEFTED  = 1
int IS_WAILING  = 2

or

enum State {
    NONE, THEFTED, WAILING;
}
于 2012-08-07T15:07:39.320 回答