У меня уже есть некоторый опыт работы с C #, но я новичок в Android-Development и хотел начать с простого приложения проекта, которое может создать новый каталог с файлом на внешнем хранилище ("/ storage / emulated /0 / "[Android.OS.Environment.ExternalStorageDirectory.AbsolutePath]) и прочитайте его.
В документации я прочитал, что в более новых SDK недостаточно упомянуть разрешения (в данном случае" ANDROID.PERMISSION.WRITE_EXTERNAL_STORAGE ") в AndroidManifest.xml.Поэтому я добавил метод запроса их во время выполнения.
Моя проблема в том, что эмулятор [Android 8.1 API 27] (и мой телефон с отладкой по USB [Android 8.0]) не открывает диалоговое окно разрешения, еслиЯ запрашиваю "Manifest.Permission.WriteExternalStorage".Если я использую свой код для запроса «Manifest.Permission.ReadExternalStorage», появится диалоговое окно, вы можете принять и отклонить его, и действие отобразится в настройках.
Сначала я попытался написать свой собственный код в документации (https://docs.microsoft.com/de-de/xamarin/android/platform/files/external-storage),, который не открывает диалог. Я пытался позволить NuGet-пакету (Karamunting.Android.PermissionManager) управлять запросом, та же проблема: он просто запросил разрешение на чтение, а не на запись. Теперь яЯ использую код, который я скопировал из проекта GitHub (https://github.com/xamarin/monodroid-samples/tree/master/LocalFiles),, но проблема все та же.
Этот метод должен запрашивать разрешение
const int RC_WRITE_EXTERNAL_STORAGE_PERMISSION = 1000;
static readonly string[] PERMISSIONS_TO_REQUEST = { Manifest.Permission.WriteExternalStorage };
bool RequestExternalStoragePermissionIfNecessary(int requestCode)
{
if (Android.OS.Environment.MediaMounted.Equals(Android.OS.Environment.ExternalStorageState))
{
if (CheckSelfPermission(Manifest.Permission.WriteExternalStorage) == Permission.Granted)
{
Log.Debug(TAG, "Neccessary permissions granted");
return false;
}
Log.Debug(TAG, "Permissions denied --> requesting");
if (ShouldShowRequestPermissionRationale(Manifest.Permission.WriteExternalStorage))
{
Snackbar.Make(FindViewById(Android.Resource.Id.Content),
Resource.String.write_external_permissions_rationale,
Snackbar.LengthIndefinite)
.SetAction(Resource.String.ok, delegate { RequestPermissions(PERMISSIONS_TO_REQUEST, requestCode); });
}
else
{
RequestPermissions(PERMISSIONS_TO_REQUEST, requestCode);
}
return true;
}
Log.Warn(TAG, "External storage is not mounted; cannot request permission");
return true;
}
Он называетсяпо нажатию кнопки, но я также пытался использовать его в методе OnCreate ()
bool useIntern = RequestExternalStoragePermissionIfNecessary(RC_WRITE_EXTERNAL_STORAGE_PERMISSION);
Я также упомянул разрешения в AndroidManifest
<uses-sdk android:minSdkVersion="23" android:targetSdkVersion="27" />
<uses-permission android:name="ANDROID.PERMISSION.WRITE_EXTERNAL_STORAGE" />
Я ожидаю, чтоприложение будет проверять при запуске / нажатии кнопки, если разрешение предоставлено (оно проверяет разрешение и пишет в консоли «Разрешения запрещены -> запрашивает»).
НоПосле этого приложение должно отобразить диалог «Разрешить приложению […] на вашем устройстве?- Запретить - разрешить ". Это не происходит, если я запрашиваю разрешение на запись, но происходит, если я запрашиваю чтение.
Спасибо за любую помощь в Advance
Phil