用于检测是否启用了侧面加载的Android API

时间:2014-01-30 19:29:30

标签: android sideloading

我的Android应用是否有办法检测是否在用户的手机上启用了侧面加载?用户已在手机上安装了我的应用。现在,我想以编程方式测试用户是否启用了侧载,即用户是否已更改其设置以允许从场外源安装应用。如果有API来获取此信息?是否存储了一个我可以通过编程方式查询的设置(无需用户交互)?

2 个答案:

答案 0 :(得分:2)

@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
@SuppressWarnings("deprecation")
public static boolean isSideloadingEnabled(Context ctx) {
    final ContentResolver cr = ctx.getContentResolver();

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        //Pull from Secure settings for (API < 17)
        return Settings.Secure.getInt(cr, Settings.Secure.INSTALL_NON_MARKET_APPS, 0) == 1;
    } else {
        //Setting was moved to Global settings in (API >= 17)
        return Settings.Global.getInt(cr, Settings.Global.INSTALL_NON_MARKET_APPS, 0) == 1;
    }
}

INSTALL_NON_MARKET_APPS州的Javadoc:

  

软件包安装程序是否应允许安装从Google Play以外的来源下载的应用程序。 1 =允许从其他来源安装0 =仅允许从Google Play安装

答案 1 :(得分:0)

显然,这是由INSTALL_NON_MARKET_APP设置提供的。请参阅有关如何在最新版本的Android上进行查询的链接。

对于向后兼容的查询方式,该方法也适用于旧版Android,请参阅https://stackoverflow.com/a/17777053/781723