友盟统计使用及添加测试设备(设备ID及Mac地址识别)

来源:互联网 发布:软件功能点估算 编辑:程序博客网 时间:2024/05/17 01:41

友盟统计新增用户,日活,抓bug日志


注册账号并申请Appkey

拿到自己App的Appkey之后,Manifest中检查以下权限,没有则添加


<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.INTERNET"></uses-permission><uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>


Manifest中添加Appkey,Channel

<meta-data android:value="YOUR_APP_KEY" android:name="UMENG_APPKEY"></meta-data><meta-data android:value="Channel ID" android:name="UMENG_CHANNEL"/>

YOUR_APP_KEY就是我们上一步骤中申请的Appkey,Appkey可在统计后台的 统计分析->设置->应用信息页面查看

相应Activity中调用代码

public void onResume() {super.onResume();MobclickAgent.onResume(this);}public void onPause() {super.onPause();MobclickAgent.onPause(this);}
注意:如果Activity之间有继承或者控制关系请不要同时在父和子Activity中重复添加onPause和onResume方法,否则会造成重复统计,导致启动次数异常增高

调用Process.kill或者System.exit之类的方法杀死进程,请务必在此之前调用MobclickAgent.onKillProcess(Context context)方法,用来保存统计数据

可在友盟后台添加测试设备,通过设备ID及Mac地址识别,友盟提供的方法如下

public static boolean checkPermission(Context context, String permission) {    boolean result = false;    if (Build.VERSION.SDK_INT >= 23) {        try {            Class<?> clazz = Class.forName("android.content.Context");            Method method = clazz.getMethod("checkSelfPermission", String.class);            int rest = (Integer) method.invoke(context, permission);            if (rest == PackageManager.PERMISSION_GRANTED) {                result = true;            } else {                result = false;            }        } catch (Exception e) {            result = false;        }    } else {        PackageManager pm = context.getPackageManager();        if (pm.checkPermission(permission, context.getPackageName()) == PackageManager.PERMISSION_GRANTED) {            result = true;        }    }    return result;}public static String getDeviceInfo(Context context) {    try {        org.json.JSONObject json = new org.json.JSONObject();        android.telephony.TelephonyManager tm = (android.telephony.TelephonyManager) context                .getSystemService(Context.TELEPHONY_SERVICE);        String device_id = null;        if (checkPermission(context, permission.READ_PHONE_STATE)) {            device_id = tm.getDeviceId();        }        String mac = null;        FileReader fstream = null;        try {            fstream = new FileReader("/sys/class/net/wlan0/address");        } catch (FileNotFoundException e) {            fstream = new FileReader("/sys/class/net/eth0/address");        }        BufferedReader in = null;        if (fstream != null) {            try {                in = new BufferedReader(fstream, 1024);                mac = in.readLine();            } catch (IOException e) {            } finally {                if (fstream != null) {                    try {                        fstream.close();                    } catch (IOException e) {                        e.printStackTrace();                    }                }                if (in != null) {                    try {                        in.close();                    } catch (IOException e) {                        e.printStackTrace();                    }                }            }        }        json.put("mac", mac);        if (TextUtils.isEmpty(device_id)) {            device_id = mac;        }        if (TextUtils.isEmpty(device_id)) {            device_id = android.provider.Settings.Secure.getString(context.getContentResolver(),                    android.provider.Settings.Secure.ANDROID_ID);        }        json.put("device_id", device_id);        return json.toString();    } catch (Exception e) {        e.printStackTrace();    }    return null;}                  
调用getDeviceInfo方法,其结果可输出设备信息

1 0