You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 12修改默认相机或强制Xamarin应用使用Open Camera方法

解决Xamarin MediaPlugin在Android 12下的相机选择及内存卡顿问题

一、强制MediaPlugin使用Open Camera

MediaPlugin底层靠Android Intent调用相机应用,Android 12对隐式Intent的过滤规则更严格,导致之前的应用选择弹窗消失。你可以通过指定Open Camera的包名强制调用它,步骤如下:

  1. 先确认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
}
  1. 替换默认的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);
  1. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 14:35:51