博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2、如何解决xamarin没有相关教程的的指导贴
阅读量:5052 次
发布时间:2019-06-12

本文共 4664 字,大约阅读时间需要 15 分钟。

本篇文章主要在于解决xamarin相关文档偏少的问题。

最终的代码并不重要。重要的还是那种处理的方式

授人以渔

群里有群友讨论说需要读取安卓的 充电电流。这样的问题实际上在原生java有一堆。但是到了xamarin就一头懵逼不知道如何下手。

今天我主要讲解如何把别人有的东西转换为xamarin使用的。

1、首先百度 安卓 读取充电电流。 第一篇就是最成熟的 关于原生读取充电电流的文章。二话不说直接复制到xamarin中编辑修改。

http://blog.csdn.net/zhangyongfeiyong/article/details/53641809

2、替换掉相关的java语法 采用C#的语法。 java中的大部分类 都被封装为了java.Lang里面 仔细观看即可

下面显示 我翻译后的类

[Activity(Label = "AppGetElectricity", MainLauncher = true)]    public class MainActivity : Activity    {        private string getCurrent()        {            string result = "null";            try            {                Java.Lang.Class systemProperties = Java.Lang.Class.ForName("android.os.SystemProperties");                Java.Lang.Reflect.Method get = systemProperties.GetDeclaredMethod("get", Java.Lang.Class.FromType(typeof(Java.Lang.String)));                //Method get = systemProperties.getDeclaredMethod("get", String.class);                  string platName = new string(((Java.Lang.String)get.Invoke(null, "ro.hardware")).ToCharArray());                if (platName.StartsWith("mt") || platName.StartsWith("MT"))                {                    string filePath = "/sys/class/power_supply/battery/device/FG_Battery_CurrentConsumption";                    // MTK平台该值不区分充放电,都为负数,要想实现充放电电流增加广播监听充电状态即可                      result = "当前电流为:" + System.Math.Round(getMeanCurrentVal(filePath, 5, 0) / 10.0f) + "mA";                    result += ", 电压为:" + readFile("/sys/class/power_supply/battery/batt_vol", 0) + "mV";                }                else if (platName.StartsWith("qcom"))                {                    string filePath = "/sys/class/power_supply/battery/current_now";                    int current = Java.Lang.Math.Round(getMeanCurrentVal(filePath, 5, 0) / 10.0f);                    int voltage = readFile("/sys/class/power_supply/battery/voltage_now", 0) / 1000;                    // 高通平台该值小于0时电池处于放电状态,大于0时处于充电状态                      if (current < 0)                    {                        result = "充电电流为:" + (-current) + "mA, 电压为:" + voltage + "mV";                    }                    else                    {                        result = "放电电流为:" + current + "mA, 电压为:" + voltage + "mV";                    }                }            }            catch (Java.Lang.Exception e)            {                e.PrintStackTrace();            }            return result;        }        protected override void OnCreate(Bundle savedInstanceState)        {            base.OnCreate(savedInstanceState);            // Set our view from the "main" layout resource            SetContentView(Resource.Layout.Main);            FindViewById

这里面 还替换了 java原生冗长的一些写法。

这里面唯一麻烦点的就是关于java的反射比如我要反射String.Class  我这里替换为了 Java.Lang.Class.FromType(typeof(Java.Lang.String)) 

 最终真机的效果图

转载于:https://www.cnblogs.com/jasondun/p/8261068.html

你可能感兴趣的文章
网络爬虫Heritrix源码分析(一) 包介绍
查看>>
[svc]线上Iptables重启报错
查看>>
请尽可能详尽的解释ajax的工作原理
查看>>
yii2框架dropDownList的下拉菜单用法介绍
查看>>
c#截取两个指定字符串中间的字符串
查看>>
UDP基础-1
查看>>
康托展开了解一下
查看>>
通讯聊天工具(pingin)
查看>>
odoo10 高级视图
查看>>
IE 专有的事件驱动方法 Named Script
查看>>
hibernateTemplate.find或hibernateTemplate.save()执行操作没有反应,但是有sql语句
查看>>
SQL Server 查询性能优化——索引与SARG(一)
查看>>
到底还是中国人,这官话都一套一套的
查看>>
Java 排序(快排,归并)
查看>>
解析html
查看>>
linux日常管理-系统进程查看工具-ps
查看>>
HandlerThread&Looper&MessageQueue
查看>>
ROM的一种写法
查看>>
VIM Taglist + ctags
查看>>
supervisord
查看>>