Android 获取手机信息实例详解

Android 获取手机信息

应用信息:包名、版本号、版本名,手机是否有Root权限

手机信息:手机屏幕宽和高、当前可用内存大小、总内存大小、IMEI号、IESI号、手机型号、手机品牌、手机MacAdd、CPU型号、CPU频率

开门见山,以下是Java代码,XML只有一个TextView显示信息。


package com.example.getphoneinfo; 

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException; 

import android.app.Activity;
import android.content.Context;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.Environment;
import android.os.StatFs;
import android.telephony.TelephonyManager;
import android.text.format.Formatter;
import android.view.Menu;
import android.widget.TextView; 

public class MainActivity extends Activity { 

  TextView mPhoneInfo;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main); 

    initView();
    initData(); 

  } 

  private void initData() {
    // TODO Auto-generated method stub
    getAvailMemory();// 获取手机可用内存大小
    getTotalMemory();//获取总内存大小
    getHeightAndWidth();//获取屏幕宽高
    getInfo();//获取IMEI号,IESI号,手机型号
    getMacAddress();//获取IMEI号,IESI号,手机型号
    getCpuInfo();//手机CPU信息
    getPackage();//获取软件包名,版本名,版本号
    isRoot();//手机是否root
    String text = getHeightAndWidth() +
        "\n" + getTotalMemory() +
        "\n" + getAvailMemory() +
        "\n" + getInfo() +
        "\n" + getMacAddress() +
        "\n" + getCpuInfo() +
        "\n" + getPackage() +
        "\n" + isRoot();
    mPhoneInfo.setText(text); 

  } 

  /**
   * 获取软件包名,版本名,版本号
   */
  private String getPackage(){
    try {
      String pkName = this.getPackageName();
      String versionName = this.getPackageManager().getPackageInfo(
          pkName, 0).versionName;
      int versionCode = this.getPackageManager()
          .getPackageInfo(pkName, 0).versionCode;
      return "Package:" + pkName + "\nversionName:" + versionName + "\nversionCode:" + versionCode;
    } catch (Exception e) {
    }
    return null;
  } 

  /**
   * 获取手机是否root信息
   * @return
   */
  private String isRoot(){
    String bool = "Root:false";
    try{
      if ((!new File("/system/bin/su").exists()) && (!new File("/system/xbin/su").exists())){
        bool = "Root:false";
      } else {
        bool = "Root:true";
      }
    } catch (Exception e) {
    }
    return bool;
  } 

  /**
   * 获取android当前可用内存大小
   */
  private String getAvailMemory() {// 获取android当前可用内存大小
    File path = Environment.getDataDirectory();
    StatFs stat = new StatFs(path.getPath());
    long blockSize = stat.getBlockSize();
    long availableBlocks = stat.getAvailableBlocks();
    return "当前可用内存:" + Formatter.formatFileSize(MainActivity.this, blockSize * availableBlocks);
    }   

  /**
   * 获得系统总内存
   */
  private String getTotalMemory() {
    String str1 = "/proc/meminfo";// 系统内存信息文件
    String str2;
    String[] arrayOfString;
    long initial_memory = 0;
    try {
    FileReader localFileReader = new FileReader(str1);
    BufferedReader localBufferedReader = new BufferedReader(
    localFileReader, 8192);
    str2 = localBufferedReader.readLine();// 读取meminfo第一行,系统总内存大小   

    arrayOfString = str2.split("\\s+");
    initial_memory = Integer.valueOf(arrayOfString[1]).intValue() * 1024;// 获得系统总内存,单位是KB,乘以1024转换为Byte
    localBufferedReader.close();
    } catch (IOException e) {
    }
    return "总内存大小:" + Formatter.formatFileSize(getBaseContext(), initial_memory);// Byte转换为KB或者MB,内存大小规格化
  }  

  /**
   * 获得手机屏幕宽高
   * @return
   */
  public String getHeightAndWidth(){
    int width=getWindowManager().getDefaultDisplay().getWidth();
    int heigth=getWindowManager().getDefaultDisplay().getHeight();
    String str = "Width:" + width+"\nHeight:"+heigth+"";
    return str;
    }
  /**
   * 获取IMEI号,IESI号,手机型号
   */
  private String getInfo() {
     TelephonyManager mTm = (TelephonyManager)this.getSystemService(TELEPHONY_SERVICE);
      String imei = mTm.getDeviceId();
      String imsi = mTm.getSubscriberId();
      String mtype = android.os.Build.MODEL; // 手机型号
      String mtyb= android.os.Build.BRAND;//手机品牌
      String numer = mTm.getLine1Number(); // 手机号码,有的可得,有的不可得
    return "手机IMEI号:"+imei+"\n手机IESI号:"+imsi+"\n手机型号:"+mtype+"\n手机品牌:"+mtyb+"\n手机号码"+numer;
    }
  /**
   * 获取手机MAC地址
   * 只有手机开启wifi才能获取到mac地址
   */
  private String getMacAddress(){
      String result = "";
      WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
      WifiInfo wifiInfo = wifiManager.getConnectionInfo();
      result = wifiInfo.getMacAddress();
      return "手机macAdd:" + result;
    }
  /**
   * 手机CPU信息
   */
  private String getCpuInfo() {
      String str1 = "/proc/cpuinfo";
      String str2 = "";
      String[] cpuInfo = {"", ""}; //1-cpu型号 //2-cpu频率
      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 "CPU型号:" + cpuInfo[0] + "\nCPU频率:" + cpuInfo[1];
    }  

  public void initView() {
    // TODO Auto-generated method stub
    mPhoneInfo = (TextView)findViewById(R.id.id_tv_phone_info);
  } 

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
  } 

}

