判断每天是否为首次登陆

//每天首次登陆
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String dateStr = sdf.format(new Date());//最新的时间
LogHelp.i("Device","date:"+dateStr);
String firstLogin = UserData.getFirstLogin();//获取SharedPreference备份的时间
if(firstLogin == null || "".equals(firstLogin) || !dateStr.equals(firstLogin)){//如果是第一次安装或者卸载重装,或者不是同一天,就执行记录
    UserData.setFirstLogin(dateStr);LogHelp.i("Device","firstLogin:");getDeviceInfo();
}

保存时间

    public static void setFirstLogin(String firstLogin){SPHelp.getInstance().put(Constant.SP.firstLogin,firstLogin);}public static String getFirstLogin(){String firstLogin = SPHelp.getInstance().getString(Constant.SP.firstLogin);return firstLogin;}

记录设备信息

/*信息记录*/public void getDeviceInfo(Data data) {TelephonyManager mTm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);//登录设备标识String deviceId = mTm.getDeviceId();LogHelp.i("Device", "deviceId:" + deviceId);//登录渠道标识String channel = App.getAppChannel();LogHelp.i("Device", "channel:" + channel);//登录设备类型String deviceType = "android";//设备序列号String serialNum = mTm.getSimSerialNumber();LogHelp.i("Device", "serialNum:" + serialNum);//手机机型String deviceModel = android.os.Build.MODEL;LogHelp.i("Device", "deviceModel:" + deviceModel);//登陆IDint userId = data.getUserId();LogHelp.i("Device", "userId:" + userId);//登陆凭证String xuehuToken = data.getXuehuToken();LogHelp.i("Device", "xuehuToken:" + xuehuToken);//是否模拟器boolean isEmulator = ("000000000000000".equals(deviceId) ? true : false);LogHelp.i("Device", "isEmulator:" + isEmulator);//Android sdk版本号int sdkInt = Build.VERSION.SDK_INT;LogHelp.i("Device", "sdkInt:" + sdkInt);//设备操作系统和版本String deviceOS = "android" + Build.VERSION.RELEASE;LogHelp.i("Device", "deviceOS:" + deviceOS);//联网方式ConnectivityManager connectionManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);NetworkInfo networkInfo = connectionManager.getActiveNetworkInfo();int connectType = networkInfo.getType();LogHelp.i("Device", "connectType:" + connectType);String typeName = networkInfo.getTypeName();LogHelp.i("Device", "connectType2:" + typeName);//设备MAC地址WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);WifiInfo info = wifi.getConnectionInfo();String deviceMac = info.getMacAddress();LogHelp.i("Device", "deviceMac:" + deviceMac);//设备IP地址int ipAddress = info.getIpAddress();String deviceIp = "";if (ipAddress > 0) {deviceIp = intToIp(ipAddress);} else {deviceIp = getLocalIpAddress();}LogHelp.i("Device", "deviceIp:" + deviceIp);//时间戳毫秒数String timestamp = String.valueOf(System.currentTimeMillis() / 1000);LogHelp.i("Device", "timestamp:" + timestamp);//手机卡imsi号String cardImsi = mTm.getSubscriberId();LogHelp.i("Device", "cardImsi:" + cardImsi);//是否rootboolean isRoot = false;if ((new File("/system/bin/su").exists()) || (new File("/system/xbin/su").exists())){isRoot = true;}LogHelp.i("Device", "isRoot:" + isRoot);//androidIdString androidId = Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID);LogHelp.i("Device", "androidId:" + androidId);//客户端自生成uuidString uuid = new UUID(androidId.hashCode(), ((long) deviceId.hashCode() << 32) | serialNum.hashCode()).toString();LogHelp.i("Device", "uuid:" + uuid);//客户端新UUIDString clientUUID = UUID.randomUUID().toString();LogHelp.i("Device", "clientUUID:" + clientUUID);//设备信息属性String fingerPrint = "";//是否支持蓝牙BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();boolean bluetooth = (mBluetoothAdapter == null ? false : true);LogHelp.i("Device", "bluetooth:" + bluetooth);PackageManager pm = getPackageManager();//是否有相机boolean camera = false;if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA) ||pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT)) {camera = true;}LogHelp.i("Device", "camera:" + camera);//获取apk签名int appSignInt = Integer.parseInt(SignUtils.getSingInfo(this));LogHelp.i("Device", "appSignInt:" + appSignInt);//Dex文件的校验码String apkPath = LoginActivity.this.getPackageCodePath();long crc = 0;try {ZipFile zipfile = new ZipFile(apkPath);ZipEntry dexentry = zipfile.getEntry("classes.dex");crc = dexentry.getCrc();LogHelp.i("Device", "crc:" + crc);} catch (IOException e) {e.printStackTrace();}//是否支持多点触摸boolean multiTouch = pm.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH);LogHelp.i("Device", "multiTouch:" + multiTouch);//是否支持重力感应器SensorManager sm = (SensorManager) getSystemService(SENSOR_SERVICE);Sensor accSensor = sm.getDefaultSensor(Sensor.TYPE_GRAVITY);boolean sensorAcc = (accSensor == null ? false : true);LogHelp.i("Device", "sensorAcc:" + sensorAcc);//是否支持光感器Sensor lightSensor = sm.getDefaultSensor(Sensor.TYPE_LIGHT);boolean sensorLight = (lightSensor == null ? false : true);LogHelp.i("Device", "sensorLight:" + sensorLight);//是否支持磁场传感器Sensor magneticSensor = sm.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);boolean sensorMagnetic = (magneticSensor == null ? false : true);LogHelp.i("Device", "sensorMagnetic:" + sensorMagnetic);//是否支持方向传感器Sensor oriSensor = sm.getDefaultSensor(Sensor.TYPE_ORIENTATION);boolean sensorOri = (oriSensor == null ? false : true);LogHelp.i("Device", "sensorOri:" + sensorOri);LoginAPI.getLoginInfo(deviceId, channel, deviceType, deviceModel, uuid,xuehuToken, userId,deviceOS, connectType, deviceMac, deviceIp, timestamp, cardImsi, isRoot, androidId,bluetooth, camera, appSignInt, clientUUID, crc, fingerPrint, isEmulator, multiTouch,sdkInt, sensorAcc, sensorLight, sensorMagnetic, sensorOri, serialNum,new BaseCallBack<BaseResponseEntity>() {@Overridepublic void onSuccess(Response<BaseResponseEntity> response) {}@Overridepublic void onFailure(StateException exception) {}});}

