C# Xamarin/Android-问题:从相机读取本地存储的照片-无读取权限
我正在尝试创建一个简单的测试应用程序,使用Xamarin在Android上拍照。我希望,当我让这个应用程序运行时,我会在我正在开发的真实应用程序中使用代码。我使用Xamarin的以下配方作为基础: 主要区别在于我需要本地存储图像,而不是存储在SD卡上。我能够成功地用Android模拟器拍摄照片。我可以使用ADB在文件结构中查看该文件,并可以在我的电脑上成功复制和打开该文件。但是,我无法在应用程序中访问该文件,可能是由于用户权限 请注意,我成功地创建了自己的.txt文件,并使用System.IO和Java.IO将它们读回 请检查以下代码。我的应用程序在使用System.IO.File.ReadAllText时崩溃,我无法访问路径/data/data/CameraAppDemo.CameraAppDemo/files/photo.jpg。。无论我尝试什么绝对路径、相对路径、uri,objBitmap总是空的 亚洲开发银行表示photo.jpg拥有-rwxrwx-权限,尽管我不能完全确定,但我认为这应该足够了 另一方面,可能意图仍然锁定photo.jpg?或者其他什么事情正在发生 最后一点,我使用System.IO.File.ReadAllText只是为了测试。我也尝试了流阅读器,但结果是一样的。此外,尽管我认为这一步是不必要的,但我在清单中启用了WriteExternalStoreC# Xamarin/Android-问题:从相机读取本地存储的照片-无读取权限,c#,java,android,mono,xamarin,C#,Java,Android,Mono,Xamarin,我正在尝试创建一个简单的测试应用程序,使用Xamarin在Android上拍照。我希望,当我让这个应用程序运行时,我会在我正在开发的真实应用程序中使用代码。我使用Xamarin的以下配方作为基础: 主要区别在于我需要本地存储图像,而不是存储在SD卡上。我能够成功地用Android模拟器拍摄照片。我可以使用ADB在文件结构中查看该文件,并可以在我的电脑上成功复制和打开该文件。但是,我无法在应用程序中访问该文件,可能是由于用户权限 请注意,我成功地创建了自己的.txt文件,并使用System.IO和
namespace CameraAppDemo
{
using System;
using System.Collections.Generic;
using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.Graphics;
using Android.OS;
using Android.Provider;
using Android.Widget;
using Java.IO;
using Environment = Android.OS.Environment;
using Uri = Android.Net.Uri;
[Activity(Label = "Camera App Demo", MainLauncher = true)]
public class MainActivity : Activity
{
private File _file;
private string _basePath;
private ImageView _imageView;
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
var objBitmap = BitmapFactory.DecodeFile(_file.AbsolutePath) ;
Console.WriteLine ("objBitmap = null : " + (objBitmap == null).ToString ());
var strOutput = System.IO.File.ReadAllText (FileManager.BasePath + "/photo.jpg");
Console.WriteLine (strOutput);
}
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
FileManager.SetupFolderStructure();
if (IsThereAnAppToTakePictures())
{
Button button = FindViewById<Button>(Resource.Id.myButton);
_imageView = FindViewById<ImageView>(Resource.Id.imageView1);
button.Click += TakeAPicture;
}
}
private bool IsThereAnAppToTakePictures()
{
Intent intent = new Intent(MediaStore.ActionImageCapture);
IList<ResolveInfo> availableActivities = PackageManager.QueryIntentActivities(intent, PackageInfoFlags.MatchDefaultOnly);
return availableActivities != null && availableActivities.Count > 0;
}
private void TakeAPicture(object sender, EventArgs eventArgs)
{
System.IO.Directory.Delete (FileManager.BasePath, true);
_basePath = FileManager.BasePath;
_file = new Java.IO.File (_basePath, "photo.jpg");
Intent intent = new Intent(MediaStore.ActionImageCapture);
intent.PutExtra(MediaStore.ExtraOutput, Uri.FromFile(_file));
StartActivityForResult(intent, 0);
}
}
}
//Part of the FileManager class:
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using Android.Graphics;
namespace CameraAppDemo
{
public class FileManager
{
public static string BasePath {
get {
var libraryPath = Environment.GetFolderPath (Environment.SpecialFolder.Personal);
if (Directory.Exists (libraryPath) == false) {
Directory.CreateDirectory (libraryPath);
}
return libraryPath;
}
}
}
}
这两种情况都返回False。我无法读取该文件,并且无法授予读取权限
有什么想法吗?这是故意的吗?我可以说出拍摄图像的目的,以使我具有阅读权限,还是有其他解决方法
如果一切都失败了,我希望通过先保存到SD卡,然后将文件复制到本地文件系统来解决这个问题。但这是我不愿做的事;我不能保证最终用户有SD卡,图片不应该被意外删除。你能把你的解决方案上传到某个地方吗?我可以看一看:谢谢你!虽然我不确定事情的工作方式,但我现在有了一个理论,即相机的意图,即内置相机应用程序成为照片的所有者,而不是测试应用程序本身,这就是测试应用程序无法访问照片的原因。我认为创建内容提供商可能是正确的做法,但我在解决方案的第二个项目中都没有成功。我的代码如下:我使用相同的xamarin示例尝试拍摄一张照片,然后在应用程序中显示它。我的问题是拍完照片并批准后。应用程序从不调用ActivityResult。
Console.WriteLine("Setting file :" + _file.SetReadable (true));
Console.WriteLine("Can read :" + _file.CanRead());