Android 获取手机 设备的 信息

///

Android 获取手机的厂商、型号、Android系统版本号、IMEI、当前系统语言等工具类

在开发中,需要用到一些系统信息的工具类有以下6个功能:

1、获取手机制造厂商

2、获取手机型号

3、获取手机系统当前使用的语言

4、获取Android系统版本号

5、获取手机IMEI串号

6、获取手机中的语言列表

SystemUtil类

  1. /** 
  2.  * 系统工具类 
  3.  * Created by zhuwentao on 2016-07-18. 
  4.  */  
  5. public class SystemUtil {  
  6.   
  7.     /** 
  8.      * 获取当前手机系统语言。 
  9.      * 
  10.      * @return 返回当前系统语言。例如:当前设置的是“中文-中国”,则返回“zh-CN” 
  11.      */  
  12.     public static String getSystemLanguage() {  
  13.         return Locale.getDefault().getLanguage();  
  14.     }  
  15.   
  16.     /** 
  17.      * 获取当前系统上的语言列表(Locale列表) 
  18.      * 
  19.      * @return  语言列表 
  20.      */  
  21.     public static Locale[] getSystemLanguageList() {  
  22.         return Locale.getAvailableLocales();  
  23.     }  
  24.   
  25.     /** 
  26.      * 获取当前手机系统版本号 
  27.      * 
  28.      * @return  系统版本号 
  29.      */  
  30.     public static String getSystemVersion() {  
  31.         return android.os.Build.VERSION.RELEASE;  
  32.     }  
  33.   
  34.     /** 
  35.      * 获取手机型号 
  36.      * 
  37.      * @return  手机型号 
  38.      */  
  39.     public static String getSystemModel() {  
  40.         return android.os.Build.MODEL;  
  41.     }  
  42.   
  43.     /** 
  44.      * 获取手机厂商 
  45.      * 
  46.      * @return  手机厂商 
  47.      */  
  48.     public static String getDeviceBrand() {  
  49.         return android.os.Build.BRAND;  
  50.     }  
  51.   
  52.     /** 
  53.      * 获取手机IMEI(需要“android.permission.READ_PHONE_STATE”权限) 
  54.      * 
  55.      * @return  手机IMEI 
  56.      */  
  57.     public static String getIMEI(Context ctx) {  
  58.         TelephonyManager tm = (TelephonyManager) ctx.getSystemService(Activity.TELEPHONY_SERVICE);  
  59.         if (tm != null) {  
  60.             return tm.getDeviceId();  
  61.         }  
  62.         return null;  
  63.     }  
  64. }  

其中获取手机IMEI需要在AndroidManifest.xml中加上权限:

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

使用这些方法的时候直接调用就好了

  1. private void showSystemParameter() {  
  2.     String TAG = "系统参数:";  
  3.     Log.e(TAG, "手机厂商:" + SystemUtil.getDeviceBrand());  
  4.     Log.e(TAG, "手机型号:" + SystemUtil.getSystemModel());  
  5.     Log.e(TAG, "手机当前系统语言:" + SystemUtil.getSystemLanguage());  
  6.     Log.e(TAG, "Android系统版本号:" + SystemUtil.getSystemVersion());  
  7.     Log.e(TAG, "手机IMEI:" + SystemUtil.getIMEI(getApplicationContext()));  

返回结果:

//

Android系统获取GPU、屏幕信息

源码下载

https://github.com/sufadi/AndroidCpuTools

1.GPU 电压和频率

C:\Users\fadi.su>adb shell cat /proc/gpufreq/gpufreq_opp_dump
[0] freq = 450000, volt = 115000, idx = 0
[1] freq = 400000, volt = 111875, idx = 1
[2] freq = 350000, volt = 108750, idx = 2
[3] freq = 290000, volt = 105000, idx = 3

    public static List getGpuFreqVolt() {
        List result = new ArrayList<>();

        try {
            String line;
            BufferedReader br = new BufferedReader(new FileReader("/proc/gpufreq/gpufreq_opp_dump"));
            while ((line = br.readLine()) != null) {
                result.add(line);
            }
            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return result;
    }

2.GPU 供应商和版本信息

        final RendererUtil mRendererUtil = new RendererUtil();
        GLSurfaceView mGLSurfaceView = (GLSurfaceView) mView.findViewById(R.id.surfaceView);
        mGLSurfaceView.setEGLContextClientVersion(1);
        mGLSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 0, 0);
        mGLSurfaceView.setRenderer(mRendererUtil);
        mGLSurfaceView.post(new Runnable() {
            @Override
            public void run() {
                result.add(getString(R.string.gl_vendor) + mRendererUtil.gl_vendor);
                result.add(getString(R.string.gl_renderer) + mRendererUtil.gl_renderer);
                result.add(getString(R.string.gl_version) + mRendererUtil.gl_version);
                result.add(getString(R.string.gl_extensions) + mRendererUtil.gl_extensions);
                mHandler.sendEmptyMessage(UPDATE_UI);
            }
        });

package com.fadisu.cpurun.util;

import android.opengl.GLSurfaceView;
import android.util.Log;

import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;

public class RendererUtil implements GLSurfaceView.Renderer {

    //GPU 渲染器
    public String gl_renderer;

    //GPU 供应商
    public String gl_vendor;

    //GPU 版本
    public String gl_version;

    //GPU  扩展名
    public String gl_extensions;

    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig eglConfig) {
        gl_renderer = gl.glGetString(GL10.GL_RENDERER);
        gl_vendor = gl.glGetString(GL10.GL_VENDOR);
        gl_version = gl.glGetString(GL10.GL_VERSION);
        gl_extensions = gl.glGetString(GL10.GL_EXTENSIONS);
        Log.d("suhuazhi", "onSurfaceCreated = " + gl_renderer);
    }

    @Override
    public void onSurfaceChanged(GL10 gl10, int i, int i1) {

    }

    @Override
    public void onDrawFrame(GL10 gl10) {

    }
}

