package com.pyj.common;
import java.util.UUID;
import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.NetworkInfo.State;
import android.net.Uri;
import android.os.Environment;
import android.telephony.TelephonyManager;
import android.util.Log;
/**
* 移动设备相关信息类
* */
public class DeviceInfo {
private Context context;
private float scale;
private float screenWidth;
private float screenHeight;
private DeviceInfo(Context c) {
context = c;
instance = this;
// scale = context.getResources().getDisplayMetrics().density;
}
public static void init(Context c) {
new DeviceInfo(c);
}
public float getScreenWidth() {
return screenWidth;
}
public void setScreenWidth(float screenWidth) {
this.screenWidth = screenWidth;
}
public float getScreenHeight() {
return screenHeight;
}
public void setScreenHeight(float screenHeight) {
this.screenHeight = screenHeight;
}
public float getScale() {
return scale;
}
public void setScale(float scale) {
this.scale = scale;
}
public static DeviceInfo instance;
/** 是否有可用的网络 */
public static boolean isNetWorkEnable(Context context) {
// return isWifi(context)|| isMobile(context);
return isNetAvailable(context);
}
/**
* @Description Checking if wifi is available
* @param context
* Context
* @return true: wifi network is available, false: wifi network is
* unavailable.
*/
public static boolean isWifi(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (ni == null)
return false;
NetworkInfo.State st = ni.getState();
return ni.getState() == State.CONNECTED;
// boolean isWifiAvail = ni.isAvailable();
// boolean isWifiConnect = ni.isConnected();
// return isWifiAvail && isWifiConnect;
}
/**
* @Description Checking if Mobile network is available
* @param context
* Context
* @return true: mobile network is available, false: mobile network is
* unavailable.
*/
public static boolean isMobile(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (ni == null)
return false;
return ni.getState() == State.CONNECTED;
// boolean isMobileAvail = ni.isAvailable();
// boolean isMobileConnect = ni.isConnected();
// return isMobileAvail && isMobileConnect;
}
/**
* @Description Checking if Mobile network is available
* @param context
* Context
* @return true: mobile network is available, false: mobile network is
* unavailable.
*/
public static boolean isNetAvailable(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
if (ni == null)
return false;
return ni.getState() == State.CONNECTED;
}
/** 是否有sd卡 */
public static boolean isSdcardExist() {
String status = Environment.getExternalStorageState();
if (status.equals(Environment.MEDIA_MOUNTED)) {
return true;
} else {
return false;
}
}
public static int getNetWorkType(Context context) {
if (isWifi(context))
return -1;
TelephonyManager telephoneManager = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
return telephoneManager.getNetworkType();
}
public static final String CTWAP = "ctwap";
public static final String CTNET = "ctnet";
public static final String CMWAP = "cmwap";
public static final String CMNET = "cmnet";
public static final String WAP_3G = "3gwap";
public static final String NET_3G = "3gnet";
public static final String UNIWAP = "uniwap";
public static final String UNINET = "uninet";
public static final int TYPE_NET_WORK_DISABLED = 0;// 网络不可用
public static final int TYPE_CM_CU_WAP = 4;// 移动联通wap10.0.0.172
public static final int TYPE_CT_WAP = 5;// 电信wap 10.0.0.200
public static final int TYPE_OTHER_NET = 6;// 电信,移动,联通,wifi 等net网络
public static Uri PREFERRED_APN_URI = Uri
.parse("content://telephony/carriers/preferapn");
public static String getNetWorkName(Context context) {
if (isWifi(context))
return "wifi";
TelephonyManager telephoneManager = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
final int netType = telephoneManager.getNetworkType();
// 注意二:
// 判断是否电信wap:
// 不要通过getExtraInfo获取接入点名称来判断类型,
// 因为通过目前电信多种机型测试发现接入点名称大都为#777或者null,
// 电信机器wap接入点中要比移动联通wap接入点多设置一个用户名和密码,
// 所以可以通过这个进行判断!
final Cursor c = context.getContentResolver().query(PREFERRED_APN_URI,
null, null, null, null);
if (c != null) {
c.moveToFirst();
final String user = c.getString(c.getColumnIndex("user"));
if (user != null) {
if (user.startsWith(CTWAP))
return CTWAP;
else if(user.startsWith(CTNET))
return CTNET;
}
}
c.close();
ConnectivityManager connectionManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectionManager.getActiveNetworkInfo();
// 注意三:
// 判断是移动联通wap:
// 其实还有一种方法通过getString(c.getColumnIndex("proxy")获取代理ip
// 来判断接入点,10.0.0.172就是移动联通wap,10.0.0.200就是电信wap,但在
// 实际开发中并不是所有机器都能获取到接入点代理信息,例如魅族M9 (2.2)等...
// 所以采用getExtraInfo获取接入点名字进行判断
String netMode = networkInfo.getExtraInfo();
if (netMode != null) {
// 通过apn名称判断是否是联通和移动wap
netMode = netMode.toLowerCase();
if (netMode.equals(CMWAP)) {
return CMWAP;
} else if (netMode.equals(WAP_3G)) {
return WAP_3G;
} else if (netMode.equals(UNIWAP)) {
return UNIWAP;
}else if (netMode.equals(CMNET)) {
return CMNET;
} else if (netMode.equals(NET_3G)) {
return NET_3G;
}else if (netMode.equals(UNINET))
return UNINET;
}
return netMode+" netType:"+netType;
}
public static boolean is3G(Context context) {
TelephonyManager telephoneManager = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
final int type = telephoneManager.getNetworkType();
switch (type) {
// 联通3g
case TelephonyManager.NETWORK_TYPE_UMTS:
case TelephonyManager.NETWORK_TYPE_HSDPA:
// 电信3g
case TelephonyManager.NETWORK_TYPE_EVDO_0:
case TelephonyManager.NETWORK_TYPE_EVDO_A:
return true;
// 移动或者联通2g
case TelephonyManager.NETWORK_TYPE_GPRS:
case TelephonyManager.NETWORK_TYPE_EDGE:
// 电信2g
case TelephonyManager.NETWORK_TYPE_CDMA:
return false;
default:
return false;
}
}
/**
* 获取屏幕分辨率
* */
public static int getResolution(Activity act) {
int Width = 0;
int Height = 0;
Width = act.getWindowManager().getDefaultDisplay().getWidth();
Height = act.getWindowManager().getDefaultDisplay().getHeight();
return Width * Height;
}
public static boolean bChineseVersion() {
return instance.context.getResources().getConfiguration().locale
.toString().contains("zh");
}
private static String deviceId;
public static String getDeviceInfo(Context context) {
if (deviceId != null)
return deviceId;
TelephonyManager tel = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
try {
deviceId = tel.getDeviceId();
} catch (Exception e) {
e.printStackTrace();
}
if (deviceId == null) {
deviceId = instance.getAndroidId();
// Log.d("client=", deviceId);
}
// System.out.println("devicId==="+"model=" + android.os.Build.MODEL +
// ",release="
// + android.os.Build.VERSION.RELEASE + ",sim=" + sim
// + ",deviceId=" + dId);
// deviceId = "model=" + android.os.Build.MODEL + ",release="
// + android.os.Build.VERSION.RELEASE + ",sim=" + sim
// + ",deviceId=" + dId);
return deviceId;
}
private String getAndroidId() {
return android.provider.Settings.Secure.getString(
context.getContentResolver(),
android.provider.Settings.Secure.ANDROID_ID);
}
public static String getUUID() {
return UUID.randomUUID().toString();
}
}