【问题标题】:How to log android phone properties?如何记录安卓手机属性?
【发布时间】:2017-05-16 13:14:59
【问题描述】:

我想记录一切以供用户实验。但我也想记录android手机设备ID,手机品牌,应用版本是什么......这样的。

Firebase Analythics 和 Appsee 正在这样做。我从哪里开始?

编辑:

想想我会写一个SDK,用这个SDK可以学习一切。

【问题讨论】:

  • 崩溃日志有很多选项 1) Firebase Analythics 2) Fabric

标签: android logging mobile


【解决方案1】:
public String getDeviceName () {
    String manufacturer = Build.MANUFACTURER;
    String model = Build.MODEL;
    if (model.startsWith (manufacturer)) {
        return capitalize (model);
    }
    else {
        return capitalize (manufacturer) + " " + model;
    }
}

public static int getAppVersion () {
    try {
        PackageInfo packageInfo = MainApplication.getContext ().getPackageManager ()
                .getPackageInfo (MainApplication.getContext ().getPackageName (), 0);
        return packageInfo.versionCode;
    } catch (PackageManager.NameNotFoundException e) {
        // should never happen
        throw new RuntimeException ("Could not get package name: " + e);
    }
}

【讨论】:

    【解决方案2】:

    这是获取设备属性代码的示例

    public static String getAPIlevel() {
        return "Android API :" + Build.VERSION.SDK_INT;
    }
    
    public static String getDeviceName() {
        String manufacturer = Build.MANUFACTURER;
        String model = Build.MODEL;
        if (model.startsWith(manufacturer)) {
            return SubUtils.capitalize(model);
        } else {
            return SubUtils.capitalize(manufacturer) + " " + model;
        }
    }
    
    public static String getDeviceVersion(Context activity) {
        String v;
        try {
            v = activity.getApplication().getPackageManager().getPackageInfo(activity.getPackageName(), 0).versionName;
            return v.replace("-staging", "");
        } catch (PackageManager.NameNotFoundException e) {
            return null;
        }
    }
    
    @SuppressLint("HardwareIds")
    public static String getUDID(Context activity) {
        if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
            TelephonyManager tm = (TelephonyManager) activity.getSystemService(Context.TELEPHONY_SERVICE);
            String tmDevice = "" + tm.getDeviceId();
            String tmSerial = "" + tm.getSimSerialNumber();
            String androidId = "" + Settings.Secure.getString(activity.getContentResolver(), Settings.Secure.ANDROID_ID);
            UUID deviceUuid = new UUID(androidId.hashCode(), ((long) tmDevice.hashCode() << 32) | tmSerial.hashCode());
    
            return deviceUuid.toString();
        } else {
            return Settings.Secure.getString(activity.getContentResolver(), Settings.Secure.ANDROID_ID);
        }
    }
    

    您可以使用AndroidCodeUtils获取更完整的设备访问信息

    【讨论】:

    • 不要传递activity上下文,可能会导致泄漏,或者有时会破坏功能(如果activity实例不能给出上下文,在finish或destroy的情况下)
    猜你喜欢
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    相关资源
    最近更新 更多