Xamarin Android中如何正确转换获取MandatoryStreamCombination数组?
Xamarin Android获取MandatoryStreamCombination列表的正确类型转换
在Xamarin Android中,直接将CameraCharacteristics.ScalerMandatoryStreamCombinations的返回值强制转换为MandatoryStreamCombination[]、Java.Lang.Object[]或单个MandatoryStreamCombination都会报错,原因是Xamarin对Java数组的绑定采用了专用包装类型,而非直接映射为C#数组。
正确转换方式
你需要先将返回值转换为Android.Runtime.JavaArray<MandatoryStreamCombination>,再转换为C#数组:
var manager = (CameraManager?)Application.Context.GetSystemService(Context.CameraService); var cameraId = "0"; var characteristics = manager.GetCameraCharacteristics(cameraId); // 先转为Xamarin的Java数组包装类型 var javaArray = characteristics.Get(CameraCharacteristics.ScalerMandatoryStreamCombinations) as Android.Runtime.JavaArray<MandatoryStreamCombination>; // 转换为C#可直接操作的数组 var mandatoryCombinations = javaArray?.ToArray<MandatoryStreamCombination>();
补充说明
Android.Runtime.JavaArray<T>是Xamarin用来封装Java原生数组的类型,对应Android官方文档中提到的MandatoryStreamCombination[]- 如果不需要完整数组,也可以直接遍历
JavaArray<T>实例:if (javaArray != null) { foreach (var combination in javaArray) { // 处理每个MandatoryStreamCombination对象 } }
内容的提问来源于stack exchange,提问作者Softlion
相关产品推荐
相关产品推荐

