1

2 つの異なるバージョンを持つ INSTALL_NON_MARKET_APPS オプションを回避しようとしています。17 より前の API レベルおよび 17+。これを実行すると、null ポインター例外が発生します。

boolean unknownSource = false;
if (Build.VERSION.SDK_INT < 17) {
    unknownSource = Settings.Secure.getInt(null, Settings.Secure.INSTALL_NON_MARKET_APPS, 0) == 1;
} else {
    unknownSource = Settings.Global.getInt(null, Settings.Global.INSTALL_NON_MARKET_APPS, 0) == 1;
}
4

1 に答える 1

3

Settings.System変数が減価償却されて に変更されSettings.Secure、API レベル 17 で に変更されたのは API レベル 3 だと思いますSettings.Global

また、メソッド呼び出しには Context Content Resolver が必要だと思います。

boolean unknownSource = false;
if (Build.VERSION.SDK_INT < 3) {
    unknownSource = Settings.System.getInt(getContentResolver(), Settings.System.INSTALL_NON_MARKET_APPS, 0) == 1;
}
else if (Build.VERSION.SDK_INT < 17) {
    unknownSource = Settings.Secure.getInt(getContentResolver(), Settings.Secure.INSTALL_NON_MARKET_APPS, 0) == 1;
} else {
    unknownSource = Settings.Global.getInt(getContentResolver(), Settings.Global.INSTALL_NON_MARKET_APPS, 0) == 1;
}
于 2013-07-21T21:21:18.307 に答える