我尝试了许多不同的方法或解决方案,但似乎没有一种方法可行。我已经尝试了一些特定的解决方案,它们返回一个字符串和一个上下文但我不知道如何处理context
,即使我将context
的接收者设置为 null 该应用返回错误。我想要做的是,为了能够upload an image file
,我需要文件路径,Uri或内容Uri给我这样的地址
内容:// something_something / 304:
但我需要这样的东西“ 存储/ SD卡/ something_something / 304.jpg“
如何在KITKAT
中得到它?
这是我用于获取所选用户Image的路径的代码/方法。
public String getPath(Uri uri)
{
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
希望我提供足够的细节。谢谢你的帮助。
答案 0 :(得分:0)
KITKAT不提供实际的图像路径以用于安全目的。
if (Build.VERSION.SDK_INT >19){
InputStream imInputStream = getContentResolver().openInputStream(data.getData());
Bitmap bitmap = BitmapFactory.decodeStream(imInputStream);
String imagePath = saveGalaryImageOnKitkat(bitmap);
}
///After use you can delete the bitmap.
private String saveGalaryImageOnKitkat(Bitmap bitmap){
try{
File cacheDir;
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
cacheDir=new File(Environment.getExternalStorageDirectory(),getResources().getString(R.string.app_name));
else
cacheDir=getExternalFilesDir(Environment.DIRECTORY_PICTURES);
if(!cacheDir.exists())
cacheDir.mkdirs();
String filename=java.lang.System.currentTimeMillis()+".png";
File file = new File(cacheDir, filename);
file.createNewFile();
FileOutputStream out = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
return file.getAbsolutePath();
}catch(Exception e){
e.printStackTrace();
}
return null;
}