3.GPU 获取屏幕

public class ScreenInfo {

    // 英寸
    public double size;

    public String sizeStr;

    // 高
    public int heightPixels;

    // 宽
    public int widthPixels;

    public String screenRealMetrics;

    // 显示器的逻辑密度
    public float density;

    // 屏幕密度为点每英寸
    public int densityDpi;

    public String densityDpiStr;

    // 显示在显示器的字体的定标因子
    public float scaledDensity;

    // 每在 X 维屏幕英寸的确切物理像素
    public float xdpi;

    // 每在 Y 维屏幕英寸的确切物理像素
    public float ydpi;

    //在屏幕中显示的参考密度
    public int density_default;

    @Override
    public String toString() {
        return "ScreenInfo{" +
                "size=" + size +
                ", sizeStr='" + sizeStr + '\'' +
                ", heightPixels=" + heightPixels +
                ", screenRealMetrics='" + screenRealMetrics + '\'' +
                ", widthPixels=" + widthPixels +
                ", density=" + density +
                ", densityDpi=" + densityDpi +
                ", densityDpiStr='" + densityDpiStr + '\'' +
                ", scaledDensity=" + scaledDensity +
                ", xdpi=" + xdpi +
                ", ydpi=" + ydpi +
                ", density_default=" + density_default +
                '}';
    }
}

   /**
     * 屏幕分辨率
     *
     * @param mContext
     * @return
     */
    public static ScreenInfo getScreenInfo(Context mContext) {
        ScreenInfo result = new ScreenInfo();
        int widthPixels;
        int heightPixels;

        WindowManager w = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);

        Display d = w.getDefaultDisplay();
        DisplayMetrics metrics = new DisplayMetrics();
        d.getMetrics(metrics);
        // since SDK_INT = 1;
        widthPixels = metrics.widthPixels;
        heightPixels = metrics.heightPixels;
        // includes window decorations (statusbar bar/menu bar)
        if (Build.VERSION.SDK_INT >= 14 && Build.VERSION.SDK_INT < 17) {
            try {
                widthPixels = (Integer) Display.class.getMethod("getRawWidth").invoke(d);
                heightPixels = (Integer) Display.class.getMethod("getRawHeight").invoke(d);
            } catch (Exception ignored) {
                ignored.printStackTrace();
            }
        }
        // includes window decorations (statusbar bar/menu bar)
        if (Build.VERSION.SDK_INT >= 17) {
            try {
                Point realSize = new Point();
                Display.class.getMethod("getRealSize", Point.class).invoke(d, realSize);
                widthPixels = realSize.x;
                heightPixels = realSize.y;
            } catch (Exception ignored) {
                ignored.printStackTrace();
            }
        }

        result.widthPixels = widthPixels;
        result.heightPixels = heightPixels;
        result.screenRealMetrics = widthPixels + " X " + heightPixels;
        result.density = metrics.density;
        result.density_default = metrics.DENSITY_DEFAULT;
        result.densityDpi = metrics.densityDpi;
        result.densityDpiStr = metrics.densityDpi + " dpi";
        result.scaledDensity = metrics.scaledDensity;
        result.xdpi = metrics.xdpi;
        result.ydpi = metrics.ydpi;
        result.size = (Math.sqrt(Math.pow(widthPixels, 2) + Math.pow(heightPixels, 2)) / metrics.densityDpi);
        result.sizeStr = String.format("%.2f", result.size) + mContext.getResources().getString(R.string.sys_inches_unit);

        return result;
    }

4.运行结果

Android系统获取GPU、屏幕信息_第1张图片

android获取GPU信息;android获取GPU渲染器、供应商、版本和扩展名等信息

效果:

在这里插入图片描述