获取渠道工具类

public static String getAppChannel() {try {return getApplication().getPackageManager().getApplicationInfo(getApplication().getPackageName(), PackageManager.GET_META_DATA).metaData.getString("UMENG_CHANNEL");} catch (PackageManager.NameNotFoundException e) {if (null != e) {LogHelp.e(getApplication().getPackageName(), e);}return "xuehu";}
}

获取签名工具类

import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;import java.io.ByteArrayInputStream;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;/*** apk  签名工具类*/
public class SignUtils {public static String getSingInfo(Context context) {try {PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);android.content.pm.Signature[] signs = packageInfo.signatures;android.content.pm.Signature sign = signs[0];String signNumber = parseSignature(sign.toByteArray());return signNumber;} catch (Exception e) {e.printStackTrace();}return null;}public static String parseSignature(byte[] signature) {try {CertificateFactory certFactory = CertificateFactory.getInstance("X.509");X509Certificate cert = (X509Certificate) certFactory.generateCertificate(new ByteArrayInputStream(signature));String pubKey = cert.getPublicKey().toString();String signNumber = cert.getSerialNumber().toString();return signNumber;} catch (CertificateException e) {e.printStackTrace();}return null;}
}

获取IP地址工具类

private String intToIp(int ipAddress) {return (ipAddress & 0xFF) + "." +((ipAddress >> 8) & 0xFF) + "." +((ipAddress >> 16) & 0xFF) + "." +(ipAddress >> 24 & 0xFF);}public String getLocalIpAddress() {try {for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {NetworkInterface intf = en.nextElement();for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {InetAddress inetAddress = enumIpAddr.nextElement();if (!inetAddress.isLoopbackAddress()) {return inetAddress.getHostAddress().toString();}}}} catch (SocketException e) {e.printStackTrace();}return null;}

