You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Android设备当前选中的地区/国家代码?

获取Android设备当前选中地区代码(实时更新方案)

一、直接获取地区代码

Android系统中独立于语言的地区设置,可通过系统设置API获取,分版本处理:

1. Android 7.0(API 24)及以上

系统提供Settings.Secure.REGION_SETTING键直接读取:

import android.content.ContentResolver;
import android.provider.Settings;

public String getCurrentRegionCode() {
    ContentResolver resolver = getContentResolver();
    return Settings.Secure.getString(resolver, Settings.Secure.REGION_SETTING);
}

返回结果为ISO 3166-1 alpha-2格式的两位地区代码(如US、UK)。

2. Android 7.0以下版本

低版本系统可读取Settings.System中的user_country键:

import android.content.ContentResolver;
import android.provider.Settings;

public String getCurrentRegionCodePreN() {
    ContentResolver resolver = getContentResolver();
    return Settings.System.getString(resolver, "user_country");
}

二、监听地区设置实时变更

通过注册ContentObserver监听设置变化,实现实时更新:

1. 注册与注销监听

import android.database.ContentObserver;
import android.os.Build;
import android.os.Handler;
import android.provider.Settings;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    private ContentObserver regionChangeObserver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 初始化监听观察者
        regionChangeObserver = new ContentObserver(new Handler()) {
            @Override
            public void onChange(boolean selfChange) {
                super.onChange(selfChange);
                // 地区变更时重新获取代码并处理
                String newRegionCode = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
                        ? getCurrentRegionCode()
                        : getCurrentRegionCodePreN();
                // 这里添加你的业务逻辑,比如更新UI
            }
        };

        // 根据系统版本注册监听
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            getContentResolver().registerContentObserver(
                    Settings.Secure.getUriFor(Settings.Secure.REGION_SETTING),
                    false,
                    regionChangeObserver
            );
        } else {
            getContentResolver().registerContentObserver(
                    Settings.System.getUriFor("user_country"),
                    false,
                    regionChangeObserver
            );
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 注销监听,避免内存泄漏
        if (regionChangeObserver != null) {
            getContentResolver().unregisterContentObserver(regionChangeObserver);
        }
    }

    // 复用前面的获取方法
    private String getCurrentRegionCode() {
        ContentResolver resolver = getContentResolver();
        return Settings.Secure.getString(resolver, Settings.Secure.REGION_SETTING);
    }

    private String getCurrentRegionCodePreN() {
        ContentResolver resolver = getContentResolver();
        return Settings.System.getString(resolver, "user_country");
    }
}

2. 权限说明

API 23及以上无需额外申请权限,读取系统设置的相关键属于默认允许的操作;部分定制ROM可能存在差异,需实际测试验证。

三、适配注意事项

  • 部分厂商定制系统可能修改了地区设置的存储键值,可通过ADB命令确认:
    • API24+:adb shell settings get secure region_setting
    • 低版本:adb shell settings get system user_country
  • 返回的地区代码均为两位大写字母,符合需求格式。

内容的提问来源于stack exchange,提问作者Sumit Shukla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 21:30:58