#c# #android #xamarin #android-camera-intent
#c# #Android #xamarin #android-camera-intent
Вопрос:
Я запускаю одно и то же приложение на двух разных телефонах. Один телефон — ZTE Maven (Android 5.1), а другой — Google Pixel 2 (Android 10).
Телефон Android 5.1 автоматически сохраняет снимки, сделанные с помощью камеры (с помощью Intent), в галерею. Однако телефон Android 10 не сохраняет изображения в «Фото» (нет приложения «Галерея»).
Мое приложение использует Xamarin.Формы, и вот соответствующий код:
public class CameraService : ICameraService
{
public Task<Stream> TakePhotoAsync()
{
var dir = MainActivity.Instance.ApplicationContext.FilesDir;
var imageFile = new File(dir, $"{Guid.NewGuid()}.jpg");
MainActivity.Instance.PhotoPath = imageFile.Path;
var imageUri = FileProvider.GetUriForFile(MainActivity.Instance,
"com.(company).(appname).android.fileprovider", imageFile);
var intent = new Intent(MediaStore.ActionImageCapture);
intent.PutExtra(MediaStore.ExtraOutput, imageUri);
// Start the camera capture activity (resumes in MainActivity.cs)
MainActivity.Instance.StartActivityForResult(
intent, MainActivity.TakePhotoId);
// Save the TaskCompletionSource object as a MainActivity property
MainActivity.Instance.TakePhotoTaskCompletionSource = new TaskCompletionSource<Stream>();
// Return Task object
return MainActivity.Instance.TakePhotoTaskCompletionSource.Task;
}
}
Очевидно, что я заменил настоящие названия компаний и приложений на «(company)» и «(appname)».
Есть ли какая-либо причина, по которой эти телефоны или версии Android ведут себя по-разному с точки зрения сохранения изображений внутри? Могу ли я каким-либо образом определить, произойдет ли это автоматическое сохранение?
Комментарии:
1. Как обычно, вы должны сообщить в медиа-магазин о новом файле. Итак, позвольте вашему файлу быть отсканированным. Перезагрузка устройства тоже подойдет.
2. Возможно, изображение еще не было обновлено, вы могли бы попробовать вызвать
MediaStore.Images.Media.InsertImage
метод после того, как сделаете снимок.