大佬教程收集整理的这篇文章主要介绍了拒绝访问路径 Xamarin 表单,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试将我的 db 文件复制到内部存储根目录/文档。我的代码在 AndroID 9 之前运行良好,但在它之后我收到错误“System.UnauthorizedAccessException:访问路径”/storage/emulated/0/documents/FruitsApp/BACkup/Fruits.db_2021-06-28 12 :20:20" 被拒绝" 我尝试了很多方法来复制所有在 AndroID 9 之前都可以工作的方法,但在它之后我遇到了上述错误。我正在分享我的所有代码。提前致谢。
----复制代码
Java.IO.file mediaStorageDir = new Java.IO.file(AndroID.os.Environment.GetExternalStoragePublicDirectory(AndroID.os.Environment.Directorydocuments) + path);
if (!mediaStorageDir.Exists())
{
var tt = mediaStorageDir.Mkdirs();
if (mediaStorageDir.Mkdirs() == falsE)
{
var fail = "Failed to create";
}
}
var directoryPath = mediaStorageDir.absolutePath;
////////--this way to create folder is working till andorID 9
//var PathExists = Directory.Exists(directoryPath);
//if (PathExists ==falsE)
//{
// Directory.CreateDirectory(directoryPath);
//}
var dbPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal),"Fruits.db");
fileInfo file = new fileInfo(dbPath);
var dbname = file.name;
var fullfilename = String.Concat("/",dbname + "_",Global.CurrentdatetiR_191_11845@e());
var newpath = String.Format("{0}{1}",directoryPath,fullfileName);
//////--- First way copy file from source to desTination is working tille androID 9
//using (fileStream sourceStream = System.IO.file.open(dbPath,fileMode.open,fileAccess.Read,fileShare.ReaDWritE))
//using (fileStream desTinationStream = System.IO.file.Create(newpath))
//{
// sourceStream.copyToAsync(desTinationStream);
//}
//////--- 2nd way copy file from source to desTination is working tille androID 9
byte[] dbfile = System.IO.file.ReadAllBytes(dbPath);
System.IO.file.WriteallBytes(newpath,dbfilE);
//////--- 3rd way copy file from source to desTination is working tille androID 9
//file.copyTo(newpath);
我尝试了 3 种方法将文件从源复制到另一个所有方法都可以工作到 androID 9,但在 androID 9 之后不起作用。
--AndroID 清单文件
<?xml version="1.0" enCoding="utf-8"?>
<manifest xmlns:androID="http://scheR_191_11845@as.androID.com/apk/res/androID" androID:versionCode="1"
androID:versionname="1.0" package="com.NewWave.FruitApp" androID:installLOCATIOn="auto">
<uses-sdk androID:minSdkVersion="23" androID:targetSdkVersion="30" />
<application androID:requestLegacyExternalStorage="true" androID:label="FruitApp"
androID:theme="@style/Maintheme"></application>
<uses-permission androID:name="androID.permission.ACCESS_NETWORK_STATE" />
<uses-permission androID:name="androID.permission.Call_PHONE" />
<uses-permission androID:name="androID.permission.SEND_SMS" />
<uses-permission androID:name="androID.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission androID:name="androID.permission.READ_EXTERNAL_STORAGE"
androID:maxsdkVersion="29" />
<uses-permission androID:name="androID.permission.ACCESS_MEDIA_LOCATION" />
<!--<uses-permission androID:name="androID.permission.READ_EXTERNAL_STORAGE" />-->
</manifest>
我有一个 SQLite 数据库保存在我手机的内部存储器中,在一个名为 sqlite 的文件夹中创建的文件夹中。我在权限和路径方面遇到了麻烦。我是这样解决的:
private readonly sqliteAsyncConnection _conn;
public LocalContext()
{
// Create directory for sqlite
Directory.CreateDirectory(Path.Combine("/storage/emulated/0/","sqlite"));
String dbPath = Path.Combine(
"/storage/emulated/0/sqlite","ventaMovil.db");
_conn = new sqliteAsyncConnection(dbPath);
}
在调用我的 LocalContext 之前,我会检查您是否具有写入权限:
private async Task<bool> checkPermissions()
{
var status = await _permissionservice.checkAndrequestPermissionAsync(new Permissions.StorageWrite());
if (status != PermissionStatus.Granted)
{
await App.Current.MainPage.DisplayAlert("Error","You do not have wriTing permissions","Okay");
return false;
}
return true;
}
对于我使用 Xamarin Essentials 的权限:
public class Permissionservice : IPermissionservice
{
public async Task<PermissionStatus> checkAndrequestPermissionAsync<T>(T permission) where T : Permissions.basePermission
{
var status = await permission.checkStatusAsync();
if (status != PermissionStatus.Granted)
{
status = await permission.requestAsync();
}
return status;
}
}
在 Android Manifest 中,我有这两个:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
以上是大佬教程为你收集整理的拒绝访问路径 Xamarin 表单全部内容,希望文章能够帮你解决拒绝访问路径 Xamarin 表单所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。