一、參考
1、 Android 擷取手機的廠商、型号、Android系統版本号、IMEI、目前系統語言等工具類 2、 Android擷取SD卡總容量,可用大小,機身記憶體總容量及可用大小的系統方法 3、 android 安卓APP擷取手機裝置資訊和手機号碼的代碼示例 4、 Android 擷取本機号碼
二、工具類
//===========================device system or app info=======================================
/**
* 擷取目前手機系統語言。
*
* @return 傳回目前系統語言。例如:目前設定的是“中文-中國”,則傳回“zh-CN”
*/
public static String getSystemLanguage() {
return Locale.getDefault().getLanguage();
}
/**
* 擷取目前系統上的語言清單(Locale清單)
*
* @return 語言清單
*/
public static Locale[] getSystemLanguageList() {
return Locale.getAvailableLocales();
}
/**
* 擷取目前手機系統Sdk版本号
*
* @return Sdk系統版本号
*/
public static int getSystemSdkVersion() {
return Build.VERSION.SDK_INT;
}
/**
* 擷取目前手機系統版本号
*
* @return 系統版本号
*/
public static String getSystemVersion() {
return android.os.Build.VERSION.RELEASE;
}
/**
* 擷取手機型号
*
* @return 手機型号
*/
public static String getSystemModel() {
return android.os.Build.MODEL;
}
/**
* 擷取手機廠商
*
* @return 手機廠商
*/
public static String getDeviceBrand() {
return android.os.Build.BRAND;
}
/**
* 擷取手機IMEI(需要“android.permission.READ_PHONE_STATE”權限)
*
* @return 手機IMEI
*/
public static String getIMEI(Context ctx) throws SecurityException{
TelephonyManager tm = (TelephonyManager) ctx.getSystemService(Activity.TELEPHONY_SERVICE);
if (tm != null) {
return tm.getDeviceId();
}
return null;
}
/**
* 擷取應用程式名稱
*
* @param context
* @return
*/
public static String getAppName(Context context) {
PackageManager packageManager = context.getPackageManager();
try {
PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
int labelRes = packageInfo.applicationInfo.labelRes;
return context.getResources().getString(labelRes);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return null;
}
/**
* 擷取應用程式版本名稱資訊
*
* @param context
* @return 目前應用的版本名稱
*/
public static String getVersionName(Context context) {
try {
PackageManager packageManager = context.getPackageManager();
PackageInfo packageInfo = packageManager.getPackageInfo(
context.getPackageName(), 0);
return packageInfo.versionName;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return null;
}
/**
* 擷取應用程式的版本Code資訊
*
* @param context
* @return 版本code
*/
public static int getVersionCode(Context context) {
try {
PackageManager packageManager = context.getPackageManager();
PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
return packageInfo.versionCode;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return 0;
}
/**
* android裝置号,雙清會改變
* @param context 上下文
* @return android裝置号
*/
public static String getAndroidID(Context context){
return Settings.Secure.getString(context.getContentResolver(),Settings.Secure.ANDROID_ID);
}
/**
* android裝置号,雙清會改變
* @param context 上下文
* @return android裝置号(組合型)
*/
public static String getDeviceId(Context context) throws SecurityException{
String deviceId = null;
deviceId = ((TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId();
if (deviceId == null && Build.VERSION.SDK_INT > 9) {
deviceId = Settings.Secure.getString(context.getContentResolver(),
Settings.Secure.ANDROID_ID);
if (deviceId == null) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
if (networkInfo != null
&& networkInfo.isAvailable()
&& networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
WifiManager wm = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
deviceId = wm.getConnectionInfo().getMacAddress();
} else {
deviceId = UUID.randomUUID().toString();
}
}
}
if (deviceId != null && deviceId.length() < 28) {
int len = 28 - deviceId.length();
for (int i = 0; i < len; i++) {
deviceId = "0" + deviceId;
}
}
return deviceId;
}
//=============================android's sdcard rom ram start===================================
private static final int ERROR = -1;
/**
* SDCARD是否存
*/
public static boolean externalMemoryAvailable() {
return android.os.Environment.getExternalStorageState().equals(
android.os.Environment.MEDIA_MOUNTED);
}
/**
* 擷取手機内部剩餘存儲空間
*
* @return
*/
public static long getAvailableInternalMemorySize() {
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
return availableBlocks * blockSize;
}
/**
* 擷取手機内部總的存儲空間
*
* @return
*/
public static long getTotalInternalMemorySize() {
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long totalBlocks = stat.getBlockCount();
return totalBlocks * blockSize;
}
/**
* 擷取SDCARD剩餘存儲空間
*
* @return
*/
public static long getAvailableExternalMemorySize() {
if (externalMemoryAvailable()) {
File path = Environment.getExternalStorageDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
return availableBlocks * blockSize;
} else {
return ERROR;
}
}
/**
* 擷取SDCARD總的存儲空間
*
* @return
*/
public static long getTotalExternalMemorySize() {
if (externalMemoryAvailable()) {
File path = Environment.getExternalStorageDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long totalBlocks = stat.getBlockCount();
return totalBlocks * blockSize;
} else {
return ERROR;
}
}
/**
* 擷取系統總記憶體
*
* @param context 可傳入應用程式上下文。
* @return 總記憶體大機關為B。
*/
public static long getTotalMemorySize(Context context) {
String dir = "/proc/meminfo";
try {
FileReader fr = new FileReader(dir);
BufferedReader br = new BufferedReader(fr, 2048);
String memoryLine = br.readLine();
String subMemoryLine = memoryLine.substring(memoryLine.indexOf("MemTotal:"));
br.close();
return Integer.parseInt(subMemoryLine.replaceAll("\\D+", "")) * 1024l;
} catch (IOException e) {
e.printStackTrace();
}
return 0;
}
/**
* 擷取目前可用記憶體,傳回資料以位元組為機關。
*
* @param context 可傳入應用程式上下文。
* @return 目前可用記憶體機關為B。
*/
public static long getAvailableMemory(Context context) {
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
am.getMemoryInfo(memoryInfo);
return memoryInfo.availMem;
}
private static DecimalFormat fileIntegerFormat = new DecimalFormat("#0");
private static DecimalFormat fileDecimalFormat = new DecimalFormat("#0.#");
/**
* 機關換算
*
* @param size 機關為B
* @param isInteger 是否傳回取整的機關
* @return 轉換後的機關
*/
public static String formatFileSize(long size, boolean isInteger) {
DecimalFormat df = isInteger ? fileIntegerFormat : fileDecimalFormat;
String fileSizeString = "0M";
if (size < 1024 && size > 0) {
fileSizeString = df.format((double) size) + "B";
} else if (size < 1024 * 1024) {
fileSizeString = df.format((double) size / 1024) + "K";
} else if (size < 1024 * 1024 * 1024) {
fileSizeString = df.format((double) size / (1024 * 1024)) + "M";
} else {
fileSizeString = df.format((double) size / (1024 * 1024 * 1024)) + "G";
}
return fileSizeString;
}
//==============================get phone number info ====================================
/**
* 擷取目前版本号
* */
public static String getPhoneNumber(Context context) throws SecurityException{
TelephonyManager tm = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
// String deviceid = tm.getDeviceId(); //擷取智能裝置唯一編号
String te1 = tm.getLine1Number(); //擷取本機号碼 :部分手機沒有,因為供應商沒有寫進去
// String imei = tm.getSimSerialNumber(); //獲得SIM卡的序号 :電信沒有
// String imsi = tm.getSubscriberId(); //得到使用者Id
return (te1!=null ? te1:"NA");
}
/**
* 擷取手機服務商資訊
* */
public static String getProvidersName(Context context) throws SecurityException{
String ProvidersName = "NA";
try {
TelephonyManager tm = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
String IMSI = tm.getSubscriberId();
if (IMSI.startsWith("46000") || IMSI.startsWith("46002")) {
ProvidersName = "中國移動";
} else if (IMSI.startsWith("46001")) {
ProvidersName = "中國聯通";
} else if (IMSI.startsWith("46003")) {
ProvidersName = "中國電信";
}
} catch (Exception e) {
e.printStackTrace();
}
return ProvidersName;
}
三、權限
部分功能需要權限獲得,補充下,android 6.0之後需要動态擷取權限,具體檢視權限管理的相關資料
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />