首页 文章 精选 留言 我的

精选列表

搜索[AI录音卡],共10002篇文章
优秀的个人博客,低调大师

Python运用蒙特洛算法模拟植物生长

(细胞二次分裂呈现对称分布) 细胞到生物、胚胎生长曲线、发展模式是随意形成的吗?为什么大多数人都是两只眼睛,很少出现三眼神童?我相信分形数学的进化一定会重新揭开生命的秘密。就像一把开启潘多拉的魔盒的钥匙,也许有天我们的宇宙、DNA组成结构,一个智慧生命社会的生长、演化、发展和兴衰均可以由一个或者数个简洁流畅的数学公式进行模拟和预言,我们现在就可以是一个正在不断迭代计算的公式呢?亚历山大图书馆和研究院的建立,从古代至今人们不断努力试图对宇宙万物表面看似毫无规律可循的各种形态的随机性做概括。隐匿在表面下的密码。科幻小说中调侃的“宇宙终极答案是43”不再是个玩笑。 (达芬奇人体图对称分布) 细胞二次分裂和人体呈现对称分布,但山川,水浪,植物形态属于非对称分布,是否有事物不遵循数学法则?其实万物皆有数,生命发展是遵循一定规律的,可称之为算法。 下

优秀的个人博客,低调大师

CentOS修改eth0网的名字

当虚拟机复制粘贴后,网卡名,就变成了ens33这个网卡名称了,所以想改成eth0的网卡名称,主要步骤有1、新建网卡配置脚本(ifcfg-eth0)2、修改grub 3、重新建立grub 4、重启网卡,虽然在这过程中,可能还会遇到网卡没有网的情况,那就菊花疼了 复制虚拟机后的网卡名称 网卡名称需要修改为eth0格式的 修改网卡脚本 到网卡配置目录,我看到了,我的 网卡配置脚本是ifcfg-ens33,原来的配置文件的网卡 的脚本, cd /etc/sysconfig/network-scripts/ ls #查看网卡配置的脚本 DEVICE和NAME还是以前的,需要修改为我们该成的网卡eth0,如果更改不了文件,需要切换为管理员,然后打开文件 su root 复制网卡文件到ifcfg-eth0 复制网卡配置文件 #移动操作 mv /etc/sysconfig/network-scripts/ifcfg-enp0s3 /etc/sysconfig/network-scripts/ifcfg-eth0 #复制 cp /etc/sysconfig/network-scripts/ifcfg-enp0s3 /etc/sysconfig/network-scripts/ifcfg-eth0 修改grub文件 修改grub配置文件,在rhgb quiet中添加:net.ifnames=0 biosdevname=0 vi /etc/default/grub 修改后的文件 重新建立grub文件 grub2-mkconfig -o /boot/grub2/grub.cfg 重启服务器 #重启服务器 reboot #查看网卡信息 ifconfig -a 本宝宝的网卡配置有问题啊 配置动态获取ip TYPE="Ethernet" BOOTPROTO="dhcp" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" NAME="eth0" UUID="30441465-3d49-4265-80ee-298c3f246497" DEVICE="eth0" ONBOOT="yes" PEERDNS="yes" PEERROUTES="yes" IPV6_PEERDNS="yes" IPV6_PEERROUTES="yes" IPV6_PRIVACY="no" 重启网卡 #重启网卡 service network restart #当出现了下面失败的信息,需要查看日志 cat /var/log/messages | grep network 无法获取到链接 错误问题 是没法获取到ip,所以可能是我的NAT配置错误了 还原虚拟机NAT 还原 网卡配置信息 网卡加载好了,不过淡腾的是还是没能访问外网,菊花藤啊

优秀的个人博客,低调大师

Android 顿优化 3 布局优化 工具 Hierarchy Viewer

