Android获取手机相关信息

首先,一个小例子:

package com.brio.testid;

import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.os.Bundle;
import android.provider.Settings.Secure;
import android.widget.TextView;

public class MainActivity extends Activity {
	TextView tvId = null;
	String androidId = null;
	BluetoothAdapter m_BluetoothAdapter = null; // Local Bluetooth adapter

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		androidId = Secure.getString(getContentResolver(), Secure.ANDROID_ID);
		tvId = (TextView) findViewById(R.id.tvId);

		m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
		String m_szBTMAC = m_BluetoothAdapter.getAddress();

		tvId.setText("手机型号: " + android.os.Build.MODEL + ",\nSDK版本:"
				+ android.os.Build.VERSION.SDK + ",\n系统版本:"
				+ android.os.Build.VERSION.RELEASE + ",\nBT MAC:" + m_szBTMAC
				+ ",\nAndroidId:" + androidId);
		tvId.setTextSize(30.0f);
	}
}

下面内容转载自:http://blog.csdn.net/way_ping_li/article/details/8314009 学习备用。

一、Android 获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)

1、通过PackageManager可获取手机端已安装的apk文件的信息,具体代码如下:

[java] view
plain
copy

  1. PackageManager packageManager = this.getPackageManager();
  2. List<PackageInfo> packageInfoList = packageManager.getInstalledPackages(0);

通过上述方法,可得到手机中安装的所有应用程序,包括手动安装的apk包的信息、、系统预装的应用软件的信息,要区分这两类软件可使用以下方法:

(a) 从packageInfoList获取的packageInfo,再通过packageInfo.applicationInfo获取applicationInfo。

(b) 判断(applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM)的值,该值大于0时,表示获取的应用为系统预装的应用,反之则为手动安装的应用。

(1)获取应用的代码:

[java] view
plain
copy

  1. public static List<PackageInfo> getAllApps(Context context) {
  2. List<PackageInfo> apps = new ArrayList<PackageInfo>();
  3. PackageManager pManager = context.getPackageManager();
  4. // 获取手机内所有应用
  5. List<PackageInfo> paklist = pManager.getInstalledPackages(0);
  6. for (int i = 0; i < paklist.size(); i++) {
  7. PackageInfo pak = (PackageInfo) paklist.get(i);
  8. // 判断是否为非系统预装的应用程序
  9. if ((pak.applicationInfo.flags & pak.applicationInfo.FLAG_SYSTEM) <= 0) {
  10. apps.add(pak);
  11. }
  12. }
  13. return apps;
  14. }

(2)、获取图片、应用名、包名(ShareItemInfo 类是自己写的,忽视吧):

[java] view
plain
copy

  1. PackageManager pManager = MessageSendActivity.this.getPackageManager();
  2. List<PackageInfo> appList  = Utils.getAllApps(MessageSendActivity.this);
  3. for(int i=0;i<appList.size();i++) {
  4. PackageInfo pinfo = appList.get(i);
  5. shareItem = new ShareItemInfo();
  6. shareItem.setIcon(pManager.getApplicationIcon(pinfo.applicationInfo));
  7. shareItem.setLabel(pManager.getApplicationLabel(pinfo.applicationInfo).toString());
  8. shareItem.setPackageName(pinfo.applicationInfo.packageName);
  9. }

(3)获取支持分享的应用的代码:

