574 lines
18 KiB
Java
574 lines
18 KiB
Java
package com.mogo.utils;
|
|
|
|
import android.Manifest;
|
|
import android.annotation.TargetApi;
|
|
import android.app.ActivityManager;
|
|
import android.content.Context;
|
|
import android.content.pm.PackageInfo;
|
|
import android.content.pm.PackageManager;
|
|
import android.net.ConnectivityManager;
|
|
import android.net.NetworkInfo;
|
|
import android.net.wifi.WifiManager;
|
|
import android.os.Build;
|
|
import android.provider.Settings;
|
|
import android.telephony.TelephonyManager;
|
|
import android.text.TextUtils;
|
|
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.Nullable;
|
|
import androidx.core.app.ActivityCompat;
|
|
import androidx.core.content.ContextCompat;
|
|
|
|
import java.io.IOException;
|
|
import java.io.InputStreamReader;
|
|
import java.io.LineNumberReader;
|
|
import java.io.UnsupportedEncodingException;
|
|
import java.lang.reflect.Field;
|
|
import java.net.InetAddress;
|
|
import java.net.NetworkInterface;
|
|
import java.net.SocketException;
|
|
import java.net.URLDecoder;
|
|
import java.net.URLEncoder;
|
|
import java.util.Enumeration;
|
|
import java.util.regex.Matcher;
|
|
import java.util.regex.Pattern;
|
|
|
|
public class CommonUtils {
|
|
|
|
private static String mMacSerial = null;
|
|
private static String mCPUSerial = null;
|
|
private static boolean isMacSerialNoObtained = false;
|
|
private static boolean isCPUSerialNoObtained = false;
|
|
private static final Pattern VERSION_NAME_PATTERN = Pattern.compile( "(\\d+\\.\\d+\\.\\d+)\\-*.*" );
|
|
|
|
|
|
public static String getAndroidID( Context context ) {
|
|
if ( context == null ) {
|
|
return "";
|
|
}
|
|
return Settings.Secure.getString( context.getContentResolver(), "android_id" );
|
|
}
|
|
|
|
public static String getCPUSerialno() {
|
|
if ( !TextUtils.isEmpty( mCPUSerial ) ) {
|
|
return mCPUSerial;
|
|
} else if ( isCPUSerialNoObtained ) {
|
|
mCPUSerial = "";
|
|
return mCPUSerial;
|
|
} else {
|
|
String str = "";
|
|
|
|
InputStreamReader ir = null;
|
|
LineNumberReader input = null;
|
|
try {
|
|
isCPUSerialNoObtained = true;
|
|
Process ex = Runtime.getRuntime().exec( "cat /proc/cpuinfo" );
|
|
if ( ex == null ) {
|
|
return null;
|
|
}
|
|
|
|
ir = new InputStreamReader( ex.getInputStream() );
|
|
input = new LineNumberReader( ir );
|
|
|
|
while ( null != str ) {
|
|
str = input.readLine();
|
|
if ( str != null ) {
|
|
mCPUSerial = str.trim();
|
|
break;
|
|
}
|
|
}
|
|
} catch ( IOException var4 ) {
|
|
var4.printStackTrace();
|
|
} finally {
|
|
if ( ir != null ) {
|
|
try {
|
|
ir.close();
|
|
} catch ( IOException e ) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
if ( input != null ) {
|
|
try {
|
|
input.close();
|
|
} catch ( IOException e ) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}
|
|
|
|
return mCPUSerial;
|
|
}
|
|
}
|
|
|
|
public static int getVersionCode( Context context ) {
|
|
|
|
if ( context == null ) {
|
|
return 1;
|
|
}
|
|
|
|
String pkgName = context.getPackageName();
|
|
|
|
try {
|
|
PackageInfo e = context.getPackageManager().getPackageInfo( pkgName, 0 );
|
|
if ( e != null ) {
|
|
return e.versionCode;
|
|
}
|
|
} catch ( Exception var2 ) {
|
|
var2.printStackTrace();
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
|
|
public static String getMacSerialno() {
|
|
if ( !TextUtils.isEmpty( mMacSerial ) ) {
|
|
return mMacSerial;
|
|
} else if ( isMacSerialNoObtained ) {
|
|
mMacSerial = "";
|
|
return mMacSerial;
|
|
} else {
|
|
String str = "";
|
|
|
|
InputStreamReader ir = null;
|
|
LineNumberReader input = null;
|
|
try {
|
|
isMacSerialNoObtained = true;
|
|
Process ex = Runtime.getRuntime().exec( "cat /sys/class/net/wlan0/address" );
|
|
if ( ex == null ) {
|
|
return null;
|
|
}
|
|
|
|
ir = new InputStreamReader( ex.getInputStream() );
|
|
input = new LineNumberReader( ir );
|
|
|
|
while ( null != str ) {
|
|
str = input.readLine();
|
|
if ( str != null ) {
|
|
mMacSerial = str.trim();
|
|
break;
|
|
}
|
|
}
|
|
} catch ( IOException var4 ) {
|
|
var4.printStackTrace();
|
|
} finally {
|
|
if ( ir != null ) {
|
|
try {
|
|
ir.close();
|
|
} catch ( IOException e ) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
if ( input != null ) {
|
|
try {
|
|
input.close();
|
|
} catch ( IOException e ) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}
|
|
|
|
return mMacSerial;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取网络类型
|
|
*
|
|
* @return
|
|
*/
|
|
public static String getNetworkType( Context context ) {
|
|
|
|
String name = "UNKNOWN";
|
|
|
|
try {
|
|
|
|
ConnectivityManager connMgr = ( ConnectivityManager ) context.getSystemService( Context.CONNECTIVITY_SERVICE );
|
|
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
|
|
if ( networkInfo != null ) {
|
|
if ( ConnectivityManager.TYPE_WIFI == networkInfo.getType() ) {
|
|
return "WIFI";
|
|
}
|
|
}
|
|
|
|
TelephonyManager tm = ( TelephonyManager ) context.getSystemService( Context.TELEPHONY_SERVICE );
|
|
if ( tm == null ) {
|
|
return name;
|
|
}
|
|
|
|
int type = tm.getNetworkType();
|
|
switch ( type ) {
|
|
case TelephonyManager.NETWORK_TYPE_GPRS:
|
|
case TelephonyManager.NETWORK_TYPE_EDGE:
|
|
case TelephonyManager.NETWORK_TYPE_CDMA:
|
|
case TelephonyManager.NETWORK_TYPE_1xRTT:
|
|
case TelephonyManager.NETWORK_TYPE_IDEN:
|
|
name = "2G";
|
|
break;
|
|
case TelephonyManager.NETWORK_TYPE_UMTS:
|
|
case TelephonyManager.NETWORK_TYPE_EVDO_0:
|
|
case TelephonyManager.NETWORK_TYPE_EVDO_A:
|
|
case TelephonyManager.NETWORK_TYPE_HSDPA:
|
|
case TelephonyManager.NETWORK_TYPE_HSUPA:
|
|
case TelephonyManager.NETWORK_TYPE_HSPA:
|
|
case TelephonyManager.NETWORK_TYPE_EVDO_B:
|
|
case TelephonyManager.NETWORK_TYPE_EHRPD:
|
|
case TelephonyManager.NETWORK_TYPE_HSPAP:
|
|
name = "3G";
|
|
break;
|
|
case TelephonyManager.NETWORK_TYPE_LTE:
|
|
name = "4G";
|
|
break;
|
|
case TelephonyManager.NETWORK_TYPE_UNKNOWN:
|
|
name = "UNKNOWN";
|
|
break;
|
|
default:
|
|
name = "UNKNOWN";
|
|
break;
|
|
}
|
|
} catch ( Exception e ) {
|
|
|
|
}
|
|
return name;
|
|
}
|
|
|
|
/**
|
|
* 得到手机的IMEI号
|
|
*
|
|
* @return
|
|
*/
|
|
public static String getIMEI( Context context ) {
|
|
try {
|
|
TelephonyManager telephonyManager = ( TelephonyManager ) context.getSystemService( Context.TELEPHONY_SERVICE );
|
|
if ( telephonyManager != null &&
|
|
ContextCompat.checkSelfPermission( context, Manifest.permission.READ_PHONE_STATE ) == PackageManager.PERMISSION_GRANTED ) {
|
|
return telephonyManager.getDeviceId();
|
|
}
|
|
} catch ( Exception e ) {
|
|
|
|
}
|
|
return "";
|
|
}
|
|
|
|
/**
|
|
* 得到手机的IMSI号
|
|
*
|
|
* @return
|
|
*/
|
|
public static String getIMSI( Context context ) {
|
|
|
|
try {
|
|
TelephonyManager telephonyManager = ( TelephonyManager ) context.getSystemService( Context.TELEPHONY_SERVICE );
|
|
if ( telephonyManager != null &&
|
|
ActivityCompat.checkSelfPermission( context, Manifest.permission.READ_PHONE_STATE ) == PackageManager.PERMISSION_GRANTED ) {
|
|
return telephonyManager.getSubscriberId();
|
|
}
|
|
} catch ( Exception e ) {
|
|
|
|
}
|
|
return "";
|
|
}
|
|
|
|
public static String checkSimState( Context context ) {
|
|
|
|
String mString = "";
|
|
|
|
if ( context == null ) {
|
|
return mString;
|
|
}
|
|
|
|
TelephonyManager telephonyManager = ( TelephonyManager ) context.getSystemService( Context.TELEPHONY_SERVICE );
|
|
int simState = 0;
|
|
if ( telephonyManager != null ) {
|
|
simState = telephonyManager.getSimState();
|
|
}
|
|
|
|
switch ( simState ) {
|
|
|
|
case TelephonyManager.SIM_STATE_ABSENT:
|
|
mString = "无卡";
|
|
// do something
|
|
break;
|
|
|
|
case TelephonyManager.SIM_STATE_NETWORK_LOCKED:
|
|
mString = "需要NetworkPIN解锁";
|
|
// do something
|
|
|
|
break;
|
|
|
|
case TelephonyManager.SIM_STATE_PIN_REQUIRED:
|
|
mString = "需要PIN解锁";
|
|
// do something
|
|
break;
|
|
|
|
case TelephonyManager.SIM_STATE_PUK_REQUIRED:
|
|
mString = "需要PUN解锁";
|
|
// do something
|
|
break;
|
|
|
|
case TelephonyManager.SIM_STATE_READY:
|
|
mString = "良好";
|
|
// do something
|
|
break;
|
|
|
|
case TelephonyManager.SIM_STATE_UNKNOWN:
|
|
mString = "未知状态";
|
|
// do something
|
|
break;
|
|
}
|
|
return mString;
|
|
}
|
|
|
|
|
|
/**
|
|
* 获取路由器Mac
|
|
*/
|
|
public static String getRouterMac( Context context ) {
|
|
|
|
if ( context == null ) {
|
|
return "";
|
|
}
|
|
|
|
WifiManager wifi = ( WifiManager ) context.getApplicationContext().getSystemService( Context.WIFI_SERVICE );
|
|
if ( wifi != null && wifi.getConnectionInfo() != null ) {
|
|
return wifi.getConnectionInfo().getBSSID();
|
|
}
|
|
return "";
|
|
}
|
|
|
|
/**
|
|
* 获取wifi名字
|
|
*/
|
|
public static String getWifiName( Context context ) {
|
|
if ( context == null ) {
|
|
return "";
|
|
}
|
|
WifiManager wifi = ( WifiManager ) context.getApplicationContext().getSystemService( Context.WIFI_SERVICE );
|
|
if ( wifi != null && wifi.getConnectionInfo() != null ) {
|
|
return wifi.getConnectionInfo().getSSID();
|
|
}
|
|
return "";
|
|
}
|
|
|
|
|
|
public static String getMobileIP( Context ctx ) {
|
|
|
|
if ( ctx == null ) {
|
|
return "";
|
|
}
|
|
|
|
ConnectivityManager mConnectivityManager = ( ConnectivityManager ) ctx.getSystemService( Context.CONNECTIVITY_SERVICE );// 获取系统的连接服务
|
|
// 实例化mActiveNetInfo对象
|
|
NetworkInfo mActiveNetInfo = null;// 获取网络连接的信息
|
|
if ( mConnectivityManager != null ) {
|
|
mActiveNetInfo = mConnectivityManager.getActiveNetworkInfo();
|
|
}
|
|
if ( mActiveNetInfo == null ) {
|
|
return "";
|
|
} else {
|
|
return getIp( mActiveNetInfo );
|
|
}
|
|
}
|
|
|
|
// 显示IP信息
|
|
private static String getIp( NetworkInfo mActiveNetInfo ) {
|
|
|
|
if ( mActiveNetInfo == null ) {
|
|
return "";
|
|
}
|
|
|
|
// 如果是WIFI网络
|
|
if ( mActiveNetInfo.getType() == ConnectivityManager.TYPE_WIFI ) {
|
|
return getLocalIPAddress();
|
|
}
|
|
// 如果是手机网络
|
|
else if ( mActiveNetInfo.getType() == ConnectivityManager.TYPE_MOBILE ) {
|
|
return getLocalIPAddress();
|
|
} else {
|
|
return "";
|
|
}
|
|
|
|
}
|
|
|
|
// 获取本地IP函数
|
|
private static String getLocalIPAddress() {
|
|
try {
|
|
Enumeration< NetworkInterface > mEnumeration = NetworkInterface.getNetworkInterfaces();
|
|
if ( mEnumeration != null ) {
|
|
while ( mEnumeration.hasMoreElements() ) {
|
|
NetworkInterface intf = mEnumeration.nextElement();
|
|
if ( intf != null && intf.getInetAddresses() != null ) {
|
|
Enumeration< InetAddress > enumIPAddr = intf.getInetAddresses();
|
|
while ( enumIPAddr.hasMoreElements() ) {
|
|
InetAddress inetAddress = enumIPAddr.nextElement();
|
|
// 如果不是回环地址
|
|
if ( inetAddress != null && !inetAddress.isLoopbackAddress() ) {
|
|
// 直接返回本地IP地址
|
|
return inetAddress.getHostAddress();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} catch ( SocketException ex ) {
|
|
ex.printStackTrace();
|
|
}
|
|
return "";
|
|
}
|
|
|
|
public static String getVersionName( Context context ) {
|
|
return getVersionName( context, true );
|
|
}
|
|
|
|
public static String getVersionName( Context context, boolean fullVersionName ) {
|
|
String appVersion = "";
|
|
|
|
try {
|
|
String packageName = context.getApplicationInfo().packageName;
|
|
appVersion = context.getPackageManager().getPackageInfo( packageName, 0 ).versionName;
|
|
if ( !fullVersionName && appVersion != null && appVersion.length() > 0 ) {
|
|
Matcher matcher = VERSION_NAME_PATTERN.matcher( appVersion );
|
|
if ( matcher.matches() ) {
|
|
appVersion = matcher.group( 1 );
|
|
}
|
|
}
|
|
} catch ( Exception e ) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
return appVersion;
|
|
}
|
|
|
|
public static String getAppName( Context context ) {
|
|
if ( context == null ) {
|
|
return "";
|
|
}
|
|
PackageManager pm = context.getPackageManager();
|
|
return context.getApplicationInfo().loadLabel( pm ).toString();
|
|
|
|
}
|
|
|
|
public static String getModel() {
|
|
String temp = Build.MODEL;
|
|
return TextUtils.isEmpty( temp ) ? "" : temp;
|
|
}
|
|
|
|
@TargetApi( Build.VERSION_CODES.JELLY_BEAN )
|
|
public static long getLeftMemory( Context context ) {
|
|
|
|
if ( context == null ) {
|
|
return -1;
|
|
}
|
|
|
|
if ( Build.VERSION.SDK_INT >= 16 ) {
|
|
ActivityManager mActivityManager = ( ActivityManager ) context.getSystemService( Context.ACTIVITY_SERVICE );
|
|
ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();
|
|
mActivityManager.getMemoryInfo( mi );
|
|
return ( mi.totalMem - mi.availMem ) / 1000;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
|
|
public static String encode( String string ) {
|
|
try {
|
|
return URLEncoder.encode( string, "UTF-8" );
|
|
} catch ( UnsupportedEncodingException e ) {
|
|
e.printStackTrace();
|
|
return "";
|
|
}
|
|
}
|
|
|
|
public static String decode( String string ) {
|
|
try {
|
|
return URLDecoder.decode( string, "UTF-8" );
|
|
} catch ( UnsupportedEncodingException e ) {
|
|
e.printStackTrace();
|
|
return "";
|
|
}
|
|
}
|
|
|
|
public static String getProcessName( Context context, int pid ) {
|
|
try {
|
|
ActivityManager manager = ( ActivityManager ) context.getSystemService( Context.ACTIVITY_SERVICE );
|
|
for ( ActivityManager.RunningAppProcessInfo processInfo : manager.getRunningAppProcesses() ) {
|
|
if ( processInfo.pid == pid ) {
|
|
return processInfo.processName;
|
|
}
|
|
}
|
|
} catch ( Exception e ) {
|
|
|
|
}
|
|
return "";
|
|
}
|
|
|
|
public static int getStatusBarHeight( Context context ) {
|
|
|
|
if ( context == null ) {
|
|
return 0;
|
|
}
|
|
|
|
int statusBarHeight = 0;
|
|
try {
|
|
Class c = Class.forName( "com.android.internal.R$dimen" );
|
|
Object obj = c.newInstance();
|
|
Field field = c.getField( "status_bar_height" );
|
|
int x = Integer.parseInt( field.get( obj ).toString() );
|
|
statusBarHeight = context.getResources().getDimensionPixelSize( x );
|
|
} catch ( Exception e ) {
|
|
}
|
|
|
|
if ( statusBarHeight > 0 ) {
|
|
return statusBarHeight;
|
|
}
|
|
|
|
try {
|
|
int resourceId = context.getResources().getIdentifier( "status_bar_height", "dimen", "android" );
|
|
if ( resourceId > 0 ) {
|
|
statusBarHeight = context.getResources().getDimensionPixelSize( resourceId );
|
|
}
|
|
} catch ( Exception e ) {
|
|
|
|
}
|
|
|
|
return statusBarHeight;
|
|
}
|
|
|
|
/**
|
|
* 获取某个应用的版本名称
|
|
*
|
|
* @param context 应用上下文
|
|
* @param packageName 包名,如果为空,将获取 context 本身的版本名称
|
|
* @return
|
|
*/
|
|
public static String getVersionName( @NonNull Context context, @Nullable String packageName ) {
|
|
try {
|
|
packageName = TextUtils.isEmpty( packageName ) ? context.getPackageName() : packageName;
|
|
PackageManager packageManager = context.getPackageManager();
|
|
PackageInfo packInfo = packageManager.getPackageInfo( packageName, 0 );
|
|
return packInfo.versionName;
|
|
} catch ( Exception e ) {
|
|
return "";
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取某个应用的版本号
|
|
*
|
|
* @param context 应用上下文
|
|
* @param packageName 包名,如果为空,将获取 context 本身的版本号
|
|
* @return
|
|
*/
|
|
public static int getVersionCode( @NonNull Context context, @Nullable String packageName ) {
|
|
try {
|
|
packageName = TextUtils.isEmpty( packageName ) ? context.getPackageName() : packageName;
|
|
PackageManager packageManager = context.getPackageManager();
|
|
PackageInfo packInfo = packageManager.getPackageInfo( packageName, 0 );
|
|
return packInfo.versionCode;
|
|
} catch ( Exception e ) {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
}
|