2、如何解决xamarin没有相关教程的的指导贴
本篇文章主要在于解决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没有相关教程的的指导贴的更多相关文章
- Xamarin.FormsShell基础教程(9)Shell相关类体系
Xamarin.FormsShell基础教程(9)Shell相关类体系 在Shell中,最为主要的类是Shell类.Shell类实现了大多数应用程序所需的基本UI功能的页面.除此以外,常用的类还有Sh ...
- Xamarin Anroid开发教程之验证环境配置是否正确
Xamarin Anroid开发教程之验证环境配置是否正确 经过前面几节的内容已经把所有的编程环境设置完成了,但是如何才能确定所有的一切都处理争取并且没有任何错误呢?这就需要使用相应的实例来验证,本节 ...
- Xamarin Anroid开发教程之下载安装Xamarin
Xamarin Anroid开发教程之下载安装Xamarin Xamarin在过去安装时都会检查系统中是否安装了前面所提供的内容.而后来,Xamarin安装时只提供安装步骤,其它内容都需要读者自己下载 ...
- 树莓派VNC搭建相关教程+Ubuntu16.04连接vncserver灰屏问题!
树莓派VNC搭建相关教程: 为了节省money,于是我决定用VNC界面来代替显示器,为后面做C++ Qt以及Python Qt开发打下基础,我别无选择!下面开始进入正题: 1-- 下载VNC-View ...
- 【运维技术】node项目使用strongloop进行部署相关教程
node项目使用strongloop进行部署相关教程 安装strongloop 下载安装node 解压到路径完成安装 使用软链方式配置环境变量 添加cnpm的淘宝镜像源 安装node-gyp的模块依赖 ...
- Xamarin XAML语言教程构建ControlTemplate控件模板
Xamarin XAML语言教程构建ControlTemplate控件模板 控件模板ControlTemplate ControlTemplate是从Xamarin.Forms 2.1.0开始被引入的 ...
- Xamarin XAML语言教程ContentView视图作为自定义视图的父类
Xamarin XAML语言教程ContentView视图作为自定义视图的父类 自定义视图的父类:ContentView视图可以作为自定义视图的父类. [示例14-2]以下将自定义一个颜色视图.具体的 ...
- Xamarin XAML语言教程使用属性设置进度条的当前进度
Xamarin XAML语言教程使用属性设置进度条的当前进度 在图12.19~12.21中我们看到的是没有实现加载的进度条,即进度条的当前进度为0,如果开发者想要修改当前进度,可以使用两种方式:一种是 ...
- Xamarin XAML语言教程Progress属性设置进度条进度
Xamarin XAML语言教程Progress属性设置进度条进度 在图12.19~12.21中我们看到的是没有实现加载的进度条,即进度条的当前进度为0,如果开发者想要修改当前进度,可以使用两种方式: ...
随机推荐
- 2018.09.21 codeforces1051D. Bicolorings(线性dp)
传送门 sb线性DP. f[i][j][0/1/2/3]f[i][j][0/1/2/3]f[i][j][0/1/2/3]表示前i列j个连通块且第i列状态为00/01/10/11时的方案总数. 这个显然 ...
- 2018.09.16 loj#10243. 移棋子游戏(博弈论)
传送门 题目中已经给好了sg图,直接在上面跑出sg函数即可. 最后看给定点的sg值异或和是否等于0就判好了. 代码: #include<bits/stdc++.h> #define N 2 ...
- (字符串处理)Fang Fang -- hdu -- 5455 (2015 ACM/ICPC Asia Regional Shenyang Online)
链接: http://acm.hdu.edu.cn/showproblem.php?pid=5455 Fang Fang Time Limit: 1500/1000 MS (Java/Others) ...
- Lucene.net 性能《第八篇》
一.IndexReader性能分析 IndexReader完成了打开所有索引文件和提供底层reader API等繁重的工作,而IndexSearch则要简单得多.由于打开一个IndexReader需要 ...
- Spring MVC 的@RequestParam注解和request.getParameter("XXX")
在SpringMVC后台控制层获取参数的方式主要有两种,一种是request.getParameter("name"),另外一种是用注解@RequestParam直接获取.这里主要 ...
- 基于Maven的S2SH(Struts2+Spring+Hibernate)框架搭建
1. 前言 基于Maven的开发方式开发项目已经成为主流.Maven能很好的对项目的层次及依赖关系进行管理.方便的解决大型项目中复杂的依赖关系.S2SH(Struts2+Spring+Hibernat ...
- 高并发Web
hadoop适合处理分布式集群系统,本身是支持高速并发海量数据的写入和读取的.解决大量用户并发访问的方案有很多,给你个千万pv的参考方案:1)架构中直接引入软件名称的模块,是个人推荐使用的,如Hapr ...
- 设计模式之命令模式(Command Pattern)
一.什么是命令模式? 命令模式,封装了方法调用细节,以解耦请求者与执行者,具体流程如下: 1.从请求者(客户)的角度看 请求者(客户)发出请求 -> 调用者(系统)构造命令对象封装请求 -> ...
- 【NumberValidators】增值税发票代码验证
同大陆身份证验证一样,该部分是按照国家增值税发票代码的定制规则,进行发票代码验证,如果需要查验发票信息是否正确,应该通过第三方接口(大约一毛钱查验一次),或者直接上国家税务总局全国增值税发票查验平台进 ...
- 开源项目之ASP.NET Core + Vue.js 的前后端分离的通用后台管理系统框架
年前看了这个开源项目感觉很不错,这个小项目对于传统的.net 开发人员,想做技术提升是一个很不错的参考案例. 开源项目演示地址:https://dnczeus.codedefault.com/logi ...