[java] view
plain
copy

  1. public static List<ResolveInfo> getShareApps(Context context){
  2. List<ResolveInfo> mApps = new ArrayList<ResolveInfo>();
  3. Intent intent=new Intent(Intent.ACTION_SEND,null);
  4. intent.addCategory(Intent.CATEGORY_DEFAULT);
  5. intent.setType("text/plain");
  6. PackageManager pManager = context.getPackageManager();
  7. mApps = pManager.queryIntentActivities(intent,PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
  8. return mApps;
  9. }

由于该方法,返回的并不是PackageInfo 对象。而是ResolveInfo。因此获取图片、应用名、包名的方法不一样,如下:

[java] view
plain
copy

  1. PackageManager pManager = MessageSendActivity.this.getPackageManager();
  2. List<ResolveInfo> resolveList  = Utils.getShareApps(MessageSendActivity.this);
  3. for(int i=0;i<resolveList.size();i++) {
  4. ResolveInfo resolve = resolveList.get(i);
  5. ShareItemInfo shareItem = new ShareItemInfo();
  6. //set Icon
  7. shareItem.setIcon(resolve.loadIcon(pManager));
  8. //set Application Name
  9. shareItem.setLabel(resolve.loadLabel(pManager).toString());
  10. //set Package Name
  11. shareItem.setPackageName(resolve.activityInfo.packageName);
  12. }

总结:

通过 PackageInfo 获取具体信息方法:

包名获取方法:packageInfo.packageName

icon获取获取方法:packageManager.getApplicationIcon(applicationInfo)

应用名称获取方法:packageManager.getApplicationLabel(applicationInfo)

使用权限获取方法:packageManager.getPackageInfo(packageName,PackageManager.GET_PERMISSIONS)

.requestedPermissions

通过 ResolveInfo 获取具体信息方法:

包名获取方法:resolve.activityInfo.packageName

icon获取获取方法:resolve.loadIcon(packageManager)

应用名称获取方法:resolve.loadLabel(packageManager).toString()

二、获取手机可用内存和总内存(手机的内存信息主要在/proc/meminfo文件中,其中第一行是总内存,而剩余内存可通过ActivityManager.MemoryInfo得到):

[java] view
plain
copy

  1. private String[] getTotalMemory() {
  2. String[] result = {"",""};  //1-total 2-avail
  3. ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();
  4. mActivityManager.getMemoryInfo(mi);
  5. long mTotalMem = 0;
  6. long mAvailMem = mi.availMem;
  7. String str1 = "/proc/meminfo";
  8. String str2;
  9. String[] arrayOfString;
  10. try {
  11. FileReader localFileReader = new FileReader(str1);
  12. BufferedReader localBufferedReader = new BufferedReader(localFileReader, 8192);
  13. str2 = localBufferedReader.readLine();
  14. arrayOfString = str2.split("\\s+");
  15. mTotalMem = Integer.valueOf(arrayOfString[1]).intValue() * 1024;
  16. localBufferedReader.close();
  17. } catch (IOException e) {
  18. e.printStackTrace();
  19. }
  20. result[0] = Formatter.formatFileSize(this, mTotalMem);
  21. result[1] = Formatter.formatFileSize(this, mAvailMem);
  22. Log.i(TAG, "meminfo total:" + result[0] + " used:" + result[1]);
  23. return result;
  24. }

三、获取手机CPU信息(和内存信息同理,cpu信息可通过读取/proc/cpuinfo文件来得到,其中第一行为cpu型号,第二行为cpu频率):

[java] view
plain
copy

  1. private String[] getCpuInfo() {
  2. String str1 = "/proc/cpuinfo";
  3. String str2 = "";
  4. String[] cpuInfo = {"", ""};  //1-cpu型号  //2-cpu频率
  5. String[] arrayOfString;
  6. try {
  7. FileReader fr = new FileReader(str1);
  8. BufferedReader localBufferedReader = new BufferedReader(fr, 8192);
  9. str2 = localBufferedReader.readLine();
  10. arrayOfString = str2.split("\\s+");
  11. for (int i = 2; i < arrayOfString.length; i++) {
  12. cpuInfo[0] = cpuInfo[0] + arrayOfString[i] + " ";
  13. }
  14. str2 = localBufferedReader.readLine();
  15. arrayOfString = str2.split("\\s+");
  16. cpuInfo[1] += arrayOfString[2];
  17. localBufferedReader.close();
  18. } catch (IOException e) {
  19. }
  20. Log.i(TAG, "cpuinfo:" + cpuInfo[0] + " " + cpuInfo[1]);
  21. return cpuInfo;
  22. }

四、获取手机MAC地址:

[java] view
plain
copy

  1. private String getMacAddress(){
  2. String result = "";
  3. WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
  4. WifiInfo wifiInfo = wifiManager.getConnectionInfo();
  5. result = wifiInfo.getMacAddress();
  6. Log.i(TAG, "macAdd:" + result);
  7. return result;
  8. }

五、获取屏幕密度三种方法:

[java] view
plain
copy

  1. // 获取屏幕密度(方法1)
  2. int screenWidth  = getWindowManager().getDefaultDisplay().getWidth();       // 屏幕宽(像素,如:480px)
  3. int screenHeight = getWindowManager().getDefaultDisplay().getHeight();      // 屏幕高(像素,如:800p)
  4. Log.e(TAG + "  getDefaultDisplay", "screenWidth=" + screenWidth + "; screenHeight=" + screenHeight);
  5. // 获取屏幕密度(方法2)
  6. DisplayMetrics dm = new DisplayMetrics();
  7. dm = getResources().getDisplayMetrics();
  8. float density  = dm.density;        // 屏幕密度(像素比例:0.75/1.0/1.5/2.0)
  9. int densityDPI = dm.densityDpi;     // 屏幕密度(每寸像素:120/160/240/320)
  10. float xdpi = dm.xdpi;
  11. float ydpi = dm.ydpi;
  12. Log.e(TAG + "  DisplayMetrics", "xdpi=" + xdpi + "; ydpi=" + ydpi);
  13. Log.e(TAG + "  DisplayMetrics", "density=" + density + "; densityDPI=" + densityDPI);
  14. screenWidth  = dm.widthPixels;      // 屏幕宽(像素,如:480px)
  15. screenHeight = dm.heightPixels;     // 屏幕高(像素,如:800px)
  16. Log.e(TAG + "  DisplayMetrics(111)", "screenWidth=" + screenWidth + "; screenHeight=" + screenHeight);
  17. // 获取屏幕密度(方法3)
  18. dm = new DisplayMetrics();
  19. getWindowManager().getDefaultDisplay().getMetrics(dm);
  20. density  = dm.density;      // 屏幕密度(像素比例:0.75/1.0/1.5/2.0)
  21. densityDPI = dm.densityDpi;     // 屏幕密度(每寸像素:120/160/240/320)
  22. xdpi = dm.xdpi;
  23. ydpi = dm.ydpi;
  24. Log.e(TAG + "  DisplayMetrics", "xdpi=" + xdpi + "; ydpi=" + ydpi);
  25. Log.e(TAG + "  DisplayMetrics", "density=" + density + "; densityDPI=" + densityDPI);
  26. int screenWidthDip = dm.widthPixels;        // 屏幕宽(dip,如:320dip)
  27. int screenHeightDip = dm.heightPixels;      // 屏幕宽(dip,如:533dip)
  28. Log.e(TAG + "  DisplayMetrics(222)", "screenWidthDip=" + screenWidthDip + "; screenHeightDip=" + screenHeightDip);
  29. screenWidth  = (int)(dm.widthPixels * density + 0.5f);      // 屏幕宽(px,如:480px)
  30. screenHeight = (int)(dm.heightPixels * density + 0.5f);     // 屏幕高(px,如:800px)
  31. Log.e(TAG + "  DisplayMetrics(222)", "screenWidth=" + screenWidth + "; screenHeight=" + screenHeight);

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-21 10:24:56

Android获取手机相关信息的相关文章

PHP获取手机相关信息

该PHP操作类实现获取手机号手机头信息,取UA,取得手机类型,判断是否是opera,判断是否是m3gate,取得HA,取得手机IP 代码如下: <?php /** * @desc 手机操作类 获取手机相关信息 * @since */class mobile { /** * 函数名称: getPhoneNumber * 函数功能: 取手机号 * 输入参数: none * 函数返回值: 成功返回号码,失败返回false * 其它说明: 说明 */ public function getPhoneNu

Android之Build类.(Android获取手机配置信息 )

一.类结构: java.lang.Object    ? android.os.Build 二.类概述:从系统属性中提取设备硬件和版本信息. 三.内部类: 1.Build.VERSION    各种版本字符串 2.Build.VERSION_CODES    目前已知的版本代码的枚举类 四.常量:UNKNOWN   当一个版本属性不知道时所设定的值.其字符串值为 "unknown" . 五.构造方法: Build () 六.静态属性 1.BOARD   主板:The name of t

iOS获取手机相关信息

iOS具体的设备型号: #include <sys/types.h> #include <sys/sysctl.h> - (void)test { //手机型号. size_t size; sysctlbyname("hw.machine", NULL, &size, NULL, 0); char *machine = (char*)malloc(size); sysctlbyname("hw.machine", machine, &

android -------- 获取手机设备信息

最近在开发中,需要用到一些系统信息,总结了一下 /** * Created by zhangqie on 2019/2/26 * Describe: 系统工具类 */ public class EquipmentUtil { /** * 获取当前手机系统语言. * * @return 返回当前系统语言.例如:当前设置的是“中文-中国”,则返回“zh-CN” */ public static String getSystemLanguage() { return Locale.getDefault

【小功能2】android获取手机信息(号码,内存,CPU,分辨率,MAC,IP,SD卡,IMEI,经纬度,信号强度等等)

为了实现一个功能,需要搜集手机信息,自己先在网上找了相关信息进行了汇总,主要是汇集手机的信息,一般想要的信息在手机设置->关于手机->状态消息里面包含了手机的各种信息,下面的代码中也主要显示了那些信息,但是源码的方法我还没有看,先把总结的贴出来.先上图(太多就截取几个).  上代码啦,太多了,就写主要代码了. // 获取Android手机中SD卡存储信息 获取剩余空间 public void getSDCardInfo() { // 在manifest.xml文件中要添加 /* * <u

android 安卓APP获取手机设备信息和手机号码的代码示例

下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码 准备条件:一部安卓手机.手机SIM卡确保插入手机里.eclipse ADT和android-sdk开发环境 第一步:新建一个android工程(JinshanTest), 并需要在工程的AndroidManifest.xml文件中,添加权限 <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 图例: 第二步:新建一个工具类

android获取周围AP信息

1.增加权限: 由于此应用需要获取手机的网络信息,wifi信息,因此需要在AndroidManifest.xml文件中添加相关权限,否则会报permission deny错误: 1 <uses-permission android:name="android.permission.INTERNET"/> 2 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE">

Android获取手机联系人的姓名和电话

Android获取手机联系人的姓名和电话 主要是用到了跳入手机联系人的intent和获取手机联系人信息的内容提供者,直接上代码 注:此贴是借鉴别人的帖子加了一些自己的东西写出的,原帖地址明日附上: / 首先 我们需要跳入手机通讯录 Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); startActivityForResult(intent, 0); // 之后,我们需要重写

Android 获取运营商信息(完整版)-解决高通,MTK等双卡问题

由于国内的运营商问题,双卡手机获取IMSI号问题要根据厂商API 来实现. 下面我们就来做一套完整的分析运营商获取IMSI号逻辑. 1,首先我们要判断手机的平台. 1.1,判断手机是否MTK平台 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 public static M