我想将图片文件从Internet保存到我的手机中。我在AndroidManifest文件中使用了Internet和externalstorage权限。但它给出了下面给出的错误。我认为这是因为我的设备没有SD卡。如果是这样,那么我想知道如何存储在内部存储中。
myError
java.io.FileNotFoundException: /storage/emulated/0/Pictures/GettyImages-460712009-560x450.jpg:open 失败:EACCES(权限被拒绝引起: android.system.ErrnoException:open failed:EACCES(Permission denied)
以下是我的代码。
try {
URL urlobj = new URL(url);
connection= (HttpURLConnection) urlobj.openConnection();
inputStream=connection.getInputStream();
file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath() + "/"+ Uri.parse(url).getLastPathSegment());
FileOutputStream fileOutputStream = new FileOutputStream(file);
int reed = -1;
byte[] buffer = new byte[1024];
// if no data is return -1 keep reading until -1
while( ( reed=inputStream.read(buffer) )!= -1){
fileOutputStream.write(buffer,0,reed);
}
答案 0 :(得分:0)
您将获得权限被拒绝异常,因为您没有为具有Android Marshmallow及以上版本的设备实施“运行时”权限。
这是你如何实现这个目标的:
像以前一样添加以下权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
如果用户已经授予了权限,则匹配。如果是,请跳过请求许可并继续您的工作,否则请求用户许可:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!Settings.System.canWrite(this)) {
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE}, 2909);
} else {
// your code
}
} else {
// your code
}
权限结果回调:
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case 2909: {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Log.e("Permission", "Granted");
} else {
Log.e("Permission", "Denied");
}
return;
}
}
}
答案 1 :(得分:0)
要将图像保存在内存中,请使用此代码。
您应该在showast文件<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
您需要使用marshmallow及以上版本的运行时权限才能使用Amit sharma答案。
以下是在默认图片目录中保存文件的代码。
private File createImageFile() throws IOException {
// Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
// Save a file: path for use with ACTION_VIEW intents
mCurrentPhotoPath = image.getAbsolutePath();
return image;
}
有关模式详细信息,请查看此Link