【发布时间】:2018-04-16 17:44:08
【问题描述】:
我正在尝试创建一个可以访问相机的 Xamarin 应用程序(我不需要存储任何拍摄的照片或任何东西,只需要能够通过单击按钮启动相机。)我使用的是 Android用于测试应用的设备。
我安装了 Xam.Plugin.Media 插件。我在 AndroidManifest 的 application-tag 中添加了以下内容:
<provider android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="file_paths"></meta-data>
</provider>
我在 Android 项目中创建了一个名为 xml 的资源下的新文件夹。我在 xml 文件夹中创建了一个名为 file_paths.xml 的新文件,并将以下内容放入该文件中:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-files-path name="my_images" path="Pictures" />
<external-files-path name="my_movies" path="Movies" />
</paths>
最后我将此代码添加到我的 MainPage.xaml.cs 文件中:
public void CameraClicked(object sender, EventArgs e) {
testAsync();
}
async void testAsync() {
await CrossMedia.Current.Initialize();
if (CrossMedia.Current.IsCameraAvailable && CrossMedia.Current.IsTakePhotoSupported) {
await DisplayAlert("Alert", "Camera available!", "OK");
var file = await CrossMedia.Current.TakePhotoAsync(new StoreCameraMediaOptions {
Directory = "Sample",
Name = "test.jpg"
});
}
else {
await DisplayAlert("Alert", "Camera unavailable!", ":(");
}
}
如果我运行上面的代码 - 不向清单或 xml 文件添加任何内容 - 它将显示消息“相机可用!”,因此该部分似乎工作正常。
但是,当我添加 file_paths.xml 文件时,我的应用程序在构建时崩溃了。我收到消息:
资源目录名无效:obj\Debug\res file_paths.xml "res file_paths.xml"。 demoApp_Xamarin.Android C:\Users\Peter\Desktop\Skola\demoAppar\Xamarin\demoApp_Xamarin\demoApp_Xamarin\demoApp_Xamarin.Android\aapt.exe
文件 file_paths.xml 的文件路径似乎不完整。好像缺少一个反斜杠。 (不过,我不知道如何解决它。或者即使这是实际问题。)
我还收到以下错误消息:
找不到类型或命名空间名称“App”(您是否缺少 using 指令或程序集引用?)
每当我创建一个名为 file_paths.xml 的文件时,无论我把它放在哪里,都会出现第二条消息。
【问题讨论】:
-
我的应用程序也遇到了同样的问题。尝试将
file_paths.xml的Build Action属性从Content更改为AndroidResource。这适用于我的测试应用程序,但不适用于我当前的项目。 -
@MuhammadKhan 谢谢你的建议。遗憾的是,它已经默认设置为 AndroidResource。
-
您是否尝试在新的空白应用程序中使用该插件?我的应用程序在运行时崩溃了,只有当
Build Action设置为AndroidResource时。 > 未处理的异常:Java.Lang.RuntimeException:无法获取提供程序 com.google.firebase.provider.FirebaseInitProvider:android.content.res.Resources$NotFoundException:发生无法找到资源 ID #0x7f07001a。即使我删除了 Firebase 代码,也会出现此异常。 -
@MuhammadKhan 是的。我首先在一个新应用程序中尝试了它。它崩溃了,让我很生气,所以我删除了它并创建了一个新的(第二个应用程序),但我得到了相同的结果。我想也许我第一次搞砸了,但显然不是。不确定这是否值得一提;我将两个项目都创建为“.NET 标准”。