1、布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:layout_marginTop="15dp"
    tools:context=".FirstActivity">

    <TextView
        android:id="@+id/gpu_renderer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="renderer"
        android:textSize="20dp"/>

    <TextView
        android:id="@+id/gpu_vendor"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="vendor"
        android:textSize="20dp"/>

    <TextView
        android:id="@+id/gpu_version"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="gpu_version"
        android:textSize="20dp"/>

    <TextView
        android:id="@+id/gpu_extensions"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="extensions"
        android:textSize="20dp"/>

    <android.opengl.GLSurfaceView
        android:id="@+id/gl_surface_view"
        android:layout_width="1dp"
        android:layout_height="1dp"/>

</LinearLayout>


2、工具类

public class GpuInfoUtil implements GLSurfaceView.Renderer{
    public static String glRenderer;
    public static String glVendor;
    public static String glVersion;
    public static String glExtensions;

    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
        glRenderer = gl.glGetString(GL10.GL_RENDERER);      //GPU 渲染器
        glVendor = gl.glGetString(GL10.GL_VENDOR);          //GPU 供应商
        glVersion = gl.glGetString(GL10.GL_VERSION);        //GPU 版本
        glExtensions = gl.glGetString(GL10.GL_EXTENSIONS);  //GPU 扩展名
    }

    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height) {

    }

    @Override
    public void onDrawFrame(GL10 gl) {

    }
}
 

3、活动

public class FirstActivity extends AppCompatActivity {
    private TextView glRenderer;
    private TextView glVendor;
    private TextView glVersion;
    private TextView glExtensions;
    private GLSurfaceView glSurfaceView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_activity);
        initView();
        setData();
    }

    @Override
    protected void onResume() {
        super.onResume();
        //延迟100毫秒再刷新一次,确保获取到GPU各项属性
        handler.postDelayed(runnable,100);
    }

    //更新界面数据
    private Handler handler = new Handler();
    private Runnable runnable = new Runnable() {
        public void run () {
            setData();
        }
    };

    private void setData(){
        glRenderer.setText("GPU 渲染器: "+GpuInfoUtil.glRenderer);
        glVendor.setText("GPU 供应商: "+GpuInfoUtil.glVendor);
        glVersion.setText("GPU 版本: "+GpuInfoUtil.glVersion);
        glExtensions.setText("GPU 扩展名: "+GpuInfoUtil.glExtensions);
    }

    private void initView(){
        glRenderer = (TextView)findViewById(R.id.gpu_renderer);
        glVendor = (TextView)findViewById(R.id.gpu_vendor);
        glVersion = (TextView)findViewById(R.id.gpu_version);
        glExtensions = (TextView)findViewById(R.id.gpu_extensions);

        glSurfaceView= findViewById(R.id.gl_surface_view);
        glSurfaceView.setEGLContextClientVersion(1);
        glSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 0, 0);
        glSurfaceView.setRenderer(new GpuInfoUtil());
    }
}

 

///

详解Android获得系统GPU参数 gl.glGetString

详解Android获得系统GPU参数 gl.glGetString

通过文档的查找,以及源码的剖析,Android的GPU信息需要通过OpenGL来获取,android framework层提供GL10来获取相应的参数,而GL10要在使用自定义的View时才可以获得,下面是获得GPU信息的例子:

1.实现Render类

class DemoRenderer implements GLSurfaceView.Renderer { 
 
  public void onSurfaceCreated(GL10 gl, EGLConfig config) 
  { 
    Log.d("SystemInfo", "GL_RENDERER = " +gl.glGetString(GL10.GL_RENDERER));  
    Log.d("SystemInfo", "GL_VENDOR = " + gl.glGetString(GL10.GL_VENDOR));  
    Log.d("SystemInfo", "GL_VERSION = " + gl.glGetString(GL10.GL_VERSION));  
    Log.i("SystemInfo", "GL_EXTENSIONS = " + gl.glGetString(GL10.GL_EXTENSIONS));  
  } 
 
 
  @Override 
  public void onDrawFrame(GL10 arg0) { 
    // TODO Auto-generated method stub 
 
  } 
 
 
  @Override 
  public void onSurfaceChanged(GL10 arg0, int arg1, int arg2) { 
    // TODO Auto-generated method stub 
 
  } 
 


2.实现GLSurfaceView

class DemoGLSurfaceView extends GLSurfaceView { 
 
  DemoRenderer mRenderer; 
  public DemoGLSurfaceView(Context context) { 
    super(context); 
    setEGLConfigChooser(8, 8, 8, 8, 0, 0); 
    mRenderer = new DemoRenderer(); 
    setRenderer(mRenderer); 
  } 

3.在Activity中 new 一个 DemoGLSurfaceView 对象

4.设置这个View对象

public class Demo extends Activity {

  @Override

  public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    GLSurfaceView glView = new DemoGLSurfaceView(this);

    this.setContentView(glView);

  }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值