Android 12修改默认相机或强制Xamarin应用使用Open Camera方法
解决Xamarin MediaPlugin在Android 12下的相机选择及内存卡顿问题
一、强制MediaPlugin使用Open Camera
MediaPlugin底层靠Android Intent调用相机应用,Android 12对隐式Intent的过滤规则更严格,导致之前的应用选择弹窗消失。你可以通过指定Open Camera的包名强制调用它,步骤如下:
- 先确认Open Camera已安装(包名通常为
net.sourceforge.opencamera):
var packageManager = Android.App.Application.Context.PackageManager; try { packageManager.GetPackageInfo("net.sourceforge.opencamera", 0); // 存在Open Camera,可继续下一步 } catch (PackageManager.NameNotFoundException) { // 提示用户先安装Open Camera }
- 替换默认的
TakePhotoAsync,用显式Intent指定Open Camera:
// 生成存储照片的文件路径 var imageFile = new Java.IO.File(GetExternalFilesDir(Android.OS.Environment.DirectoryPictures), $"pic_{DateTime.Now.Ticks}.jpg"); var cameraIntent = new Intent(MediaStore.ActionImageCapture); // 指定Open Camera包名 cameraIntent.SetPackage("net.sourceforge.opencamera"); cameraIntent.PutExtra(MediaStore.ExtraOutput, Android.Net.Uri.FromFile(imageFile)); // 启动相机并等待结果 StartActivityForResult(cameraIntent, 1001);
- 在
OnActivityResult中处理拍摄完成的照片:
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data) { base.OnActivityResult(requestCode, resultCode, data); if (requestCode == 1001 && resultCode == Result.Ok) { var photoPath = imageFile.AbsolutePath; // 后续处理:显示、上传等 // 主动释放内存 GC.Collect(); } }
二、修改Android 12系统默认相机为Open Camera
这是系统层面的设置,操作步骤如下:
- 打开手机「设置」应用
- 进入「应用」→「默认应用」(不同厂商路径略有差异:小米为「应用设置」→「默认应用」;华为为「应用和服务」→「默认应用」)
- 找到「相机」选项,点击后会列出所有已安装的相机应用
- 选择「Open Camera」,即可将其设为系统默认相机
额外提示:缓解内存卡顿
不管用哪种方案,拍摄大量照片后建议:
- 对照片进行压缩处理,避免加载原始大尺寸图片
- 用完Bitmap等资源后立即回收,避免内存泄漏
- 避免一次性持有多个图片对象,及时释放无用资源
内容的提问来源于stack exchange,提问作者Ins App
相关产品推荐
相关产品推荐

