本篇文章主要在于解决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, , ) / 10.0f) + "mA";
result += ", 电压为:" + readFile("/sys/class/power_supply/battery/batt_vol", ) + "mV";
}
else if (platName.StartsWith("qcom"))
{
string filePath = "/sys/class/power_supply/battery/current_now";
int current = Java.Lang.Math.Round(getMeanCurrentVal(filePath, , ) / 10.0f);
int voltage = readFile("/sys/class/power_supply/battery/voltage_now", ) / ;
// 高通平台该值小于0时电池处于放电状态,大于0时处于充电状态
if (current < )
{
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<Button>(Resource.Id.button1).Click += MainActivity_Click; ;
} private void MainActivity_Click(object sender, System.EventArgs e)
{
Toast.MakeText(this, getCurrent(), ToastLength.Long).Show();
} /**
* 获取平均电流值
* 获取 filePath 文件 totalCount 次数的平均值,每次采样间隔 intervalMs 时间
*/
private float getMeanCurrentVal(string filePath, int totalCount, int intervalMs)
{
float meanVal = 0.0f;
if (totalCount <= )
{
return 0.0f;
}
for (int i = ; i < totalCount; i++)
{
try
{
float f = readFile(filePath, );
meanVal += f / totalCount;
}
catch (Java.Lang.Exception e)
{
e.PrintStackTrace();
}
if (intervalMs <= )
{
continue;
}
try
{
Java.Lang.Thread.Sleep(intervalMs);
}
catch (Java.Lang.Exception e)
{
e.PrintStackTrace();
}
}
return meanVal;
} private int readFile(string path, int defaultValue)
{
try
{
string lines = System.IO.File.ReadAllText(path);
return int.Parse(lines);
//BufferedReader bufferedReader = new BufferedReader(new FileReader(
// path));
//int i = Integer.parseInt(bufferedReader.readLine(), 10);
//bufferedReader.close();
//return i;
}
catch (System.Exception localException)
{
}
return defaultValue;
} }

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

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

最终真机的效果图

2、如何解决xamarin没有相关教程的的指导贴的更多相关文章

  1. Xamarin.FormsShell基础教程(9)Shell相关类体系

    Xamarin.FormsShell基础教程(9)Shell相关类体系 在Shell中,最为主要的类是Shell类.Shell类实现了大多数应用程序所需的基本UI功能的页面.除此以外,常用的类还有Sh ...

  2. Xamarin Anroid开发教程之验证环境配置是否正确

    Xamarin Anroid开发教程之验证环境配置是否正确 经过前面几节的内容已经把所有的编程环境设置完成了,但是如何才能确定所有的一切都处理争取并且没有任何错误呢?这就需要使用相应的实例来验证,本节 ...

  3. Xamarin Anroid开发教程之下载安装Xamarin

    Xamarin Anroid开发教程之下载安装Xamarin Xamarin在过去安装时都会检查系统中是否安装了前面所提供的内容.而后来,Xamarin安装时只提供安装步骤,其它内容都需要读者自己下载 ...

  4. 树莓派VNC搭建相关教程+Ubuntu16.04连接vncserver灰屏问题!

    树莓派VNC搭建相关教程: 为了节省money,于是我决定用VNC界面来代替显示器,为后面做C++ Qt以及Python Qt开发打下基础,我别无选择!下面开始进入正题: 1-- 下载VNC-View ...

  5. 【运维技术】node项目使用strongloop进行部署相关教程

    node项目使用strongloop进行部署相关教程 安装strongloop 下载安装node 解压到路径完成安装 使用软链方式配置环境变量 添加cnpm的淘宝镜像源 安装node-gyp的模块依赖 ...

  6. Xamarin XAML语言教程构建ControlTemplate控件模板

    Xamarin XAML语言教程构建ControlTemplate控件模板 控件模板ControlTemplate ControlTemplate是从Xamarin.Forms 2.1.0开始被引入的 ...

  7. Xamarin XAML语言教程ContentView视图作为自定义视图的父类

    Xamarin XAML语言教程ContentView视图作为自定义视图的父类 自定义视图的父类:ContentView视图可以作为自定义视图的父类. [示例14-2]以下将自定义一个颜色视图.具体的 ...

  8. Xamarin XAML语言教程使用属性设置进度条的当前进度

    Xamarin XAML语言教程使用属性设置进度条的当前进度 在图12.19~12.21中我们看到的是没有实现加载的进度条,即进度条的当前进度为0,如果开发者想要修改当前进度,可以使用两种方式:一种是 ...

  9. Xamarin XAML语言教程Progress属性设置进度条进度

    Xamarin XAML语言教程Progress属性设置进度条进度 在图12.19~12.21中我们看到的是没有实现加载的进度条,即进度条的当前进度为0,如果开发者想要修改当前进度,可以使用两种方式: ...

随机推荐

  1. 2018.08.19 NOIP模拟 number(类数位dp)

    Number 题目背景 SOURCE:NOIP2015-SHY-10 题目描述 如果一个数能够表示成两两不同的 3 的幂次的和,就说这个数是好的. 比如 13 是好的,因为 13 = 9 + 3 + ...

  2. 带你快速进入.net core的世界(转)

    出处:http://www.cnblogs.com/zhaopei/p/netcore.html 阅读目录 vmware虚拟机安装 CentOS7.3安装 Windows的客户端软件 .NET Cor ...

  3. Django介绍(2)

    https://www.cnblogs.com/yuanchenqi/articles/5658455.html

  4. EF生成的SQL语句执行顺序问题。

    //实体被更改后,再做删除,EF只生成删除语句 //实体删除后再更改,EF报错 //添加语句会再,更改,删除后执行,更AddObject位置无关 //一个实体多个字段被改,只会生成一句update / ...

  5. spring + rs + RocketMQ 【精】

    cxf-rs-rocketmq 项目地址:见git │ pom.xml │ └─src ├─main │ ├─java │ │ └─cn │ │ └─zno │ │ ├─pojo │ │ │ Rece ...

  6. (最小生成树 Prim) Highways --POJ --1751

    链接: http://poj.org/problem?id=1751 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 1150 ...

  7. hdu 2845 Beans 2016-09-12 17:17 23人阅读 评论(0) 收藏

    Beans Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  8. oracle只导出触发器

    只要触发器,其他都不要 方法1:plsql develop调用exp:tools->export object—>trigger 方法2:select dbms_metadata.get_ ...

  9. 为上海莫大型重工企业提供基于TFS的软件研发流程管理培训

    这周,和微软公司的朋友一起,受上海莫大型重工企业的要求,为企业软件部门一个60多人的软件团队提供了为其2天的全流程培训,培训基于微软Team Foundation Server 2017(TFS 20 ...

  10. TFS支持移动设备,微软已经走出了第一步(手机上更新、查询工作项)

    TFS支持移动设备,微软已经走出了第一步! 从现在开始,你可以在手机浏览器上打开自己的VSTS团队项目,会看大手机版的工作项界面,你可以在手机设备上更新.查询工作项. 这是原生自带的,这些移动功能马上 ...