Reputation: 81
I am trying to write an image to my android file system, however when trying to write the bytes, I get the above error.
I am running Visual Studio 2019 (as administrator) and targeting API Level 29
AndroidManifest.xml
My external storage permissions are present in my manifest file:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
And as per another suggestion I have added android:requestLegacyExternalStorage="true"
in my application tag:
<application android:label="App Name" android:icon="@mipmap/launcher_foreground" android:extractNativeLibs="true" android:requestLegacyExternalStorage="true">
MainActivity.cs
Here I am requesting the permissions when the app starts and pressing allow on both prompts:
int requestPermissions = 0;
string cameraPermission = Android.Manifest.Permission.Camera;
string filePermission = Android.Manifest.Permission.WriteExternalStorage;
if (!(ContextCompat.CheckSelfPermission(this, cameraPermission) == (int)Permission.Granted) || !(ContextCompat.CheckSelfPermission(this, filePermission) == (int)Permission.Granted))
{
ActivityCompat.RequestPermissions(this, new String[] { cameraPermission, filePermission
}, requestPermissions);
}
SaveMedia.cs
I get the error on File.WriteAllBytes
:
public string SavePickedPhoto(Stream file, string fileName)
{
var bytes = GetBytesFromStream(file);
string path = Path.Combine(Android.App.Application.Context.GetExternalFilesDir("").AbsolutePath + "PhotoDirectoryForApp";
if (!Directory.Exists(path))
{
try
{
Directory.CreateDirectory(path);
}
catch (Exception e)
{
}
}
Path.Combine(path, fileName);
try
{
File.WriteAllBytes(path, bytes);
}
catch (Exception ex)
{
}
return path;
}
I am at a bit of a loss on what to try next as to me it seems that I should have the necessary permissions to write a file to a folder on the device. I have also tried various locations to save to and methods of saving with the same result.
Thanks in advance
Upvotes: 0
Views: 822
Reputation: 74144
You are trying to write to a directory as you are throwing away the return value from Path.Combine
:
Path.Combine(path, fileName);
Try:
~~~
path = Path.Combine(path, fileName);
~~~
Upvotes: 2