2012-08-07 46 views
1

我目前正试图在手机启动时根据布尔值false或true启动服务。问题是如果我使用getBoolean关于共享首选项的布尔值问题

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

他们都将设置为true,每当电话启动导致我的我的两个isPhysicalSirenFlagged & isSMSSirenFlagged是真实的时候。是否有可能检查一个值的当前布尔值是什么?

代码:

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 
    } 
+0

我不明白您的问题。 如果您将它们设置为false,它们将是错误的。 – 2012-08-07 15:11:00

+0

是的,这就是为什么我想知道,而不是将它们设置为false有没有办法来检查当前可能isSMSSIrenFlagged的布尔值?因为无论手机何时启动,都会执行getBoolean语句 – dythe 2012-08-07 15:12:37

+0

@dythe否*。这就是为什么有一个默认值(您作为第二个参数传入的真实值)。 – AedonEtLIRA 2012-08-07 15:15:20

回答

1

把它设置为false,而不是,明明什么都你正在做不commiting更改了SharedPrefereces指示标志。通过使用false作为默认值,您将防止对标志进行意外的真正赋值。实际上,你应该使用int标志(或首选枚举)来表示这个。这是确定设备所处状态的更安全的方式。例如:

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

or 

enum State { 
    NONE, THEFTED, WAILING; 
} 
+0

同意,试试:sp.getBoolean('key',false); – nickaknudson 2012-08-07 15:21:00