2

「アプリケーション>設定>開発>モックの場所を許可する」がチェックされていない場合、エミュレーター(OS 2.3.3)でtrueと評価される次のコードがあります。メソッドがfalseを返すことを期待しますが、trueを返します。

public static boolean isMockLocationSet(Context context) {
    if (Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION, 0) == 0) {
        return false; 
    }
    else {
        return true;                    
    }
}

次の変更は、予想どおりfalseを返します(ところで、.equalsまたは.ContentEqualsのどちらが良いですか?):

public static boolean isMockLocationSet(Context context) {
    if (Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION).equals("0")) { //.contentEquals("0")
        return false; 
    }
    else {
        return true;                    
    }
}

最初の例を好むのは、null値が存在する可能性があり、デフォルトの0を割り当て、失敗することなくロジックを実行できるようにする必要があるためです(実際、このケースは存在する可能性がありますが、証明されていません-たとえば、メーカーは、これらすべての設定を確立せずにAndroidを実装します(つまり、Allow Mock Locationsのようなものはnullとして動作を開始します)...ユーザーが設定をチェックするまで待ってから、テーブルに1(またはチェックされていない場合は0)を書き込みます)。

では、何が問題なのでしょうか。バグレポートから、デバイスごとにこのチェックの処理方法は異なるが、すべてのデバイスタイプにアクセスできるわけではないという感覚があります。一般的/最良の処理方法に関する推奨事項を探しています。また、なぜ最初の例が機能しないのでしょうか。

4

1 に答える 1

3

さて、私は単に次のチェックを使用することにしました:

public static boolean isMockLocationSet(Context context) { 
    if (Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION).contentEquals("1")) { 
        return true;  
    } 
    else { 
        return false;                     
    } 
} 

もちろん、このメソッドはnullの場合を適切に処理し、falseを返します。

元の質問のコードが機能しない理由はわかりません...おそらくSDKのバグです。

于 2012-01-07T05:28:33.477 に答える