注意:添加权限


<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  <uses-permission android:name="android.permission.READ_PHONE_STATE" />

以下是效果视图:

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • Android仿微信activity滑动关闭效果

    Android仿微信activity滑动关闭功能 1.利用具体利用v4包下的slidingPaneLayout实现透明的activity,代码如下: BaseActivity: public class BaseSlideCloseActivity extends AppCompatActivity implements SlidingPaneLayout.PanelSlideListener { @Override protected void onCreate(Bundle savedIns

  • Android调试出现The selected device is incompatible问题解决

    Android调试出现The selected device is incompatible问题解决 在做Android调试时碰到该问题.详情如下图所示: 总结了一下碰到该问题的原因: 1.手机的版本太低,没有做到向下兼容. 2.由于state原因,变成了offline(也是我碰到的问题所在),主要原因是USB调试或者驱动的问题,一般是USB的调试问题. 解决方案: 针对原因1:将manifest文件,android:versionCode="XX"  中,把XX数值改为设备API的数

  • Android 解决TextView排版参差不齐的问题

     Android 解决TextView排版参差不齐的问题 在app中,展示数据时,里面有汉字.数字.特殊字符时,由于全角.半角问题导致TextView参差不齐.在网上找了许多,半角转全角并没什么用,还有其他自定义TextView都有问题.最后终于找到一个,就像Word一样,可以使文字左右两端对齐: package com.monkey.monkeymushroom.view; import android.content.Context; import android.graphics.Canv

  • Android 实现局部图片滑动指引效果

    Android 实现局部图片滑动指引效果 而ViewPager的事件监听器代码如下: // 滑动页面更改事件监听器 private class ImagePageChangeListener implements OnPageChangeListener { @Override public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub } @Override public void on

  • Android 检查更新、下载、安装功能的实现

    android检查更新.下载.安装 前言: 由于友盟更新即将下线,我们就修改了更新逻辑,自己检查更新.下载.安装,但是检查更新还是要依赖于友盟中的在线参数: 1.MainActivity.Java: public class MainActivity extends BaseActivity{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCon

  • Android SpannableString设置超链接、颜色、字体等属性

    Android SpannableString设置超链接.颜色.字体等属性 在Android中,TextView是我们最常用的用来显示文本的控件. 一般情况下,TextView中的文本都是一个样式.那么如何对于TextView中各个部分的文本来设置字体,大小,颜色,样式,以及超级链接等属性呢?下面我们通过SpannableString的具体实例操作来演示一下. package com.snowdream; import java.io.IOException; import org.xmlpul

  • Android中获取资源 id 及资源 id 的动态获取

     Android中获取资源 id 及资源 id 的动态获取 我们平时获取资源是通过 findViewById 方法进行的,比如我们常在onCreate方法中使用这样的语句: btnChecked=(ImageView)findViewById(R.id.imgCheck); findViewById是我们获取layout中各种View 对象比如按钮.标签.ListView和ImageView的便利方法.顾名思义,它需要一个int参数:资源id. 资源id非常有用.Android回自动为每个位于r

  • android非RxJava环境下使用Handler实现预加载

    在进行Android客户端界面开发时,我们常常会需要将从服务端获取的数据展示到页面布局上,由于数据显示到布局的前置条件是页面布局已初始化完成,否则会出现空指针异常,所以一般我们需要将网络请求放在布局初始化完成之后. 传统的页面加载流程是: 问题: 如果加载的UI布局比较复杂,或者初始化逻辑执行的时间比较多,那么网络请求开始执行的时间就比较晚,最终完成页面加载的时间就比较长. 如果页面初始化和网络加载能同时进行,等两者都执行结束后,再在布局上展示网络数据,这样我们就可以缩短整个页面的加载时间了.

  • Android BadgeView红点更新信息提示示例代码

    应用市场很多应用程序中都会看见一些数字红点提示的效果,如QQ.微信以及一些提示更新应用的APP,以达到更好的提示功能的应用,本文将介绍一开源控件的使用实现红点更新信息提示效果. 一.BadgeView常用方法介绍: 1.setBadgeCount(int):设置提醒数字 2.setBadgeGravity(Gravity):设置位置布局 3.setTargetView(View):设置提示控件对象 4.setTypeface():设置显示字体 5.setShadowLayer():设置字体阴影

  • android高仿小米时钟(使用Camera和Matrix实现3D效果)

    继续练习自定义View..毕竟熟才能生巧.一直觉得小米的时钟很精美,那这次就搞它~这次除了练习自定义View,还涉及到使用Camera和Matrix实现3D效果. 一个这样的效果,在绘制的时候最好选择一个方向一步一步的绘制,这里我选择由外到内.由深到浅的方向来绘制,代码步骤如下: 1.首先老一套~新建attrs.xml文件,编写自定义属性如时钟背景色.亮色(用于分针.秒针.渐变终止色).暗色(圆弧.刻度线.时针.渐变起始色),新建MiClockView继承View,重写构造方法,获取自定义属性值

随机推荐