我试图在Xamarin实现一个文件提供程序。窗体,我有一个问题加载我的文件路径文件。每当我试图构建该应用程序,我得到以下错误:
没有找到与给定名称匹配的资源(在“资源”处,值为“@xml/file_paths”)
该文件包含多个路径。xml文件位于xml文件夹下的resources目录中。任何帮助都将不胜感激。以下是我的相关档案:
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>
文件路径。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>
主要活动。反恐精英
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);
}
}
}
}
确保XML文件都是小写的。那帮我修好了。
我没有试过,但这可能是个问题。您的文件路径似乎有问题。xml文件。你在说出你的名字
name="downloads" path="downloads/"
这些可能不同
要么是这个
<?xml version="1.0" encoding="utf-8"?>
<paths>
<files-path
name="files"
path="external_files"/>
</paths>
或
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="."/>
<files-path name="files" path="."/>
</paths>
欲了解更多信息,您可以访问此
编辑1
检查文件路径。xml文件生成操作,它应该是AndroidResource
当我尝试在Android Studio中启动我的应用程序时,它会产生如下3个错误: 错误:(3)检索项的父项时出错:找不到与给定名称“Android:TextApparance.Material.Widget.Button.Borderless.Colored”匹配的资源。 com.android.ide.common.Process.processException:org.gradle.Pro
平台:4.3 我是一个Android新手,非常感谢!
AndroidManifest。xml 我正在使用Android Studio(非gradle项目),所以没有以前的答案对我有帮助。 以我的风格。xml我从上的标题中得到错误
我想应用像显示为。我知道它现在是私有样式,我不能将其作为父样式。 我该怎么做才能将这种风格融入我的DialogFragment? (我的目标是API 15,也许我想minSdk API 12)。 这向我报告了一个错误(家长,就像我读到的,它现在是私有的): 未找到与给定名称匹配的资源。 我只是读到必须“复制”风格的项目,但我没有发现它在哪里? 谁能帮帮我吗?我需要将该样式“克隆”到我的自定义样式。
我找到了这个链接并尝试应用相同的解决方案,但它不起作用,我仍然得到相同的错误 有人能帮忙吗?