每天首次登陆记录设备信息相关推荐

  1. 鸟哥的Linux私房菜(基础篇)-第五章、首次登陆与在线求助 man page

    第五章.首次登陆与在线求助 man page 最近升级日期:2009/08/17 终于可以开始使用Linux这个有趣的系统了!由于Linux系统使用了异步的磁盘/内存数据传输模式,同时又是个多人多任务 ...

  2. 【vn.py】CTP首次登陆修改密码 之 接口调用法

    背景 最近一直在玩vn.py,上一篇文章vn.py开发环境搭建(windows)介绍了如何搭建二次开发环境,解决了一些搭建环境过程中遇到的坑.那么接下来这篇文章将解决运行期间的第一个问题. 开始vn. ...

  3. FlowJo正版软件首次登陆中国,加速精准医疗水平发展

    上海2018年11月13日电 /美通社/ -- 2018年11月9日,在第十三届全国免疫学学术大会上,BD中国隆重宣布,FlowJo流式数据分析软件V10.5.2版本正式上市.这是FlowJo流式数据 ...

  4. 第五章、首次登陆与在线求助 man page

    终于可以开始使用Linux这个有趣的系统了!由于Linux系统使用了异步的磁盘/内存数据传输模式,同时又是个多人多任务的环境, 所以你不能随便的不正常关机,关机有一定的程序喔!错误的关机方法可能会造成 ...

  5. 经典压缩软件7-Zip首次登陆Linux免费开源!

    说起压缩解压软件,如今国内主流的肯定是WinRAR,曾经是WinZip,但还有个不容忽视的好东西,它就是7-Zip,压缩率高,而且是开源免费的. 近日,7-Zip正式登陆Linux系统,发布了第一个版 ...

  6. 【linux】Linux查看服务器登陆用户信息命令(w、last、who)详解

    目  录 1 背       景 2 命令详解 2.1 w命令 2.1.1 参数说明 2.1.2 实例 2.1.3 显示字段说明 2.2 last命令 2.2.1 参数说明 2.2.2 实例 2.3 ...

  7. mysql首次_mysql首次登陆任务

    WINDOWS下没有mysql服务 //卸载mysql服务 mysqld --remove mysql //手动安装mysql服务 mysqld -install //启动mysql net star ...

  8. AD域首次登陆修改密码设置

    AD域首次登陆修改密码设置 设置pwdLastSet属性,为0首次登陆必须修改密码. Csvde:批量导入.导出AD帐户 zhangyahui关注0人评论8880人阅读2011-01-17 11:31 ...

  9. 微信开发者工具首次登陆提示网络连接失败

    微信开发者工具首次登陆提示网络连接失败 Error:getaddrinfo ENOTFOUND open.weixin.qq.com 首次下载并登陆微信开发者工具时,可能会遇到网络连接失败的问题. 此 ...

最新文章

  1. 开发日记-20190627 关键词 读书笔记《Linux 系统管理技术手册(第二版)》DAY 4
  2. WDS部署服务之五高级功能
  3. 从零开始webpack搭建项目
  4. Java基础知识回顾--正则表达式
  5. t检验自由度的意义_统计学常用概念:T检验、F检验、卡方检验、P值、自由度...
  6. Pr:Lumetri 颜色
  7. 2021-03-29
  8. uushare.com(原uubox.net)的功能简介
  9. MAC关闭SIP:system integrity protection is on, some features will not be available
  10. 未来大龄程序员出路有哪些?
  11. JavaOpencv实现答题卡扫描 银行卡号码截取
  12. Fleck webSocket
  13. 耗时2天,我自制了一台体感游戏机
  14. Python tutrle画棋盘格
  15. EOS智能合约开发系列(六): eosio.token
  16. 业务流程持续优化的三个方法
  17. 英语语法篇 - 英语的补语
  18. Delivering Smiles:亚马逊的温暖进行时
  19. 银河麒麟踩坑笔记——sh文件设置开机自启
  20. 手机卡变了 发短消息通知

热门文章

  1. 贝叶斯网络结构学习之K2算法(基于FullBNT-1.0.4的MATLAB实现)
  2. .Net IL代码研究
  3. SparkStreaming官方示例程序运行方式
  4. 面向对象之内置方法(简单)、组合。以及接口归一化设计与抽象类
  5. ZigZag Conversion
  6. 40多个漂亮的网页表单设计实例
  7. 谈谈Visual Studio的缺点,比较Eclipse
  8. 使用PaupGUI软件合并一致性树consensus tree
  9. 初学Java--计算器
  10. dubbo被阿里放弃原因_中间件小姐姐直播“带货”——阿里程序员必知的插件