Phone初始化 BaseApplication
Phone.initialize(this);
Phone 类
package com.qpp.util;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.os.Environment;
import android.os.StatFs;
import android.telephony.TelephonyManager;
import android.util.DisplayMetrics;
import android.view.Display;
/**
* 手机信息收集 添加权限 <uses-permission
* Android:name="android.permission.READ_PHONE_STATE" /> <!-- 在SDCard中创建与删除文件权限
* --> <uses-permission
* android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <!--
* 往SDCard写入数据权限 --> <uses-permission
* android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
*/
public class Phone {
/**
* 手机屏幕高度
*/
public static int height = 0;
/**
* 手机屏幕宽度
*/
public static int width = 0;
/**
* 手机宽度上的像素
*/
public static int widthPixels = 0;
/**
* 手机高度上的像素
*/
public static int heightPixels = 0;
/**
* 手机IMEI 设备ID
*/
public static String IMEI = "";
/**
* 手机 IESI 订阅者ID
*/
public static String IESI = "";
/**
* 手机型号 MODEL
*/
public static String MODEL = "";
/**
* 手机号码 有的能拿到,有的不可以,这个要看生产商是否注册了
*/
public static String numer = "";
/**
* sdk版本
*/
public static String sdk = "";
/**
* 系统版本号
*/
public static String VERSION_RELEASE = "";
/**
* The name of the underlying board, like "goldfish".
*/
public static String BOARD = "";
/**
* The system bootloader version number.
*/
public static String BOOTLOADER = "";
/**
* The brand (e.g., carrier) the software is customized for, if any.
*/
public static String BRAND = "";
/**
* The name of the instruction set (CPU type + ABI convention) of native
* code.
*/
public static String CPU_ABI = "";
/**
* The name of the second instruction set (CPU type + ABI convention) of
* native code.
*/
public static String CPU_ABI2 = "";
/**
* The name of the industrial design.
*/
public static String DEVICE = "";
/**
* A build ID string meant for displaying to the user
*/
public static String DISPLAY = "";
/**
* A string that uniquely identifies this build.
*/
public static String FINGERPRINT = "";
/**
* The name of the hardware (from the kernel command line or /proc).
*/
public static String HARDWARE = "";
public static String HOST = "";
/**
* Either a changelist number, or a label like "M4-rc20".
*/
public static String ID = "";
/**
* The manufacturer of the product/hardware.
*/
public static String MANUFACTURER = "";
/**
* The name of the overall product.
*/
public static String PRODUCT = "";
/**
* The radio firmware version number.
*/
public static String RADIO = "";
/**
* A hardware serial number, if available.
*/
public static String SERIAL = "";
/**
* Comma-separated tags describing the build, like "unsigned,debug".
*/
public static String TAGS = "";
public static long TIME = 0l;
/**
* The type of build, like "user" or "eng".
*/
public static String TYPE = "";
/**
* Value used for when a build property is unknow
*/
public static String UNKNOWN = "";
public static String USER = "";
/**
* 手机MAC地址
*/
public static String MAC = "";
/**
* cpu 型号
*/
public static String CPU_MODE = "";
/**
* cpu频率
*/
public static String CPU_FREQUENCY = "";
/**
* 系统总内存 单位为kb
*/
public static long TOTAL_RAM = 0l;
/**
* 系统剩余内存 单位为kb
*/
public static long AVAIL_RAM = 0l;
/**
* SDCARD总内存 单位为kb
*/
public static long TOTAL_SDCARD = 0l;
/**
* SDCARD剩余内存单位为kb
*/
public static long AVAIL_SDCARD = 0l;
/**
* 总内存
*/
public static long TOTAL_MEMORY = 0l;
/**
* 总剩余内存
*/
public static long TOTAL_REMAIN_MEMORY = 0l;
/**
* 构造方法私有化,不需创造对象
*/
private Phone() {
// TODO Auto-generated constructor stub
}
/**
* app初始化时候调用
*
* @param activity
*/
public static void initialize(Activity activity) {
getPhonWidthAndHeigth(activity);
getPixel(activity);
getInfo(activity);
getPhoneInformation();
getMacAddress(activity);
getCpuInfo();
getTotalMemory(activity);
getSDCARD();
getRAM();
}
/**
* 获取总内存
*/
private static void getRAM() {
// TODO Auto-generated method stub
File path2 = Environment.getDataDirectory();
StatFs stat2 = new StatFs(path2.getPath());
@SuppressWarnings("deprecation")
long blockSize2 = stat2.getBlockSize();
@SuppressWarnings("deprecation")
long totalBlocks2 = stat2.getBlockCount();
@SuppressWarnings("deprecation")
long availableBlocks2 = stat2.getAvailableBlocks();
long totalSize2 = totalBlocks2 * blockSize2;
long availSize2 = availableBlocks2 * blockSize2;
TOTAL_MEMORY = totalSize2;
TOTAL_REMAIN_MEMORY = availSize2;
}
/**
* 获sdc内存
*/
@SuppressWarnings("deprecation")
@SuppressLint("NewApi")
private static void getSDCARD() {
// 得到文件系统的信息:存储块大小,总的存储块数量,可用存储块数量
// 获取sd卡空间
// 存储设备会被分为若干个区块
// 每个区块的大小 * 区块总数 = 存储设备的总大小
// 每个区块的大小 * 可用区块的数量 = 存储设备可用大小
File path = Environment.getExternalStorageDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize;
long totalBlocks;
long availableBlocks;
// 由于API18(Android4.3)以后getBlockSize过时并且改为了getBlockSizeLong
// 因此这里需要根据版本号来使用那一套API
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
blockSize = stat.getBlockSizeLong();
totalBlocks = stat.getBlockCountLong();
availableBlocks = stat.getAvailableBlocksLong();
} else {
blockSize = stat.getBlockSize();
totalBlocks = stat.getBlockCount();
availableBlocks = stat.getAvailableBlocks();
}
/**
* 内存总大小
*
*/
TOTAL_SDCARD = blockSize * totalBlocks;
/**
* 内存可用大小
*/
AVAIL_SDCARD = blockSize * availableBlocks;
}
/**
* 获取系统内存
*/
private static void getTotalMemory(Activity activity) {
ActivityManager mActivityManager = (ActivityManager) activity
.getSystemService(Context.ACTIVITY_SERVICE);
ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();
mActivityManager.getMemoryInfo(mi);
long mTotalMem = 0;
long mAvailMem = mi.availMem;
String str1 = "/proc/meminfo";
String str2;
String[] arrayOfString;
try {
FileReader localFileReader = new FileReader(str1);
BufferedReader localBufferedReader = new BufferedReader(
localFileReader, 8192);
str2 = localBufferedReader.readLine();
arrayOfString = str2.split("\\s+");
mTotalMem = Integer.valueOf(arrayOfString[1]).intValue() * 1024;
localBufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
TOTAL_RAM = mTotalMem;
AVAIL_RAM = mAvailMem;
}
/**
* 手机CPU信息
*/
private static void getCpuInfo() {
String str1 = "/proc/cpuinfo";
String str2 = "";
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++) {
CPU_MODE = CPU_MODE + arrayOfString[i] + " ";
}
str2 = localBufferedReader.readLine();
arrayOfString = str2.split("\\s+");
CPU_FREQUENCY += arrayOfString[2];
localBufferedReader.close();
} catch (IOException e) {
}
}
/**
* 获取手机MAC地址
*/
private static void getMacAddress(Context activity) {
WifiManager wifiManager = (WifiManager) activity
.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
MAC = wifiInfo.getMacAddress();
}
/**
* 获取手机设备信息
*/
@SuppressLint("NewApi")
@SuppressWarnings("deprecation")
private static void getPhoneInformation() {
MODEL = Build.MODEL; // 手机型号
sdk = android.os.Build.VERSION.SDK;
VERSION_RELEASE = Build.VERSION.RELEASE;
BOARD = Build.BOARD;
BOOTLOADER = Build.BOOTLOADER;
BRAND = Build.BRAND;
CPU_ABI = Build.CPU_ABI;
CPU_ABI2 = Build.CPU_ABI2;
DEVICE = Build.DEVICE;
DISPLAY = Build.DISPLAY;
FINGERPRINT = Build.FINGERPRINT;
HARDWARE = Build.HARDWARE;
HOST = Build.HOST;
ID = Build.ID;
MANUFACTURER = Build.MANUFACTURER;
PRODUCT = Build.PRODUCT;
RADIO = Build.RADIO;
SERIAL = Build.SERIAL;
TAGS = Build.TAGS;
TIME = Build.TIME;
TYPE = Build.TYPE;
UNKNOWN = Build.UNKNOWN;
USER = Build.USER;
}
/**
* 获取手机宽度和高度
*
* @param activity
* @return
*/
@SuppressWarnings("deprecation")
private static void getPhonWidthAndHeigth(Activity activity) {
Display display = activity.getWindowManager().getDefaultDisplay();
height = display.getHeight();
width = display.getWidth();
}
/**
* 获取手机像素
*
* @param activity
* @return
*/
private static void getPixel(Activity activity) {
DisplayMetrics dm = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
widthPixels = dm.widthPixels;
heightPixels = dm.heightPixels;
}
/**
* 获取手机标示
*
* @param activity
*/
private static void getInfo(Activity activity) {
TelephonyManager mTm = (TelephonyManager) activity
.getSystemService(Activity.TELEPHONY_SERVICE);
IMEI = mTm.getDeviceId();
IESI = mTm.getSubscriberId();
numer = mTm.getLine1Number();
}
}
通过http请求 传到服务器 get请求 post请求
public abstract class Http implements Runnable {
protected String path;
protected Map<String, Object> params;
protected int connectTimeout = 5 * 1000;// 超时设置
protected int readTimeout = 5 * 1000;// 读取超时
protected String charset = Util.UTF8;
private final static int LEVEL = Thread.MAX_PRIORITY;// 线程等级
public Http(String path) {
// TODO Auto-generated constructor stub
this.path = path;
}
public Http(String path, Map<String, Object> params) {
// TODO Auto-generated constructor stub
this.path = path;
this.params = params;
}
public void request() {
startLoad();
Thread thread = new Thread(this);
thread.setPriority(LEVEL);
thread.start();
}
protected abstract void openConnection();
@Override
public void run() {
// TODO Auto-generated method stub
openConnection();
}
/**
* 开始加载
*/
protected abstract void startLoad();
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public Map<String, Object> getParams() {
return params;
}
public void setParams(Map<String, Object> params) {
this.params = params;
}
public int getConnectTimeout() {
return connectTimeout;
}
public void setConnectTimeout(int connectTimeout) {
this.connectTimeout = connectTimeout;
}
public int getReadTimeout() {
return readTimeout;
}
public void setReadTimeout(int readTimeout) {
this.readTimeout = readTimeout;
}
public String getCharset() {
return charset;
}
public void setCharset(String charset) {
this.charset = charset;
}
}
public abstract class HttpG extends Http {
public HttpG(String path) {
super(path);
// TODO Auto-generated constructor stub
}
public HttpG(String path, Map<String, Object> params) {
super(path, params);
// TODO Auto-generated constructor stub
}
@SuppressLint("NewApi")
@Override
protected void openConnection() {
// TODO Auto-generated method stub
try {
if (path == null || path.isEmpty()) {
loadDeafalt("path is null or path is empty");
return;
}
MyLocation.position();
StringBuffer sb = new StringBuffer(path);
if (path.indexOf("?") > 1)
sb.append("&");
else
sb.append("?");
sb.append("imei=").append(Phone.IMEI).append("&imsi=")
.append(Phone.IESI).append("&mac=").append(Phone.MAC)
.append("&mode=").append(Phone.MODEL).append("&x=")
.append(MyLocation.longitude).append("&y=")
.append(MyLocation.latitude).append("&");
if (params != null && !params.isEmpty()) {
Set<String> keys = params.keySet();
Iterator<String> i = keys.iterator();
while (i.hasNext()) {
String key = i.next();
sb.append(key);
sb.append("=");
sb.append(URLEncoder.encode(params.get(key).toString(),
charset));
sb.append("&");
}
}
path = sb.toString();
XHLog.e(TAG, path);
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setReadTimeout(readTimeout);
conn.setConnectTimeout(connectTimeout);
conn.setRequestProperty("Charset", charset); // 设置编码
conn.setRequestProperty("User-Agent",
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)");
conn.setUseCaches(false);
conn.setDoInput(true);
conn.setDoOutput(false);
conn.connect();
int code = conn.getResponseCode();
InputStream is;
if (code == 200) {
is = conn.getInputStream();
if (is != null)
loaded(is);
else
loaded(Util.string2InputStream("访问成功,但后台无数据放回"));
} else {
is = conn.getErrorStream();
if (is != null)
loadDeafalt(Util.inputStream2String(is));
else
loadDeafalt("返回码不是200,而是" + code);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
loadDeafalt("加载失败,失败信息是" + e.getMessage());
}
}
/**
* 加载完成
*
* @param is
*/
protected abstract void loaded(InputStream is);
/**
* 加载失败
*
* @param string
*/
protected abstract void loadDeafalt(String string);
}
public class HttpGet extends HttpG {
private LoadListen loadListen;
public HttpGet(String path) {
super(path);
// TODO Auto-generated constructor stub
}
public HttpGet(String path, Map<String, Object> params) {
super(path, params);
// TODO Auto-generated constructor stub
}
@Override
protected void startLoad() {
// TODO Auto-generated method stub
if (loadListen != null)
loadListen.startLoad();
}
@Override
protected void loaded(InputStream is) {
// TODO Auto-generated method stub
if (loadListen != null)
loadListen.loaded(Util.inputStream2String(is));
}
@Override
protected void loadDeafalt(String string) {
// TODO Auto-generated method stub
if (loadListen != null)
loadListen.loadDeafalt(string);
}
public void setLoadListen(LoadListen loadListen) {
this.loadListen = loadListen;
}
}
public class HttpGetAsyn extends HttpG {
private final static int START_LOAD = 0;
private final static int LOADED = 1;
private final static int LOAD_DEAFALT = 2;
private String results;
@SuppressLint("HandlerLeak")
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
switch (msg.what) {
case START_LOAD:
if (loadListen != null)
loadListen.startLoad();
break;
case LOADED:
if (loadListen != null)
loadListen.loaded(results);
break;
case LOAD_DEAFALT:
loadListen.loadDeafalt(results);
break;
}
}
};
private LoadListen loadListen;
public HttpGetAsyn(String path) {
super(path);
// TODO Auto-generated constructor stub
}
public HttpGetAsyn(String path, Map<String, Object> params) {
super(path, params);
// TODO Auto-generated constructor stub
}
@Override
protected void loaded(InputStream is) {
// TODO Auto-generated method stub
results = Util.inputStream2String(is);
Message msg = new Message();
msg.what = LOADED;
handler.sendMessage(msg);
}
@Override
protected void loadDeafalt(String string) {
// TODO Auto-generated method stub
results = string;
Message msg = new Message();
msg.what = LOAD_DEAFALT;
handler.sendMessage(msg);
}
@Override
protected void startLoad() {
// TODO Auto-generated method stub
Message msg = new Message();
msg.what = START_LOAD;
handler.sendMessage(msg);
}
public void setLoadListen(LoadListen loadListen) {
this.loadListen = loadListen;
}
}
post请求
public abstract class HttpP extends Http {
private final static String TAG = "com.xiao.hei.http.HttpP";
public HttpP(String path) {
super(path);
// TODO Auto-generated constructor stub
}
public HttpP(String path, Map<String, Object> params) {
super(path, params);
// TODO Auto-generated constructor stub
}
@SuppressLint("NewApi")
@Override
protected void openConnection() {
// TODO Auto-generated method stub
// TODO Auto-generated method stub
try {
if (path == null || path.isEmpty()) {
loadDeafalt("path is null or path is empty");
return;
}
XHLog.e(TAG, path);
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(readTimeout);
conn.setConnectTimeout(connectTimeout);
conn.setDoInput(true); // 允许输入流
conn.setDoOutput(true); // 允许输出流
conn.setUseCaches(false); // 不允许使用缓存
conn.setInstanceFollowRedirects(true);
conn.setRequestMethod("POST"); // 请求方式
conn.setRequestProperty("Charset", charset); // 设置编码
conn.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
conn.connect();
MyLocation.position();
StringBuffer sb = new StringBuffer();
if (path.indexOf("?") > 1)
sb.append("&");
else
sb.append("?");
sb.append("imei=").append(Phone.IMEI).append("&imsi=")
.append(Phone.IESI).append("&mac=").append(Phone.MAC)
.append("&mode=").append(Phone.MODEL).append("&x=")
.append(MyLocation.longitude).append("&y=")
.append(MyLocation.latitude).append("&");
if (params != null && params.size() > 0) {
Iterator<String> it = params.keySet().iterator();
while (it.hasNext()) {
String key = it.next();
String value = params.get(key).toString();
sb.append(key).append("=")
.append(URLEncoder.encode(value, charset))
.append("&");
}
}
XHLog.e(TAG, sb.toString());
DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
dos.write(sb.toString().getBytes());
dos.flush();
dos.close();
int code = conn.getResponseCode();
InputStream is;
if (code == 200) {
XHLog.e(TAG, "成功");
is = conn.getInputStream();
if (is != null)
loaded(is);
else
loaded(Util.string2InputStream("访问成功,服务器无返回值"));
} else {
XHLog.e(TAG, "失败1"+" code="+code);
is = conn.getErrorStream();
if (is != null)
loadDeafalt(Util.inputStream2String(is));
else
loadDeafalt("访问失败,访问code=" + code);
}
} catch (Exception e) {
// TODO: handle exception
loadDeafalt("访问出错了,错误是" + e.getMessage());
XHLog.e(TAG, "失败2");
}
}
/**
* 加载完成
*
* @param is
*/
protected abstract void loaded(InputStream is);
/**
* 加载失败
*
* @param string
*/
protected abstract void loadDeafalt(String string);
}
public class HttpPost extends HttpP {
private LoadListen loadListen;
public HttpPost(String path) {
super(path);
// TODO Auto-generated constructor stub
}
public HttpPost(String path, Map<String, Object> params) {
super(path, params);
// TODO Auto-generated constructor stub
}
@Override
protected void loaded(InputStream is) {
// TODO Auto-generated method stub
if (loadListen != null)
loadListen.loaded(Util.inputStream2String(is));
}
@Override
protected void loadDeafalt(String string) {
// TODO Auto-generated method stub
if (loadListen != null)
loadListen.loadDeafalt(string);
}
@Override
protected void startLoad() {
// TODO Auto-generated method stub
if (loadListen != null)
loadListen.startLoad();
}
public void setLoadListen(LoadListen loadListen) {
this.loadListen = loadListen;
}
}
public class HttpPostAsyn extends HttpP {
private LoadListen loadListen;
private final static int START_LOAD = 0;
private final static int LOADED = 1;
private final static int LOAD_DEAFALT = 2;
private String results;
@SuppressLint("HandlerLeak")
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
switch (msg.what) {
case START_LOAD:
if (loadListen != null)
loadListen.startLoad();
break;
case LOADED:
if (loadListen != null)
loadListen.loaded(results);
break;
case LOAD_DEAFALT:
if (loadListen != null)
loadListen.loadDeafalt(results);
break;
}
}
};
public HttpPostAsyn(String path) {
super(path);
// TODO Auto-generated constructor stub
}
public HttpPostAsyn(String path, Map<String, Object> params) {
super(path, params);
// TODO Auto-generated constructor stub
}
@Override
protected void loaded(InputStream is) {
// TODO Auto-generated method stub
results = Util.inputStream2String(is);
Message msg = new Message();
msg.what = LOADED;
handler.sendMessage(msg);
}
@Override
protected void loadDeafalt(String string) {
// TODO Auto-generated method stub
results = string;
Message msg = new Message();
msg.what = LOAD_DEAFALT;
handler.sendMessage(msg);
}
@Override
protected void startLoad() {
// TODO Auto-generated method stub
Message msg = new Message();
msg.what = START_LOAD;
handler.sendMessage(msg);
}
public void setLoadListen(LoadListen loadListen) {
this.loadListen = loadListen;
}
}