1、配置AndroidManifest.xml,添加权限

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

2 在应用程序的 Application类的onCreate方法中调用Test类中的sendMessage方法,在方法中传入本应用的Appkey。

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Method;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.Manifest.permission;
import android.content.Context;
import android.content.pm.PackageManager;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.os.Environment;
import android.provider.Settings.Secure;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.Log; public class Test {
private static final Pattern pattern = Pattern.compile("UTDID\">([^<]+)"); /**
* * send message To Server * * @param context * android Context. * @param*
* appkey * umeng appkey
*
* @throws UnsupportedEncodingException
*/
@SuppressWarnings("deprecation")
public void sendMessage(Context context, String appkey)
throws UnsupportedEncodingException {
StringBuilder sber = new StringBuilder();
sber.append("https://ar.umeng.com/stat.htm?");
if (!TextUtils.isEmpty(appkey)) {
sber.append("ak=").append(appkey);
} String devicename = Build.MODEL; if (!TextUtils.isEmpty(devicename)) {
sber.append("&device_name=").append(
URLEncoder.encode(devicename, "UTF-8"));
} TelephonyManager tm = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
PackageManager pm = context.getPackageManager(); if (pm.checkPermission(permission.READ_PHONE_STATE,
context.getPackageName()) == PackageManager.PERMISSION_GRANTED) {
String imei = tm.getDeviceId(); if (!TextUtils.isEmpty(imei)) {
sber.append("&imei=").append(URLEncoder.encode(imei,"UTF-8"));
}
} if (pm.checkPermission(permission.ACCESS_WIFI_STATE,
context.getPackageName()) == PackageManager.PERMISSION_GRANTED) { WifiManager wifi = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifi.getConnectionInfo();
String mac = info.getMacAddress(); // String mac = tm.getDeviceId();
if (!TextUtils.isEmpty(mac)) {
sber.append("&mac=").append(URLEncoder.encode(mac,"UTF-8"));
}
} String androidId = Secure.getString(context.getContentResolver(),
Secure.ANDROID_ID);
if (!TextUtils.isEmpty(androidId)) {
sber.append("&android_id=").append(URLEncoder.encode(androidId,"UTF-8"));
} String utdid = getUTDid(context);
if (!TextUtils.isEmpty(utdid)) {
sber.append("&utdid=").append(URLEncoder.encode(utdid,"UTF-8"));
} HttpURLConnection conn = null;
try { conn = (HttpURLConnection) new URL(sber.toString())
.openConnection(); conn.setRequestMethod("GET");
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
if (Integer.parseInt(Build.VERSION.SDK) < Build.VERSION_CODES.FROYO) {
System.setProperty("http.keepAlive", "false");
}
int code = conn.getResponseCode();
if (code == 200) {
InputStream inputStream = conn.getInputStream(); // do something
} else {
Log.e("test", "status code: " + code);
}
} catch (Exception e) {
System.out.print(e.getMessage());
} finally {
if (conn != null) {
conn.disconnect();
}
}
} /**
* * get UTDID * * @param context * @return
*/
private String getUTDid(Context context) {
try {
Class<?> utdevice = Class.forName("com.ut.device.UTDevice");
Method reMethod = utdevice.getMethod("getUtdid", Context.class);
return (String) reMethod.invoke(null, context);
} catch (Exception e) {
return readNativeFile(context);
}
} //get mac /**
* * read native file method * * @param context * @return
*/
private String readNativeFile(Context context) {
File f = getFile(context);
if (f == null || !f.exists()) {
return null;
}
try {
FileInputStream fis = new FileInputStream(f);
try {
return parseId(readStreamToString(fis));
} finally {
safeClose(fis);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* * java pattern parse native utdid * * @param content * @return
*/
private String parseId(String content) {
if (content == null) {
return null;
}
Matcher matcher = pattern.matcher(content);
if (matcher.find()) {
return matcher.group(1);
}
return null;
} /** * read native file * * @param context * @return */ private File getFile(Context context) {
PackageManager pm = context.getPackageManager();
if (pm.checkPermission(permission.WRITE_EXTERNAL_STORAGE,
context.getPackageName()) == PackageManager.PERMISSION_GRANTED) {
return null;
}
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
File sdCardDir = Environment.getExternalStorageDirectory();
try {
return new File(sdCardDir.getCanonicalPath(),
".UTSystemConfig/Global/Alvin2.xml");
} catch (Exception ignore) {
}
}
return null;
} /**
* * convert inputstream to String * * @param input * @return * @throws
* IOException
* */
private String readStreamToString(InputStream input) throws IOException {
InputStreamReader reader = new InputStreamReader(input);
char[] buffer = new char[1024];
int n = 0;
StringWriter writer = new StringWriter();
while (-1 != (n = reader.read(buffer))) {
writer.write(buffer, 0, n); }
return writer.toString();
} /**
* * close io stream * * @param is
*/
private void safeClose(InputStream is) {
if (is != null) {
try {
is.close();
} catch (Exception e) { }
}
}
}

  

umeng 渠道统计 android的更多相关文章

  1. umeng 渠道统计ios

    1. 使用前提:需要在工程中添加依赖框架:AdSupport.framework 和 Security.framework 2.在AppDelegate.m文件中的-(BOOL)application ...

  2. App渠道统计方法全面解析 总有一种适合你

    一.App渠道统计对于App推广运营的重要性 (理解App渠道统计重要性的老司机,请直接移步到第二部分) App服务的竞争重点已经由功能竞争转向市场和运营的竞争,而App的推广与运营离不开App渠道统 ...

  3. openinstall渠道统计工具介绍

    大家好,今天给大家介绍一下如何使用openinstall 来实现APP 渠道统计,做运营推广的朋友应该对渠道统计并不陌生,之前一般都是让技术的同事打渠道包方式进行渠道统计,而且只有安卓才能打渠道包.o ...

  4. 免打包:简单、灵活、便捷的APP渠道统计方法

    相信做过APP运营推广的小伙伴们应该对APP渠道统计并不陌生吧.APP推广运营人员需要根据数据来评估渠道推广的效果,找到最适合自家APP的渠道,有针对性的投放,不断完善推广策略,这样才能更加精准.有效 ...

  5. 【python调用windows CLI】调用adb统计Android app的流量消耗

    主要记录python如何调用windows CLI 手机连接PC,adb devices可以看到手机sn 通过adb 获取指定app的processID UID 读取Android  /proc/ne ...

  6. jacoco统计Android手工测试覆盖率并自动上报服务器

    改进了几个点 1. 不用借助Instrumentation启动,正常启动即可: 2. 测试代码不用push到主分支,主分支代码拉到本地后用git apply patch方式合并覆盖率代码: 3. 测试 ...

  7. 实现统计 android手机 CPU使用率

    # -*- coding:utf-8 -*- ''' Created on Sep 10, 2018 @author: SaShuangYiBing ''' import subprocess imp ...

  8. android分渠道打包,监测日活量统计(基于友盟SDK)

    客服说要看App日活,让加个统计功能. (我们技术部已经混到客服部都能直接提需求的地步) 首先接入友盟统计的SDK,在项目外层的build.gradle中添加依赖'https://dl.bintray ...

  9. Android应用发布后的统计——百度移动统计的应用

    一个App发布到各个渠道之后,我们需要采集不同渠道的一些信息,比如app在运行过程中产生的一些异常信息,app在各个android版本的分布,以及各个app版本的分布,各渠道的用户数,用户忠诚度等等信 ...

随机推荐

  1. 天气webservices

    Web现状 Web服务 概念 具有web服务 构成 UDDI WSDL 天气预报 web服务现状     记的以前看VB.NET时中间就介绍了WSDL,而今又学到web服务,所以用天气预报的实例学习一 ...

  2. SQL常用数据库结构升级语句

    修改视图 --SQL Server 2005 GO IF EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[e_ ...

  3. Azure ARM (10) ARM模式下的虚拟机和Classic Model虚拟机的区别

    <Windows Azure Platform 系列文章目录> 本文内容比较多,请大家仔细阅读,谢谢! 请读者注意,在Azure ARM平台,有两种虚拟机模式:经典虚拟机和ARM虚拟机 A ...

  4. Windows Azure Cloud Service (36) 在Azure Cloud Service配置SSL证书

    <Windows Azure Platform 系列文章目录> 在某些时候,我们需要在Azure PaaS Cloud Service配置HTTPS连接.本章将介绍如何在本地创建证书,然后 ...

  5. C++二维码相关库编译

    一.瞎想 坐在地铁上闲来无聊,突然想到了二维码,顺手就百度了下相关的资料,目前C++二维码相关的库不多,也就zbar(开源中国上下了半天也没下载下来).zxing,不过这两个库据说都是解析二维码的,不 ...

  6. QCustomplot使用分享(七) 层(完结)

    一.分层绘制 一直说要讲2.0.0版本,但总是想把1.3.2版本拿出来比较一下,这篇文章也不例外.QCustomPlot2.0.0beta版本比1.3.2release版本有一个很大的改进那就是分层绘 ...

  7. Swift 2.2发布

    Swift 2.2 发布了.支持linux平台.Swift是一种使用现代的安全设计方式和软件设计模式构建的通用编程语言.该版本语言更新如下: SE-0001: Allow (most) keyword ...

  8. C#编程总结(二)多线程基础

    C#编程总结(二)多线程基础 无论您是为具有单个处理器的计算机还是为具有多个处理器的计算机进行开发,您都希望应用程序为用户提供最好的响应性能,即使应用程序当前正在完成其他工作.要使应用程序能够快速响应 ...

  9. 习题: codevs 2492 上帝造题的七分钟2 解题报告

    这道题是受到大犇MagHSK的启发我才得以想出来的,蒟蒻觉得自己的代码跟MagHSK大犇的代码完全比不上,所以这里蒟蒻就套用了MagHSK大犇的代码(大家可以关注下我的博客,友情链接就是大犇MagHS ...

  10. android 设置textview跑马灯效果

    head_tv1.setEllipsize(TextUtils.TruncateAt.MARQUEE);head_tv1.setSingleLine(true);head_tv1.setSelecte ...