andriod 拿手機設備信息 手機IMEI 設備ID等 並http請求


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;
	}

}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章