1

Switch ウィジェットを使用してデバイスのデータ接続を有効/無効にする Android アプリケーションを構築しています。

私の問題は、実際にはデータのローミングです。ユーザーがデータ接続のローミングを無効にしている場合、API メソッドは、NetworkInfo.isConnectedOrConnecting()またはTelephoneManager.getDataState()接続がオフになっていると言うでしょう。

一般的にこれは true ですが、私のコンテキストでは、データ接続が Android 設定から「チェック」されている場合、これは false です。

したがって、有効/アクティブ/などではなく、データ接続がチェックされているかどうかを確認できるメソッドが必要です。

何か案が?

4

1 に答える 1

3

システムがデータ接続チェックボックス/スイッチの状態をローカルに保存する「mobile_data」行名を定義します。

private static final String MOBILE_DATA = "mobile_data";

そして、その行の値がであるかどうかを確認します0。の場合0、データ接続はチェックされていない/無効になっています (チェックされていません):

private boolean isMobileDataChecked() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        // The row has been moved to 'global' table in API level 17
        return Settings.Global.getInt(getContentResolver(), MOBILE_DATA, 0) != 0;
    }

    try {
        // It was in 'secure' table before
        int enabled = Settings.Secure.getInt(getContentResolver(), MOBILE_DATA);
        return enabled != 0;
    } catch (SettingNotFoundException e) {
        // It was in 'system' table originally, but I don't remember when that was the case.
        // So, probably, you won't need all these try/catches.
        // But, hey, it is better to be safe than sorry :)
        return Settings.System.getInt(getContentResolver(), MOBILE_DATA, 0) != 0;
    }
}
于 2013-06-10T10:12:45.920 に答える