欲善其事, 先利其器. 分析布局, 就不得不用到Hierarchy Viewer了. 本文工具使用皆以GithubApp的详情界面RepoDetailActivity为例说明. 为了不影响阅读体验, 对应的布局文件activity_repo_detail.xml的代码放在文末 1, Hierarchy Viewer怎么用 Hierarchy发音 [美: 'haɪərɑrki] [英: 'haɪərɑːkɪ] 层次结构的意思. 之前一直念不顺这个单词Hierarchy, 就简称为H Viewer了. 下文就这么简称吧. 如官网描述, H Viewer是用来分析调试和优化我们的UI的一个图形化工具. 它会展示当前界面的View层级. 1.1 启用H Viewer 比较早接触Android开发的同学可能知道, H Viewer只能在root过的机器才能使用. 主要是在没有root过的机器中view server这个服务是没有开启的. H Viewer就无法连接到机器获取view层级信息. 正所谓高手在民间, 大家都尝试在未root的机器中启用view server来使用H Viewer. 最具代表性的就是romainguy的ViewServer, 只需集成少量代码到你的Activity, 相当于在手机端开启了view server服务, 建立socket通道与PC端的H Viewer通信. 此工程被Android官网吸收, 作为开启H View的方案之一. 完整开启H Viewer的套路如下: 手机开启开发者模式, USB调试. 根据手机的Android系统版本: 4.0及以下, 没有root. 使用上述的开源工程ViewServer提供的方式. 4.0及以下, 已经root. 无需其他额外设置. 4.1及以上. 需要在PC端设置ANDROID_HVPROTO环境变量. 设置系统环境变量: ANDROID_HVPROTO, 值为ddm 具体设置系统环境变量根据PC系统不同而异. 做完上述配置后, 你就可以打开H Viewer了, 打开DDMS, 如下操作进入H Viewer界面: ddms_open_hviewer 1.2 H Viewer界面详解 以GithubApp的详情界面RepoDetailActivity为例说明: Snip20160902_1.png 界面分为四个部分: Window 显示当前连接的设备和供分析的界面. 可手动选择. Tree View 树状图的形式展示该Activity中的View层级结构. 可以放大缩小, 每个节点代表一个View, 点击可以弹出其属性, 当前值, 并且在LayoutView中会显示其在界面中相应位置. Tree View是我们主要要分析的视图. Tree Overview Tree View的概览图. 有一个选择框, 可以拖动选择查看. 选中的部分会在Tree View中显示. Layout View 匹配手机屏幕的视图, 按照View的实际显示位置展示出来的框图. 1.3 H Viewer参数解读 通过Tree View可以很直观的看到View的层级. 点击Tree View的RepoItemView这个节点: 14728281715494.jpg 关于三个小圆点的性能指示, 在App优化之性能分析工具一文中有提到, 再强调一遍: 三个小圆点, 依次表示Measure, Layout, Draw, 可以理解为对应View的onMeasure, onLayout, onDraw三个方法. 绿色, 表示该View的此项性能比该View Tree中超过50%的View都要快. 黄色, 表示该View的此项性能比该View Tree中超过50%的View都要慢. 红色, 表示该View的此项性能是View Tree中最慢的. 如果你的界面的Tree View中红点较多, 那就需要注意了. 一般来说: 1, Measure红点, 可能是布局中嵌套RelativeLayout, 或是嵌套LinearLayout都使用了weight属性. 2, Layout红点, 可能是布局层级太深. 3, Draw红点, 可能是自定义View的绘制有问题, 复杂计算等. 由上图, 可以看到我们的RepoItemView的三项指标都不合格, 证明其还有很多优化空间. 层级, 绘制都可以优化. 除了用H Viewer来做代码后分析, Android还提供了Lint, 在我们编写xml布局文件时就即时的给出一些相关提示. 2, Lint tool 打开RepoDetailActivity的布局文件activity_repo_detail.xml, 在Android Studio菜单栏中开启Lint检查: 14728313149102.jpg 选择当前文件: 14728313382536.jpg 会在下方弹出分析结果: 14728314908964.jpg 分析结果包括用法检测(例如版本特有属性), 国际化(字符串是否提取到strings.xml, Rlt支持等), 以及我们今天的主题---性能分析结果. 点开"Android -> Lint -> Performance"项, 可以看到关于布局性能的建议项. 此例中是说ScrollView的父级LinearLayout是不必要的. 3, 怎么优化你的布局 通过以上工具的使用和分析, 也基本能找到布局的一些常见的好与不好的了. 正所谓授之以鱼不如授之以渔. 在此也就不太详细去讲怎么优化了, 几点建议, 大家自行实践吧:) 尽量减少布局层级和复杂度 尽量不要嵌套使用RelativeLayout. 尽量不要在嵌套的LinearLayout中都使用weight属性. Layout的选择, 以尽量减少View树的层级为主. 去除不必要的父布局. 善用TextView的Drawable减少布局层级 如果H Viewer查看层级超过5层, 你就需要考虑优化下布局了~ 善用Tag <include> 使用include来重用布局. <merge> 使用<merge>来解决include或自定义组合ViewGroup导致的冗余层级问题. 例如本例中的RepoItemView的布局文件实际可以用一个<merge>标签来减少一级. <ViewStub> ListView优化 contentView复用 引入holder来避免重复的findViewById. 分页加载 4, 附示例代码 因github上的源码会持续更新, 特留对应代码在此. activity_repo_detail.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/root_layout" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/md_white_1000" android:orientation="vertical" android:padding="@dimen/dimen_10"> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true" android:scrollbars="none"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <com.anly.githubapp.ui.widget.RepoItemView android:id="@+id/repo_item_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/md_grey_300" android:elevation="@dimen/dimen_2"/> <LinearLayout android:id="@+id/contributor_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/dimen_10" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="@dimen/dimen_40" android:gravity="center_vertical" android:orientation="horizontal" android:background="@drawable/button_bg" android:paddingLeft="@dimen/dimen_10"> <TextView android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical" android:text="{oct-organization} Contributors"/> <TextView android:id="@+id/contributors_count" android:layout_width="match_parent" android:layout_height="@dimen/dimen_40" android:gravity="center_vertical"/> </LinearLayout> <android.support.v7.widget.RecyclerView android:id="@+id/contributor_list" android:layout_width="match_parent" android:layout_height="@dimen/dimen_60" android:layout_marginTop="@dimen/dimen_2" /> </LinearLayout> <LinearLayout android:id="@+id/fork_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/dimen_10" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="@dimen/dimen_40" android:gravity="center_vertical" android:orientation="horizontal" android:background="@drawable/button_bg" android:paddingLeft="@dimen/dimen_10" > <TextView android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical" android:text="{oct-gist_fork} Forks"/> <TextView android:id="@+id/forks_count" android:layout_width="match_parent" android:layout_height="@dimen/dimen_40" android:gravity="center_vertical"/> </LinearLayout> <android.support.v7.widget.RecyclerView android:id="@+id/fork_list" android:layout_width="match_parent" android:layout_height="@dimen/dimen_60" android:layout_marginTop="@dimen/dimen_2" /> </LinearLayout> <LinearLayout android:id="@+id/code_layout" android:layout_width="match_parent" android:layout_height="@dimen/dimen_40" android:gravity="center_vertical" android:orientation="horizontal" android:layout_marginTop="@dimen/dimen_10" android:background="@drawable/button_bg" android:paddingLeft="@dimen/dimen_10"> <TextView android:id="@+id/code_label" android:layout_width="match_parent" android:layout_height="@dimen/dimen_40" android:gravity="center_vertical" android:text="{oct-file_code} Code"/> </LinearLayout> <LinearLayout android:id="@+id/readme_layout" android:layout_width="match_parent" android:layout_height="@dimen/dimen_40" android:gravity="center_vertical" android:orientation="horizontal" android:layout_marginTop="@dimen/dimen_10" android:background="@drawable/button_bg" android:paddingLeft="@dimen/dimen_10"> <TextView android:id="@+id/readme_label" android:layout_width="match_parent" android:layout_height="@dimen/dimen_40" android:gravity="center_vertical" android:text="{oct-info} README"/> </LinearLayout> </LinearLayout> </ScrollView> </LinearLayout> com.anly.githubapp.ui.widget.RepoItemView对应的布局: <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="@dimen/dimen_10"> <TextView android:id="@+id/name" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="left|center_vertical" android:maxLines="1" android:text="@string/app_name" android:textColor="@android:color/black" android:textSize="@dimen/text_size_18"/> <TextView android:id="@+id/desc" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="left|center_vertical" android:maxLines="2" android:text="@string/app_name" android:textColor="@android:color/darker_gray" android:textSize="@dimen/text_size_12"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/dimen_5" android:gravity="center_vertical" android:orientation="horizontal"> <ImageView android:id="@+id/image" android:layout_width="@dimen/dimen_32" android:layout_height="@dimen/dimen_32" android:scaleType="centerInside" android:src="@mipmap/ic_launcher" android:visibility="visible"/> <TextView android:id="@+id/owner" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="@dimen/dimen_10" android:gravity="left|center_vertical" android:text="@string/app_name" android:textColor="@android:color/black" android:textSize="@dimen/text_size_14"/> </LinearLayout> <View android:layout_marginTop="@dimen/dimen_5" android:layout_width="match_parent" android:layout_height="1px" android:background="@color/grey"/> <LinearLayout android:layout_width="match_parent" android:layout_height="@dimen/dimen_32" android:gravity="center_vertical" android:orientation="horizontal" android:paddingTop="@dimen/dimen_10"> <TextView android:id="@+id/update_time" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="left|center_vertical" android:text="@string/app_name" android:textColor="@android:color/black" android:textSize="@dimen/text_size_12" /> <View android:layout_width="1px" android:layout_height="match_parent" android:background="@color/grey"/> <LinearLayout android:id="@+id/star_view" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:orientation="horizontal"> <ImageView android:id="@+id/star_icon" android:layout_width="@dimen/dimen_16" android:layout_height="@dimen/dimen_16" android:scaleType="centerInside" android:src="@drawable/ic_star"/> <TextView android:id="@+id/star" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_marginLeft="@dimen/dimen_5" android:gravity="center" android:text="@string/app_name" android:textColor="@android:color/black" android:textSize="@dimen/text_size_12" /> </LinearLayout> </LinearLayout> </LinearLayout> <com.flyco.labelview.LabelView android:id="@+id/label_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" app:lv_background_color="@color/md_yellow_500" app:lv_gravity="TOP_RIGHT" app:lv_text="TEST" app:lv_text_size="@dimen/text_size_12"/> </FrameLayout> 优化不同于做功能, 可能分析的多, 出的成果少~ 比较枯燥, 然而优化也是App发展的必经之路, 欢迎大家分享经验. 作者:一点点征服 出处:http://www.cnblogs.com/ldq2016/ 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利 本文转自 一点点征服 博客园博客,原文链接:http://www.cnblogs.com/ldq2016/p/8483636.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

