Java 检测开发人员选项是否启用的简单方法?

Java 检测开发人员选项是否启用的简单方法?,java,android,Java,Android,我使用此代码检测手机上是否启用了开发者选项: int developerOptions = Settings.Secure.getInt(this.getContentResolver(), Settings.Global.DEVELOPMENT_SETTINGS_ENABLED , 0); 然而,我测试了它,它在少量设备上返回了错误的值——一些华为手机和其他设备 是否有另一种全面验证的方法来检测设备中是否启用了开发人员选项 我尝试过这个方法,但不起作用我不想使用这个方法,因为它不优雅,我只是

我使用此代码检测手机上是否启用了开发者选项:

int developerOptions = Settings.Secure.getInt(this.getContentResolver(), Settings.Global.DEVELOPMENT_SETTINGS_ENABLED , 0);
然而,我测试了它,它在少量设备上返回了错误的值——一些华为手机和其他设备

是否有另一种全面验证的方法来检测设备中是否启用了开发人员选项

我尝试过这个方法,但不起作用我不想使用这个方法,因为它不优雅,我只是在测试:

try 
{
    startActivityForResult(new Intent(android.provider.Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS), 8080);
    finishActivity(8080);
    // Developer options enabled
} 
catch (Exception e) 
{
    // Developer options disabled
}
我的应用程序的最低API级别是21


我已经看了一看和其他类似的,但我没有找到一个完整的解决方案。这不是一个重复的问题。

你不能做得比Android本身更简单:

 public static boolean isDevelopmentSettingsEnabled(Context context) {
    final UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE);
    final boolean settingEnabled = Settings.Global.getInt(context.getContentResolver(),
            Settings.Global.DEVELOPMENT_SETTINGS_ENABLED,
            Build.TYPE.equals("eng") ? 1 : 0) != 0;
    final boolean hasRestriction = um.hasUserRestriction(
            UserManager.DISALLOW_DEBUGGING_FEATURES);
    final boolean isAdmin = um.isAdminUser();
    return isAdmin && !hasRestriction && settingEnabled;
}
你的代码很接近,但没有说明原因
Build.TYPE.equalseng?1:0

你不能做得比Android本身更简单:

 public static boolean isDevelopmentSettingsEnabled(Context context) {
    final UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE);
    final boolean settingEnabled = Settings.Global.getInt(context.getContentResolver(),
            Settings.Global.DEVELOPMENT_SETTINGS_ENABLED,
            Build.TYPE.equals("eng") ? 1 : 0) != 0;
    final boolean hasRestriction = um.hasUserRestriction(
            UserManager.DISALLOW_DEBUGGING_FEATURES);
    final boolean isAdmin = um.isAdminUser();
    return isAdmin && !hasRestriction && settingEnabled;
}
你的代码很接近,但没有说明原因
Build.TYPE.equalseng?1:0在模拟器上测试最小API 17

public boolean isDeveloperModeEnabled(){
    if (Integer.valueOf(android.os.Build.VERSION.SDK) >= 17) {
        return android.provider.Settings.Secure.getInt(getActivity().getApplicationContext().getContentResolver(),
                android.provider.Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0) != 0;
    }
    return false;
}

在仿真器上测试最小API 17

public boolean isDeveloperModeEnabled(){
    if (Integer.valueOf(android.os.Build.VERSION.SDK) >= 17) {
        return android.provider.Settings.Secure.getInt(getActivity().getApplicationContext().getContentResolver(),
                android.provider.Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0) != 0;
    }
    return false;
}
请尝试以下代码:

int devOptions = Settings.Secure.getInt(this.getContentResolver(), Settings.Global.DEVELOPMENT_SETTINGS_ENABLED,
Build.TYPE.equals("eng") ? 1 : 0);
请尝试以下代码:

int devOptions = Settings.Secure.getInt(this.getContentResolver(), Settings.Global.DEVELOPMENT_SETTINGS_ENABLED,
Build.TYPE.equals("eng") ? 1 : 0);

与其他工作手机相比,如果您在华为手机上获得或记录Settings.Global.DEVELOPMENT\u Settings\u的值,您能告诉我您得到了什么字符串吗?如果我是正确的,那可能是因为中国手机的本地化。@HarryMothy我个人没有华为手机。不幸的是,我的用户向我报告了这个问题。与其他工作手机相比,如果你在华为手机上获得或记录Settings.Global.DEVELOPMENT\u Settings\u的值,你能告诉我你得到了什么字符串吗?如果我是对的,那可能是因为中国手机的本地化。@HarryMothy我个人没有华为。不幸的是,我的用户向我报告了这个问题。你不需要那个部分。。UserManagerService并不意味着可见。您只需要:boolean settingEnabled=Settings.Global.getIntcontext.getContentResolver,Settings.Global.DEVELOPMENT\u Settings\u ENABLED,Build.TYPE.equalseng?1 : 0 != 0; - 如果调用的用户不是管理员用户,其余的将反转真实值。谢谢您的帮助。但是,在我的emulator Pixel 2 API 24上,代码没有检测到已启用开发人员选项。你可以试试。转到“关于设备”并点击“build number”7次以激活开发人员选项。在Pixel 2 API 24上特别试用。模拟器与Android不是100%相同,因此我不会将其作为测试用例。我给你的代码实际上是开发者选项设置中的代码,这意味着AOSP本身知道是否启用了开发者选项。对于不属于这种概括的特定设备或模拟器,我建议反编译它们的设置应用程序,并将其与AOSP源代码进行比较。好的,谢谢!我会和我的用户一起测试这段代码,然后再给你回复。我会给你奖金。但是,我仍然在等待我的用户的反馈。你不需要那个部分。。UserManagerService并不意味着可见。您只需要:boolean settingEnabled=Settings.Global.getIntcontext.getContentResolver,Settings.Global.DEVELOPMENT\u Settings\u ENABLED,Build.TYPE.equalseng?1 : 0 != 0; - 如果调用的用户不是管理员用户,其余的将反转真实值。谢谢您的帮助。但是,在我的emulator Pixel 2 API 24上,代码没有检测到已启用开发人员选项。你可以试试。转到“关于设备”并点击“build number”7次以激活开发人员选项。在Pixel 2 API 24上特别试用。模拟器与Android不是100%相同,因此我不会将其作为测试用例。我给你的代码实际上是开发者选项设置中的代码,这意味着AOSP本身知道是否启用了开发者选项。对于不属于这种概括的特定设备或模拟器,我建议反编译它们的设置应用程序,并将其与AOSP源代码进行比较。好的,谢谢!我会和我的用户一起测试这段代码,然后再给你回复。我会给你奖金。然而,我仍在等待用户的反馈。