无法在Moto Devices Android上获得数据漫游状态?

时间:2015-06-08 12:26:19

标签: android

我需要访问Moto Device上的数据漫游状态(5.0.1)

if (Settings.Secure.getInt(context.getContentResolver(),Settings.Secure.DATA_ROAMING) == 1) {
    //Data Roaming Enabled      
    flag = true;
} else {
    // Data Roaming Disabled
    flag = false;
}

使用摩托罗拉设备时,我发现了这个问题。此设备中的安全设置位于android.provider.MotorolaSettings.Secure,与其他设备android.provider.Settings.Secure一样。

有没有办法解决这种或任何其他方式来获得漫游状态?

1 个答案:

答案 0 :(得分:1)

此处有一个解决方案,使用反射来检查Motorola类是否可用。 如果他们不在这里,您需要使用默认的api,然后在可用系统上调用getInt

无法在摩托罗拉设备上进行测试。

public static boolean isEnabled(Context context){

    Class<?> baseSettingsClass = null;

    // Retrieve the 'default' settings api
    try {
        if (android.os.Build.VERSION.SDK_INT >= 17){
            baseSettingsClass = Class.forName( "android.provider.Settings$Global");
        }
        else{
            baseSettingsClass = Class.forName( "android.provider.Settings$Secure" );
        }
    }catch(Exception e){}

    Class<?> secureClass = null;


    // Try retrieve the motorola class
    try{
        secureClass = Class.forName("com.motorola.android.provider.MotorolaSettings$Secure" );
    }catch(Exception e){}


    // If it failed, use the 'default' api class
    if (secureClass == null){
        if (baseSettingsClass != null){
            secureClass = baseSettingsClass;
        }
        else{
            return false;
        }
    }

    try {
        // Retrieve the getInt method
        Method getIntMethod = secureClass.getDeclaredMethod("getInt", ContentResolver.class, String.class);

        // Execute getInt(context.getContentResolver(), Settings.Secure.DATA_ROAMING)
        int result = (Integer) (getIntMethod.invoke(null, context.getContentResolver(), (String)baseSettingsClass.getField("DATA_ROAMING").get(null)));

        return  result == 1;

    } catch (Exception e) {
        e.printStackTrace();
    }

    return false;
}