应用程序关闭并重新启动后还原的ImageView
问题描述:
如何在关闭并重新启动应用程序后还原从库中挑选的ImageView
。我正在使用SharedPreferences
。要在应用程序关闭后保存URI的状态,但它不起作用,图像不会再次设置任何帮助,将不胜感激。应用程序关闭并重新启动后还原的ImageView
public class test extends AppCompatActivity {
private static int RESULT_LOAD_IMAGE = 1;
ImageButton buttonLoadImage;
private static int RESULT_LOAD_IMG = 1;
String imgDecodableString;
public String getImagePathFetch;
ImageView imgView;
public String keyImage = "myImage";
public SharedPreferences sharedPrefEnter, sharedPrefGet;
Intent galleryIntent;
Uri selectedImage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity_layout);
imgView = (ImageView) findViewById(R.id.imageView1);
sharedPrefGet = PreferenceManager.getDefaultSharedPreferences(this);
getImagePathFetch = sharedPrefGet.getString(keyImage, "");
if (!getImagePathFetch.equals("")) {
// tToast("OnCreate Path=" + getImagePathFetch);
Uri uri;
uri = Uri.parse(getImagePathFetch);
imgView.setImageURI(uri);
}
buttonLoadImage = (ImageButton) findViewById(R.id.buttonLoadPicture);
buttonLoadImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AddImage(view);
}
});
}
public void AddImage(View view) {
galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
// Start the Intent
startActivityForResult(galleryIntent, RESULT_LOAD_IMG);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// When an Image is picked
if (requestCode == RESULT_LOAD_IMG && resultCode == RESULT_OK && null != data) {
// Get the Image from data
selectedImage = data.getData();
sharedPrefEnter = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = sharedPrefEnter.edit();
editor.putString(keyImage, selectedImage.toString());
editor.commit();
Uri uri = Uri.parse(selectedImage.toString());
imgView.setImageURI(uri);
}
}
}
答
// get the path of the image
sharedPrefGet = PreferenceManager.getDefaultSharedPreferences(this);
getImagePathFetch = sharedPrefGet.getString(keyImage, "");
if (!getImagePathFetch.equals("")) {
// tToast("OnCreate Path = " + getImagePathFetch); //TESTING
// parse path from toString to uri
uriImage = Uri.parse(getImagePathFetch);
// explicitly check for the permission at runtime since API 23
int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
// Permission not granted
if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE },
WRITE_EXTERNAL_STORAGE);
} else // Permission granted
{
InputStream imageStream = null;
try {
imageStream = getContentResolver().openInputStream(uriImage);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream);
Bitmap imageResized = getResizedBitmap(yourSelectedImage, 480, 480); // resized
// Image
imgView.setImageBitmap(imageResized);
} // end if
}
//检查许可结果。 @覆盖 公共无效onRequestPermissionsResult(INT requestCode,@NonNull的String []的权限, @NonNull INT [] grantResults){ 开关(requestCode){
case WRITE_EXTERNAL_STORAGE:
if ((grantResults.length > 0) && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
InputStream imageStream = null;
try {
imageStream = getContentResolver().openInputStream(uriImage);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream);
Bitmap imageResized = getResizedBitmap(yourSelectedImage, 480, 480); // resized
// Image
imgView.setImageBitmap(imageResized);
}
break;
default:
break;
}
}
我已经解决了这个问题,更新我的代码检查的运行时权限 – Juancho92