android用户界面-组件Widget-选项Tab

使用Tab的步骤: 1、在布局文件中使用FrameLayout列出Tab组件及Tab中的内容组件。 2、Activity要继承TabActivity。 3、调用TabActivity的getTabHost()方法获得TabHost对象。 4、通过TabHost创建Tab选项。 /Chapter04_UI_Tab01/src/com/amaker/test/MainActivity.java 代码 packagecom.amaker.test; importandroid.app.TabActivity; importandroid.os.Bundle; importandroid.view.LayoutInflater; importandroid.view.Window; importandroid.view.WindowManager; importandroid.widget.TabHost; importandroid.widget.Toast; importandroid.widget.TabHost.OnTabChangeListener; publicclassMainActivityextendsTabActivity{ @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); /*requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);*/ TabHostth=getTabHost(); LayoutInflater.from(this).inflate(R.layout.main,th.getTabContentView(),true); th.addTab(th.newTabSpec("all").setIndicator("所有通话记录").setContent(R.id.TextView01)); th.addTab(th.newTabSpec("ok").setIndicator("已接来电").setContent(R.id.TextView02)); th.addTab(th.newTabSpec("cancel").setIndicator("未接来电").setContent(R.id.TextView03)); th.setOnTabChangedListener( newOnTabChangeListener(){ @Override publicvoidonTabChanged(StringtabId){ Toast.makeText(MainActivity.this,tabId,Toast.LENGTH_LONG).show(); } } ); } } /Chapter04_UI_Tab01/res/layout/main.xml 代码 <?xmlversion="1.0"encoding="utf-8"?> <FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/FrameLayout01" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="所有通话记录"></TextView> <TextView android:id="@+id/TextView02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="已接来电"></TextView> <TextView android:id="@+id/TextView03" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="未接来电"></TextView> </FrameLayout> 通过实现一个接口TabHost.TabContentFactory的createTabContent方法来制定Tab的内容 /Chapter04_UI_Tab02/src/com/amaker/test/MainActivity.java 代码 packagecom.amaker.test; importjava.util.ArrayList; importjava.util.List; importandroid.app.TabActivity; importandroid.os.Bundle; importandroid.view.View; importandroid.widget.ArrayAdapter; importandroid.widget.ListView; importandroid.widget.TabHost; publicclassMainActivityextendsTabActivityimplements TabHost.TabContentFactory{ /**Calledwhentheactivityisfirstcreated.*/ @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); TabHostth=getTabHost(); th.addTab(th.newTabSpec("all").setIndicator("所有通话记录").setContent(this)); th.addTab(th.newTabSpec("ok").setIndicator("已接来电").setContent(this)); th .addTab(th.newTabSpec("cancel").setIndicator("未接来电") .setContent(this)); } publicViewcreateTabContent(Stringtag){ ListViewlv=newListView(this); List<String>list=newArrayList<String>(); list.add(tag); if(tag.equals("all")){ list.add("tom"); list.add("kite"); list.add("rose"); }elseif(tag.equals("ok")){ list.add("tom"); list.add("kite"); }else{ list.add("rose"); } ArrayAdapteradapter=newArrayAdapter(this, android.R.layout.simple_list_item_checked,list); lv.setAdapter(adapter); returnlv; } } /Chapter04_UI_Tab02/res/layout/main.xml 代码 <?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout> 本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1080696

