我想当用户注册到我的应用程序时,他可以拍照或从他的照片库中选择他的照片用于应用程序。 我想将此图片保存在内部应用程序文件夹中,这样我就不需要询问存储权限了(我想!)。 我不能这样做。 现在,我有图像的Uri。 我该怎么做?Android - 在哪里以及如何保存个人资料图片
0
A
回答
1
您可以从URI
获得Bitmap
并保存到本地存储。为了从Bitmap
:
public static Bitmap getBitMap(Uri uri) throws FileNotFoundException, IOException{
InputStream input = this.getContentResolver().openInputStream(uri);
BitmapFactory.Options onlyBoundsOptions = new BitmapFactory.Options();
onlyBoundsOptions.inJustDecodeBounds = true;
onlyBoundsOptions.inDither=true;//optional
onlyBoundsOptions.inPreferredConfig=Bitmap.Config.ARGB_8888;//optional
BitmapFactory.decodeStream(input, null, onlyBoundsOptions);
input.close();
if ((onlyBoundsOptions.outWidth == -1) || (onlyBoundsOptions.outHeight == -1)) {
return null;
}
int originalSize = (onlyBoundsOptions.outHeight > onlyBoundsOptions.outWidth) ? onlyBoundsOptions.outHeight : onlyBoundsOptions.outWidth;
double ratio = (originalSize > THUMBNAIL_SIZE) ? (originalSize/THUMBNAIL_SIZE) : 1.0;
BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
bitmapOptions.inSampleSize = getPowerOfTwoForSampleRatio(ratio);
bitmapOptions.inDither = true; //optional
bitmapOptions.inPreferredConfig=Bitmap.Config.ARGB_8888;//
input = this.getContentResolver().openInputStream(uri);
Bitmap bitmap = BitmapFactory.decodeStream(input, null, bitmapOptions);
input.close();
return bitmap;
}
private static int getPowerOfTwoForSampleRatio(double ratio){
int k = Integer.highestOneBit((int)Math.floor(ratio));
if(k==0) return 1;
else return k;
}
然后调用它像:
Bitmap bitmap = getBitMap(imageUri);
然后保存位图到内部存储创建一个类ImageStorage
:
public class ImageStorage {
public static String saveInternalStorage(Context context,Bitmap bitmap, String filename) {
String stored = null;
File sdcard = context.getFilesDir();
File folder = new File(sdcard.getAbsoluteFile(), "/directoryName/");
folder.mkdir();
File file = new File(folder.getAbsoluteFile(), filename + ".jpg") ;
if (file.exists())
return stored ;
try {
FileOutputStream out = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
out.flush();
out.close();
stored = "success";
} catch (Exception e) {
FirebaseCrash.report(e);
e.printStackTrace();
}
return stored;
}
public static File getImage(Context context,String imagename) {
File mediaImage = null;
try {
String root = context.getFilesDir().toString();
File myDir = new File(root);
if (!myDir.exists())
return null;
mediaImage = new File(myDir.getPath() + "/directoryName/"+imagename);
} catch (Exception e) {
FirebaseCrash.report(e);
// TODO Auto-generated catch block
e.printStackTrace();
}
return mediaImage;
}
public static boolean checkifImageExists(Context context,String imagename)
{
Bitmap b = null ;
File file = ImageStorage.getImage(context,"/"+imagename+".jpg");
String path = file.getAbsolutePath();
if (path != null)
b = BitmapFactory.decodeFile(path);
if(b == null || b.equals(""))
{
return false;
}
return true ;
}
}
之后调用与功能你的活动Context
。
0
如果您将个人资料图像保存到存储中,您肯定需要读取和写入权限。
我不认为它是一个好主意,如果你在本地使用它,如你在你的问题中提到的那样,将图像存储在不同的文件夹中。
但是, 如果你想这样做,不求回报,你可以存储当前图像URI(你越来越)存储许可进入SharedPreferences和使用保存的URI显示个人资料图片。
例子:在你的类
申报SharedPrefrence:
SharedPreferences sharedpreferences;
public static String MYPREFERENCES="MyPrefs";
初始化SharedPrefrence里面的onCreate():
sharedpreferences = getSharedPreferences(MYPREFERENCES, 0);
使用此sharedprefrence你在哪里歌厅你图片的URI和保存在这里。
例子:
Uri imgUri = Uri.parse("content://x.y.z/"); // Use your URI
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString("ProfileImageUri",imgUri);
editor.apply();
现在从您要设置或显示用户有个人资料相片sharedprefrence检索该URI。
例子:
Uri defaultImageUri = Uri.parse("android.resource://my.package.name/"+R.drawable.profileimage); // use this default image uri if user didn't saved any image to sharedprefrence .
sharedpreferences = getSharedPreferences(MYPREFERENCES, 0);
ImageURI= sharedpreferences.getString("ProfileImageUri", defaultImageUri.toString);
现在,
Uri imgUri = Uri.parse(ImageURI);
imageView.setImageURI(imgUri);
相关问题
- 1. NodeJS:如何保存facebook个人资料图片
- 2. 如何以及在哪里可以在Android上保存QSettings?
- 3. 缓存Facebook个人资料图片?
- 4. 如何通过Facebook提供的图片URL保存Facebook个人资料图片?
- 5. 如何保存用户的Facebook个人资料图片保存到使用PHP
- 6. Android在哪里保存个人数据?
- 7. 如何在会话中存储gmail个人资料图片?
- 8. 如何在数据库中存储Facebook个人资料图片?
- 9. 个人资料图片 - 如何在我的网站上储存
- 10. 如何私密存储用户个人资料图片,以便只能由个人资料所有者访问?
- 11. 将Google个人资料图片保存到Firebase中
- 12. 使用cURL保存facebook个人资料图片
- 13. Devise + Omniauth + Carrierwave不保存facebook/github个人资料图片
- 14. 分享偏好来保存个人资料图片
- 15. 保存个人资料在Iphone
- 16. 如何以png格式获取facebook个人资料图片?
- 17. 如何在登录后显示Facebook个人资料图片?
- 18. 谷歌公开个人资料图片
- 19. PHP更改个人资料图片
- 20. 解析转推个人资料图片
- 21. 按比例个人资料图片
- 22. 在PHP会话中存储Facebook个人资料图片URL
- 23. instagram个人资料照片不保存/工作?
- 24. 从Uri到Android的位图获取Google+个人资料图片
- 25. Android的位图用户的个人资料图片
- 26. 如何在iOS中从Google +获取个人资料图片?
- 27. 如何在https下获取Facebook个人资料图片?
- 28. 如何在个人资料图片上传中实现cookie?
- 29. 如何在Facebook上更改用户的个人资料图片?
- 30. Facebook个人资料图片更新后可以获得吗?
你,如果你打算稍后阅读图像可能仍然需要得到许可。我猜想一个想要访问你的图片的应用程序需要许可。 –
我敢肯定,如果你谷歌“安卓商店形象在内部应用程序文件夹”,你会发现你需要的所有信息 –
'保存此图片在内部应用程序文件夹。你认为什么是“内部应用文件夹”? – greenapps