Android获取手机能获取的信息(暂时我能想到的)
2017-05-08 10:31
267 查看
总结了网上的一些工具类,希望对大家有所帮助,大家可以在评论下方补全更多的获取方法,更多的帮助大家,谢谢。 package com.mydemo.utils; import android.Manifest; import android.app.ActivityManager; import android.bluetooth.BluetoothAdapter; import android.content.ContentResolver; import android.content.Context; import android.content.pm.PackageManager; import android.database.Cursor; import android.database.sqlite.SQLiteException; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.Uri; import android.net.wifi.WifiManager; import android.provider.CallLog; import android.provider.ContactsContract; import android.provider.Settings; import android.support.v4.app.ActivityCompat; import android.telephony.TelephonyManager; import android.text.format.Formatter; import android.util.DisplayMetrics; import android.util.Log; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import static android.content.Context.TELEPHONY_SERVICE; /** * Created by JerseyGuo * on 2015/5/5. */ public class Utils { /** * 获取联系人 * * @param context * @return */ public static List<String> queryContactPhoneNumber(Context context) { List<String> infos = new ArrayList<>(); String[] cols = {ContactsContract.PhoneLookup.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER}; Cursor cursor = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, cols, null, null, null); for (int i = 0; i < cursor.getCount(); i++) { cursor.moveToPosition(i); // 取得联系人名字 int nameFieldColumnIndex = cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME); int numberFieldColumnIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); String name = cursor.getString(nameFieldColumnIndex); String number = cursor.getString(numberFieldColumnIndex); infos.add(name + number); } return infos; } /** * 获取通话记录 * * @param context * @return */ public static String getCallHistoryList(Context context) { ContentResolver cr = context.getContentResolver(); Cursor cs; cs = cr.query(CallLog.Calls.CONTENT_URI, //系统方式获取通讯录存储地址 new String[]{ CallLog.Calls.CACHED_NAME, //姓名 CallLog.Calls.NUMBER, //号码 CallLog.Calls.TYPE, //呼入/呼出(2)/未接 CallLog.Calls.DATE, //拨打时间 CallLog.Calls.DURATION //通话时长 }, null, null, CallLog.Calls.DEFAULT_SORT_ORDER); String callHistoryListStr = ""; int i = 0; if (cs != null && cs.getCount() > 0) { for (cs.moveToFirst(); !cs.isAfterLast() & i < 50; cs.moveToNext()) { String callName = cs.getString(0); String callNumber = cs.getString(1); //通话类型 int callType = Integer.parseInt(cs.getString(2)); String callTypeStr = ""; switch (callType) { case CallLog.Calls.INCOMING_TYPE: callTypeStr = "呼入"; break; case CallLog.Calls.OUTGOING_TYPE: callTypeStr = "呼出"; break; case CallLog.Calls.MISSED_TYPE: callTypeStr = "未接"; break; } //拨打时间 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date callDate = new Date(Long.parseLong(cs.getString(3))); String callDateStr = sdf.format(callDate); //通话时长 int callDuration = Integer.parseInt(cs.getString(4)); int min = callDuration / 60; int sec = callDuration % 60; String callDurationStr = min + "分" + sec + "秒"; String callOne = "类型:" + callTypeStr + ", 称呼:" + callName + ", 号码:" + callNumber + ", 通话时长:" + callDurationStr + ", 时间:" + callDateStr + "\n---------------------\n"; callHistoryListStr += callOne; i++; } } return callHistoryListStr; } /** * 获取短信 * * @param context * @return */ public static String getSmsInPhone(Context context) { final String SMS_URI_ALL = "content://sms/"; final String SMS_URI_INBOX = "content://sms/inbox"; final String SMS_URI_SEND = "content://sms/sent"; final String SMS_URI_DRAFT = "content://sms/draft"; final String SMS_URI_OUTBOX = "content://sms/outbox"; final String SMS_URI_FAILED = "content://sms/failed"; final String SMS_URI_QUEUED = "content://sms/queued"; StringBuilder smsBuilder = new StringBuilder(); try { Uri uri = Uri.parse(SMS_URI_ALL); String[] projection = new String[]{"_id", "address", "person", "body", "date", "type"}; Cursor cur = context.getContentResolver().query(uri, projection, null, null, "date desc"); // 获取手机内部短信 if (cur.moveToFirst()) { int index_Address = cur.getColumnIndex("address"); int index_Person = cur.getColumnIndex("person"); int index_Body = cur.getColumnIndex("body"); int index_Date = cur.getColumnIndex("date"); int index_Type = cur.getColumnIndex("type"); do { String strAddress = cur.getString(index_Address); int intPerson = cur.getInt(index_Person); String strbody = cur.getString(index_Body); long longDate = cur.getLong(index_Date); int intType = cur.getInt(index_Type); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Date d = new Date(longDate); String strDate = dateFormat.format(d); String strType = ""; if (intType == 1) { strType = "接收"; } else if (intType == 2) { strType = "发送"; } else { strType = "null"; } smsBuilder.append("[ "); smsBuilder.append(strAddress + ", "); smsBuilder.append(intPerson + ", "); smsBuilder.append(strbody + ", "); smsBuilder.append(strDate + ", "); smsBuilder.append(strType); smsBuilder.append(" ]\n\n"); } while (cur.moveToNext()); if (!cur.isClosed()) { cur.close(); cur = null; } } else { smsBuilder.append("no result!"); } // end if smsBuilder.append("getSmsInPhone has executed!"); } catch (SQLiteException ex) { Log.d("SQLiteException in getSmsInPhone", ex.getMessage()); } return smsBuilder.toString(); } /** * 通过address手机号关联Contacts联系人的显示名字 * * @param address * @return */ private static String getPeopleNameFromPerson(String address, Context context) { if (address == null || address == "") { return null; } String strPerson = "null"; String[] projection = new String[]{ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER}; Uri uri_Person = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, address); // address 手机号过滤 Cursor cursor = context.getContentResolver().query(uri_Person, projection, null, null, null); if (cursor.moveToFirst()) { int index_PeopleName = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME); String strPeopleName = cursor.getString(index_PeopleName); strPerson = strPeopleName; } else { strPerson = address; } cursor.close(); cursor = null; return strPerson; } /** * android.os.Build.BOARD:获取设备基板名称 * android.os.Build.BOOTLOADER:获取设备引导程序版本号 * android.os.Build.BRAND:获取设备品牌 * android.os.Build.CPU_ABI:获取设备指令集名称(CPU的类型) * android.os.Build.CPU_ABI2:获取第二个指令集名称 * android.os.Build.DEVICE:获取设备驱动名称 * android.os.Build.DISPLAY:获取设备显示的版本包(在系统设置中显示为版本号)和ID一样 * android.os.Build.FINGERPRINT:设备的唯一标识。由设备的多个信息拼接合成。 * android.os.Build.HARDWARE:设备硬件名称,一般和基板名称一样(BOARD) * android.os.Build.HOST:设备主机地址 * android.os.Build.ID:设备版本号。 * android.os.Build.MODEL :获取手机的型号 设备名称。 * android.os.Build.MANUFACTURER:获取设备制造商 * android:os.Build.PRODUCT:整个产品的名称 * android:os.Build.RADIO:无线电固件版本号,通常是不可用的 显示unknown * android.os.Build.TAGS:设备标签。如release-keys 或测试的 test-keys * android.os.Build.TIME:时间 * android.os.Build.TYPE:设备版本类型主要为”user” 或”eng”. * android.os.Build.USER:设备用户名 基本上都为android-build * android.os.Build.VERSION.RELEASE:获取系统版本字符串。如4.1.2 或2.2 或2.3等 * android.os.Build.VERSION.CODENAME:设备当前的系统开发代号,一般使用REL代替 * android.os.Build.VERSION.INCREMENTAL:系统源代码控制值,一个数字或者git hash值 * android.os.Build.VERSION.SDK:系统的API级别 一般使用下面大的SDK_INT 来查看 * android.os.Build.VERSION.SDK_INT:系统的API级别 数字表示 * * @param context * @return */ public static String getInfo(Context context) { TelephonyManager mTm = (TelephonyManager) context.getSystemService(TELEPHONY_SERVICE); String imei = mTm.getDeviceId(); String imsi = mTm.getSubscriberId(); String mtype = android.os.Build.MODEL; // 手机型号 String numer = mTm.getLine1Number(); // 手机号码,有的可得,有的不可得 BluetoothAdapter m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); String m_szBTMAC = m_BluetoothAdapter.getAddress(); WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); String macAddress = wm.getConnectionInfo().getMacAddress(); String sn = mTm.getSimSerialNumber(); StringBuilder sb = new StringBuilder(); sb.append("IMEI--" + imei + '\n') .append("IMSI--" + imsi + '\n') .append("手机型号--" + mtype + '\n') .append("本机号码--" + numer + '\n') .append("屏幕分辨率--" + getScreen(context) + '\n') .append("蓝牙MAC地址--" + m_szBTMAC + '\n') .append("WIFI MAC地址--" + macAddress + '\n') .append("序列号--" + sn + '\n') .append("手机厂商--" + android.os.Build.MANUFACTURER.replace(" ", "-") + '\n') .append("DEVICEID--" + Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID) + '\n') .append("手机版本号--" + android.os.Build.VERSION.RELEASE + '\n') .append("cpu最小频率--" + getCpuInfo()[1] + '\n' + "当前频率--" + getCurCpuFreq() + '\n') .append("最大频率--" + getMaxCpuFreq() + '\n') .append("最大内存--" + getTotalMemory(context) + '\n') .append("可用内存--" + getAvailMemory(context) + '\n') .append("联网状态--" + (isWifi(context) ? "wifi" : "运营商") + '\n') ; return sb.toString(); } public static String getPhoneInfo(Context context) { StringBuilder phoneInfo = new StringBuilder(); phoneInfo.append("产品名称: " + android.os.Build.PRODUCT + System.getProperty("line.separator")); phoneInfo.append("CPU_名称: " + android.os.Build.CPU_ABI + System.getProperty("line.separator")); phoneInfo.append("设备标签: " + android.os.Build.TAGS + System.getProperty("line.separator")); phoneInfo.append("VERSION_CODES.BASE: " + android.os.Build.VERSION_CODES.BASE + System.getProperty("line.separator")); phoneInfo.append("SDK版本: " + android.os.Build.VERSION.SDK + System.getProperty("line.separator")); phoneInfo.append("DEVICE: " + android.os.Build.DEVICE + System.getProperty("line.separator")); phoneInfo.append("手机名称: " + android.os.Build.BRAND + System.getProperty("line.separator")); phoneInfo.append("设备基板名称: " + android.os.Build.BOARD + System.getProperty("line.separator")); phoneInfo.append("设备的唯一标识: " + android.os.Build.FINGERPRINT + System.getProperty("line.separator")); phoneInfo.append("设备ID: " + android.os.Build.ID + System.getProperty("line.separator")); phoneInfo.append("USER: " + android.os.Build.USER + System.getProperty("line.separator")); TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); phoneInfo.append("NetworkOperator = " + tm.getNetworkOperator() + System.getProperty("line.separator")); phoneInfo.append("运营商 = " + tm.getNetworkOperatorName() + System.getProperty("line.separator")); phoneInfo.append("手机类型 = " + tm.getPhoneType() + System.getProperty("line.separator")); phoneInfo.append("国家 = " + tm.getSimCountryIso() + System.getProperty("line.separator")); phoneInfo.append("SimState = " + tm.getSimState() + System.getProperty("line.separator")); phoneInfo.append("VoiceMailNumber = " + tm.getVoiceMailNumber() + System.getProperty("line.separator")); phoneInfo.append(getInfo(context)); return phoneInfo.toString(); } /** * 获取分辨率 */ public static String getScreen(Context context) { DisplayMetrics dm = new DisplayMetrics(); dm = context.getResources().getDisplayMetrics(); int screenWidth = dm.widthPixels; int screenHeight = dm.heightPixels; return screenWidth + "*" + screenHeight; } /** * 手机CPU信息 */ private static 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 cpuInfo; } /** * 获取手机内存大小 * * @return */ public static String getTotalMemory(Context context) { 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+"); for (String num : arrayOfString) { Log.i(str2, num + "\t"); } initial_memory = Integer.valueOf(arrayOfString[1]).intValue() * 1024;// 获得系统总内存,单位是KB,乘以1024转换为Byte localBufferedReader.close(); } catch (IOException e) { } return Formatter.formatFileSize(context, initial_memory);// Byte转换为KB或者MB,内存大小规格化 } /** * 获取当前可用内存大小 * * @return */ public static String getAvailMemory(Context context) { ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo(); am.getMemoryInfo(mi); return Formatter.formatFileSize(context, mi.availMem); } /** * cpu最大频率 * * @return */ public static String getMaxCpuFreq() { String result = ""; ProcessBuilder cmd; try { String[] args = {"/system/bin/cat", "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq"}; cmd = new ProcessBuilder(args); Process process = cmd.start(); InputStream in = process.getInputStream(); byte[] re = new byte[24]; while (in.read(re) != -1) { result = result + new String(re); } in.close(); } catch (IOException ex) { ex.printStackTrace(); result = "N/A"; } return result.trim() + "Hz"; } // 实时获取CPU当前频率(单位KHZ) public static String getCurCpuFreq() { String result = "N/A"; try { FileReader fr = new FileReader( "/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq"); BufferedReader br = new BufferedReader(fr); String text = br.readLine(); result = text.trim() + "Hz"; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return result; } /** * 网络状态 * * @param mContext * @return */ public static boolean isWifi(Context mContext) { ConnectivityManager connectivityManager = (ConnectivityManager) mContext .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo(); if (activeNetInfo != null && activeNetInfo.getType() == ConnectivityManager.TYPE_WIFI) { return true; } return false; } }
相关文章推荐
- android 安卓APP获取手机设备信息和手机号码的代码示例 .
- android手机获取手机设备信息
- Android获取手机相关信息
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等) .
- Android 获取手机总内存和可用内存等信息
- Android 使用ContentResolver获取手机图片和照片的相关信息
- android 手机内存SD卡和cpu等信息的获取
- android 获取手机信息(device ip,os version etc.)
- Android获取手机内应用程序的信息
- Android获取手机信息大全
- android 获取 imei号码及手机硬件其他信息
- Android基站定位——通过手机信号获取基站信息
- android的一些常用手机信息获取
- android N 获取手机内存信息方案
- Android手机中获取手机号码和运营商信息
- Android获取手机配置信息
- android 获取手机信息的一些知识
- Android 通过手机文件夹路径,得到 某张 照片 的 详细/详情/信息的获取
- Android 通过反射及AIDL获取双卡手机SIM卡相关信息,及注册监听
- Android获取手机和系统版本等信息的代码