未找到与给定名称Xamarin Android匹配的资源
我试图在Xamarin.Forms中实现一个文件提供程序,但在加载我的文件路径文件时遇到问题。每当我尝试构建该应用程序时,都会出现以下错误: 未找到与给定名称(在“资源”处)匹配的资源 值“@xml/file\u路径”) 文件_paths.xml位于xml文件夹下的resources目录中。任何帮助都将不胜感激。以下是我的相关档案: Android清单:未找到与给定名称Xamarin Android匹配的资源,android,xamarin,xamarin.forms,xamarin.android,Android,Xamarin,Xamarin.forms,Xamarin.android,我试图在Xamarin.Forms中实现一个文件提供程序,但在加载我的文件路径文件时遇到问题。每当我尝试构建该应用程序时,都会出现以下错误: 未找到与给定名称(在“资源”处)匹配的资源 值“@xml/file\u路径”) 文件_paths.xml位于xml文件夹下的resources目录中。任何帮助都将不胜感激。以下是我的相关档案: Android清单: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" package="com.mycompany.myapp" android:versionName="1" android:installLocation="internalOnly">
<uses-sdk android:targetSdkVersion="26" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application android:icon="@drawable/advanced" android:label="FD CANNECT" android:windowSoftInputMode="adjustPan" android:descendantFocusability="afterDescendants" >
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.myapp.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
</application>
</manifest>
文件\u paths.xml
<?xml version="1.0" encoding="utf-8" ?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="downloads" path="downloads/" />
</paths>
MainActivity.cs
using Android.Provider;
using Android.Support.V4.Content;
using CAN2LAN.Droid;
using Java.Lang;
[assembly: Xamarin.Forms.Dependency(typeof(ShareIntent))]
namespace CAN2LAN.Droid
{
using Acr.UserDialogs;
using System.Linq;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
protected override void OnCreate(Bundle bundle)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
UserDialogs.Init(this);
base.OnCreate(bundle);
global::Xamarin.Forms.Forms.Init(this, bundle);
Downloaded();
Android.Runtime.AndroidEnvironment.UnhandledExceptionRaiser += (sender, args) => {
args.Handled = false;
};
this.LoadApplication(new App());
}
public void Downloaded() {
CrossDownloadManager.Current.PathNameForDownloadedFile = new System.Func<IDownloadFile, string>(file => {
string fileName = Android.Net.Uri.Parse(file.Url).Path.Split('/').Last();
return System.IO.Path.Combine(Environment.GetExternalStoragePublicDirectory(Environment.DirectoryDownloads).AbsolutePath, fileName);
});
}
}
public class ShareIntent : IShareable {
public void OpenShareIntent(string fileName) {
OpenFile(fileName);
}
public void OpenFile(string fileName) {
string auth = "com.myapp.fileprovider";
System.Diagnostics.Debug.WriteLine("Auth is " + auth);
string mimeType = Android.Webkit.MimeTypeMap.Singleton.GetMimeTypeFromExtension(Android.Webkit.MimeTypeMap.GetFileExtensionFromUrl(fileName.ToLower()));
if (mimeType == null)
mimeType = "*/*";
Android.Net.Uri uri = null;
System.Diagnostics.Debug.WriteLine("Created authentication and mime type");
var file = new Java.IO.File(System.IO.Path.Combine(Environment.GetExternalStoragePublicDirectory(Environment.DirectoryDownloads).AbsolutePath, fileName));
System.Diagnostics.Debug.WriteLine("File size is " + file.TotalSpace);
System.Diagnostics.Debug.WriteLine("Froms context is " + Forms.Context);
try {
uri = FileProvider.GetUriForFile(Forms.Context, auth, file);
}
catch (Exception e)
{
System.Diagnostics.Debug.WriteLine("Exception " + e);
}
System.Diagnostics.Debug.WriteLine("URI is " + uri);
Intent intent = new Intent(Intent.ActionView);
intent.SetDataAndType(uri, mimeType);
intent.AddFlags(ActivityFlags.GrantReadUriPermission | ActivityFlags.GrantWriteUriPermission);
intent.AddFlags(ActivityFlags.NewTask | ActivityFlags.NoHistory);
System.Diagnostics.Debug.WriteLine("Intent is created");
// Trying to allow writing to the external app ...
var resInfoList = Forms.Context.PackageManager.QueryIntentActivities(intent, PackageInfoFlags.MatchDefaultOnly);
foreach (var resolveInfo in resInfoList) {
var packageName = resolveInfo.ActivityInfo.PackageName;
Forms.Context.GrantUriPermission(packageName, uri, ActivityFlags.GrantWriteUriPermission | ActivityFlags.GrantPrefixUriPermission | ActivityFlags.GrantReadUriPermission);
}
System.Diagnostics.Debug.WriteLine("We have created res info lsit");
try
{
System.Diagnostics.Debug.WriteLine("We are about to show the intent");
Forms.Context.StartActivity(intent);
System.Diagnostics.Debug.WriteLine("We ahe shwoed the intent");
}
catch (Exception e)
{
System.Diagnostics.Debug.WriteLine("We have caugth an exception " + e);
}
}
}
}
使用Android.Provider;
使用Android.Support.V4.Content;
使用CAN2LAN.Droid;
使用Java.Lang;
[程序集:Xamarin.Forms.Dependency(typeof(ShareIntent))]
名称空间CAN2LAN.Droid
{
使用Acr.UserDialogs;
使用System.Linq;
使用Xamarin.Forms;
使用Xamarin.Forms.Platform.Android;
全局::Xamarin.Forms.Platform.Android.formsappactivity
{
创建时受保护的覆盖无效(捆绑包)
{
TabLayoutResource=Resource.Layout.Tabbar;
ToolbarResource=Resource.Layout.Toolbar;
UserDialogs.Init(this);
base.OnCreate(bundle);
全局::Xamarin.Forms.Forms.Init(这个,bundle);
下载();
Android.Runtime.AndroidEnvironment.UnhandledExceptionRaiser+=(发件人,参数)=>{
args.Handled=false;
};
此.LoadApplication(新应用程序());
}
已下载的公共文件(){
CrossDownloadManager.Current.PathNameForDownloadedFile=new System.Func(文件=>{
string fileName=Android.Net.Uri.Parse(file.Url).Path.Split('/').Last();
返回System.IO.Path.Combine(Environment.GetExternalStoragePublicDirectory(Environment.DirectoryDownloads).AbsolutePath,文件名);
});
}
}
公共类ShareIntent:IShareable{
public void OpenShareIntent(字符串文件名){
OpenFile(文件名);
}
公共void OpenFile(字符串文件名){
string auth=“com.myapp.fileprovider”;
System.Diagnostics.Debug.WriteLine(“Auth是”+Auth);
字符串mimeType=Android.Webkit.MimeTypeMap.Singleton.GetMimeTypeFromExtension(Android.Webkit.MimeTypeMap.GetFileExtensionFromUrl(fileName.ToLower());
if(mimeType==null)
mimeType=“*/*”;
Android.Net.Uri=null;
System.Diagnostics.Debug.WriteLine(“创建的身份验证和mime类型”);
var file=new Java.IO.file(System.IO.Path.Combine(Environment.GetExternalStoragePublicDirectory(Environment.DirectoryDownloads).AbsolutePath,fileName));
System.Diagnostics.Debug.WriteLine(“文件大小为”+File.TotalSpace);
System.Diagnostics.Debug.WriteLine(“Froms上下文是”+Forms.context);
试一试{
uri=FileProvider.GetUriForFile(Forms.Context,auth,file);
}
捕获(例外e)
{
System.Diagnostics.Debug.WriteLine(“异常”+e);
}
System.Diagnostics.Debug.WriteLine(“URI是”+URI);
意图=新意图(Intent.ActionView);
SetDataAndType(uri,mimeType);
intent.AddFlags(ActivityFlags.GrantReadUriPermission | ActivityFlags.GrantWriteUriPermission);
intent.AddFlags(ActivityFlags.NewTask | ActivityFlags.NoHistory);
System.Diagnostics.Debug.WriteLine(“创建意图”);
//正在尝试允许写入外部应用程序。。。
var resinfo list=Forms.Context.PackageManager.QueryInputActivities(intent,PackageInfo.MatchDefaultOnly);
foreach(ResInfo列表中的变量resolveInfo){
var packageName=resolveInfo.ActivityInfo.packageName;
Forms.Context.GrantUriPermission(packageName、uri、ActivityFlags.GrantWriteUriPermission | ActivityFlags.GrantPrefixUriPermission | ActivityFlags.GrantUriPermission);
}
System.Diagnostics.Debug.WriteLine(“我们已经创建了res-info-lsit”);
尝试
{
System.Diagnostics.Debug.WriteLine(“我们即将展示意图”);
形式。语境。起始触觉(意图);
System.Diagnostics.Debug.WriteLine(“我们放弃了意图”);
}
捕获(例外e)
{
System.Diagnostics.Debug.WriteLine(“我们发现了一个异常”+e);
}
}
}
}
我没有尝试过,但这可能是问题所在。
下面是您的文件_paths.xml文件出现的问题。您提供的名称和路径都是相同的
name="downloads" path="downloads/"
这些可能不同
不是这个
<?xml version="1.0" encoding="utf-8"?>
<paths>
<files-path
name="files"
path="external_files"/>
</paths>
或
有关更多信息,请访问
编辑1
检查file_paths.xml file build action,它应该是AndroidResource,我还没有尝试过,但这可能是问题所在。 下面是您的文件_paths.xml文件出现的问题。您提供的名称和路径都是相同的
name="downloads" path="downloads/"
这些可能不同
不是这个
<?xml version="1.0" encoding="utf-8"?>
<paths>
<files-path
name="files"
path="external_files"/>
</paths>
或
有关更多信息,请访问
编辑1
检查file_paths.xml file build action,它应该是AndroidResource我相信这个问题的真正答案是@bradykey提到的 “将生成操作更改为AndroidResource”
可以通过右键单击文件并选择“属性”来执行此操作。您可以在这里选择构建操作。我相信@bradykey提到了这个问题的真正答案 “将生成操作更改为AndroidResource”
可以通过右键单击文件并选择“属性”来执行此操作。您可以在这里选择构建操作。确保您的XML文件都是小写的。这为我解决了问题。请确保您的XML文件都是小写的。这为我解决了问题。我将文件_paths.xml更改为您的代码,但仍然收到相同的错误。我还尝试重新启动Visual Studio并重新启动我的计算机。不要根据我更改根据你更改。文件名应为