【发布时间】:2018-12-19 19:53:42
【问题描述】:
问题是设置为 SharedPreferences 的默认值正在改变,具体取决于我是从 Google Play 商店安装应用程序还是直接安装 apk(或从 Play 商店安装后清除应用程序的存储)。
从 Play 商店安装我的布尔值为 false。
清除存储并再次运行,我的布尔值为真。
private void setShowStoragePermission(boolean permission){
SharedPreferences sharedPreferences = getSharedPreferences("storagePermission", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("permission", permission).apply();
}
private boolean getShowStoragePermission(){
SharedPreferences sharedPreferences = getSharedPreferences("storagePermission", MODE_PRIVATE);
return sharedPreferences.getBoolean("permission", true);
}
在第一次干净运行时,没有保存 SharedPreferences 所以返回的值是 getShowStoragePermission() 返回真。但是,从 Play 商店安装时,我在最初几秒钟内看到了 toast 的错误(“savedPermission: false”);
您可以在应用的测试版上亲自查看: Link to app on Play store //
我正在 Android P DP4 上测试该应用。这个问题有什么解决办法吗?
MainActivity 中的代码:
if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
setToast("savedPermission: " + getShowStoragePermission(), Toast.LENGTH_LONG);
//on first run from Google Play store @getShowStoragePermission returns false - need to return true
if(getShowStoragePermission()) {
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
} else {
makeBingWallRequest(false);
}
}else{
//storage permission granted manually from app settings or from dialog request
createImageDir();
makeBingWallRequest(true);
}
SharedPreferences 的设置位置:
private void makeBingWallRequest(boolean storagePermission){
if(getDeviceInternetStatus(context) == null && getBingWallDay() == 0){
bingImage.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.bearcats));
return;
}
if(!storagePermission){
new BingWallpaper(MainActivity.this).execute(false);
}else {
Calendar now = Calendar.getInstance(TimeZone.getDefault());
int day = now.get(Calendar.DAY_OF_MONTH);
//on first run
setToast("savedBingWallDay: " + getBingWallDay(), Toast.LENGTH_LONG);
if(getBingWallDay() == FIRST_RUN_BING_IMAGE){
saveBingWallDay();
new BingWallpaper(MainActivity.this).execute(true);
//every other run
}else if (day != getBingWallDay()) {
//if current time is past 3AM then make new request
int hourIn24 = now.get(Calendar.HOUR_OF_DAY);
if(hourIn24 >= BING_IMAGE_RESET_HOUR_IN_24){
saveBingWallDay();
new BingWallpaper(MainActivity.this).execute(true);
}else loadBitmap();
} else loadBitmap();
}
}
【问题讨论】:
-
您能否发布从您的活动/片段中调用这两个函数的代码。
-
您还可以检查不同版本的不同设备吗?这将有助于我们进行更多调查。
-
我更新了帖子,在我的活动中调用了这两个函数。即将在另一台设备上进行测试。
标签: android android-studio sharedpreferences