优秀的个人博客,低调大师

Android -- 系统信息(内存、cpu、sd、电量、版本)获取

内存(ram) android的总内存大小信息存放在系统的/proc/meminfo文件里面,可以通过读取这个文件来获取这些信息: public void getTotalMemory() { String str1 = "/proc/meminfo"; String str2=""; try { FileReader fr = new FileReader(str1); BufferedReader localBufferedReader = new BufferedReader(fr, 8192); while ((str2 = localBufferedReader.readLine()) != null) { Log.i(TAG, "---" + str2); } } catch (IOException e) { } } 运行信息如下: 05-30 08:05:14.807: INFO/-SystemInfo-(1519): ---MemTotal: 204876 kB 05-30 08:05:14.807: INFO/-SystemInfo-(1519): ---MemFree: 4596 kB 05-30 08:05:14.807: INFO/-SystemInfo-(1519): ---Buffers: 16020 kB 05-30 08:05:14.807: INFO/-SystemInfo-(1519): ---Cached: 82508 kB 05-30 08:05:14.807: INFO/-SystemInfo-(1519): ---SwapCached: 64 kB 05-30 08:05:14.807: INFO/-SystemInfo-(1519): ---Active: 137104 kB 05-30 08:05:14.807: INFO/-SystemInfo-(1519): ---Inactive: 41056 kB 05-30 08:05:14.807: INFO/-SystemInfo-(1519): ---SwapTotal: 65528 kB 05-30 08:05:14.817: INFO/-SystemInfo-(1519): ---SwapFree: 65368 kB 05-30 08:05:14.817: INFO/-SystemInfo-(1519): ---Dirty: 88 kB 05-30 08:05:14.817: INFO/-SystemInfo-(1519): ---Writeback: 0 kB 05-30 08:05:14.817: INFO/-SystemInfo-(1519): ---AnonPages: 79672 kB 05-30 08:05:14.817: INFO/-SystemInfo-(1519): ---Mapped: 38296 kB 05-30 08:05:14.817: INFO/-SystemInfo-(1519): ---Slab: 5768 kB 05-30 08:05:14.817: INFO/-SystemInfo-(1519): ---SReclaimable: 1856 kB 05-30 08:05:14.827: INFO/-SystemInfo-(1519): ---SUnreclaim: 3912 kB 05-30 08:05:14.827: INFO/-SystemInfo-(1519): ---PageTables: 8184 kB 05-30 08:05:14.827: INFO/-SystemInfo-(1519): ---NFS_Unstable: 0 kB 05-30 08:05:14.827: INFO/-SystemInfo-(1519): ---Bounce: 0 kB 05-30 08:05:14.827: INFO/-SystemInfo-(1519): ---CommitLimit: 167964 kB 05-30 08:05:14.827: INFO/-SystemInfo-(1519): ---Committed_AS: 11771920 kB 05-30 08:05:14.827: INFO/-SystemInfo-(1519): ---VmallocTotal: 761856 kB 05-30 08:05:14.827: INFO/-SystemInfo-(1519): ---VmallocUsed: 83656 kB 05-30 08:05:14.827: INFO/-SystemInfo-(1519): ---VmallocChunk: 674820 kB 第一行是总内存大小(即用户可以使用的ram的大小)! 获取当前剩余内存(ram)大小的方法: public long getAvailMemory() { ActivityManager am = (ActivityManager)mContext.getSystemService(Context.ACTIVITY_SERVICE); ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo(); am.getMemoryInfo(mi); return mi.availMem; } Rom大小 public long[] getRomMemroy() { long[] romInfo = new long[2]; //Total rom memory romInfo[0] = getTotalInternalMemorySize(); //Available rom memory File path = Environment.getDataDirectory(); StatFs stat = new StatFs(path.getPath()); long blockSize = stat.getBlockSize(); long availableBlocks = stat.getAvailableBlocks(); romInfo[1] = blockSize * availableBlocks; getVersion(); return romInfo; } public long getTotalInternalMemorySize() { File path = Environment.getDataDirectory(); StatFs stat = new StatFs(path.getPath()); long blockSize = stat.getBlockSize(); long totalBlocks = stat.getBlockCount(); return totalBlocks * blockSize; } 注意类型,不然相乘之后会有溢出。可用内部存储的大小不能通过getRootDirectory();取得,之前网上传的很多都是用getRootDirectory()取得的,我测试之后发现取得的数值不对。要根据getDataDirectory();取得。 SDcard大小 public long[] getSDCardMemory() { long[] sdCardInfo=new long[2]; String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { File sdcardDir = Environment.getExternalStorageDirectory(); StatFs sf = new StatFs(sdcardDir.getPath()); long bSize = sf.getBlockSize(); long bCount = sf.getBlockCount(); long availBlocks = sf.getAvailableBlocks(); sdCardInfo[0] = bSize * bCount;//总大小 sdCardInfo[1] = bSize * availBlocks;//可用大小 } return sdCardInfo; } 注意类型,不然相乘之后会有溢出。 电池电量 private BroadcastReceiver batteryReceiver=new BroadcastReceiver(){ @Override public void onReceive(Context context, Intent intent) { int level = intent.getIntExtra("level", 0); // level加%就是当前电量了 } }; 然后在activity的oncreate()方法中注册 registerReceiver(batteryReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); CPU信息 public String[] getCpuInfo() { String str1 = "/proc/cpuinfo"; String str2=""; String[] cpuInfo={"",""}; String[] arrayOfString; try { FileReader fr = new FileReader(str1); BufferedReader localBufferedReader = new BufferedReader(fr, 8192); str2 = localBufferedReader.readLine(); arrayOfString = str2.split("\\s+"); for (int i = 2; i < arrayOfString.length; i++) { cpuInfo[0] = cpuInfo[0] + arrayOfString[i] + " "; } str2 = localBufferedReader.readLine(); arrayOfString = str2.split("\\s+"); cpuInfo[1] += arrayOfString[2]; localBufferedReader.close(); } catch (IOException e) { } return cpuInfo; } /proc/cpuinfo文件中第一行是CPU的型号,第二行是CPU的频率,可以通过读文件,读取这些数据! 系统的版本信息 public String[] getVersion(){ String[] version={"null","null","null","null"}; String str1 = "/proc/version"; String str2; String[] arrayOfString; try { FileReader localFileReader = new FileReader(str1); BufferedReader localBufferedReader = new BufferedReader( localFileReader, 8192); str2 = localBufferedReader.readLine(); arrayOfString = str2.split("\\s+"); version[0]=arrayOfString[2];//KernelVersion localBufferedReader.close(); } catch (IOException e) { } version[1] = Build.VERSION.RELEASE;// firmware version version[2]=Build.MODEL;//model version[3]=Build.DISPLAY;//system version return version; } 版本信息里面还包括型号等信息。 MAC地址和开机时间 public String[] getOtherInfo(){ String[] other={"null","null"}; WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); if(wifiInfo.getMacAddress()!=null){ other[0]=wifiInfo.getMacAddress(); } else { other[0] = "Fail"; } other[1] = getTimes(); return other; } private String getTimes() { long ut = SystemClock.elapsedRealtime() / 1000; if (ut == 0) { ut = 1; } int m = (int) ((ut / 60) % 60); int h = (int) ((ut / 3600)); return h + " " + mContext.getString(R.string.info_times_hour) + m + " " + mContext.getString(R.string.info_times_minute); } 我是天王盖地虎的分割线 本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/3851716.html,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册