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. js页面跳转整理

    js页面跳转整理 js方式的页面跳转1.window.location.href方式    <script language="javascript" type=" ...

  2. Asp.Net 高性能ORM框架 SqlSugar.ORM 2.8

    3.0最新API: http://www.cnblogs.com/sunkaixuan/p/5911334.html 1.前言/Preface SqlSugar从去年到现在已经一年了,版本从1.0升到 ...

  3. JS魔法堂:初探传说中的setImmediate函数

    一.前言   由于JavaScript程序为单线程,因此在执行长时间的操作时(如循环和递归操作)到导致UI线程长期被阻塞,无法响应用户操作请求(如点击按钮等),让用户体验大打折扣.于是想到将一个长时间 ...

  4. Moon转告给你一个比Log4net更好日志框架--TracerX Logger 及其对应的日志查看器

    一.介绍 TracerX logger是一个易于上手,且拥有众多高级特性的.NET日志框架. 它能够发送输出结果到多目的地(循环文件.事件日志等....).它也能生成文本和二进制文件.它拥有一个强大的 ...

  5. winform控件

    公共控件:1.Button: Enabled - 开始不可用 Visible -不可视(用来设置权限,取用户看不见的值)2.CheckBox .CheckListBox -复选框,复选框组 3.Com ...

  6. LINQ to SQL语句(3)之Count/Sum/Min/Max/Avg

    适用场景:统计数据吧,比如统计一些数据的个数,求和,最小值,最大值,平均数. Count 说明:返回集合中的元素个数,返回INT类型:不延迟.生成SQL语句为:SELECT COUNT(*) FROM ...

  7. 使用MVVM-Sidekick开发Universal App(一)

    终于要迈进Universal的大坑了,还有点小激动呢. CurrencyExchanger 掌中汇率是我前几年发布在Windows Phone商店中的一个应用,当时是WP7版本,下载链接:http:/ ...

  8. asp.net(c#)将彩色图片变灰阶图片

    代码如下: using System; using System.Collections; using System.Configuration; using System.Data; using S ...

  9. myeclipse中的文件内容被覆盖如何恢复

    今天无意中,运行文件把原先的文件给覆盖掉了,通过查阅资料发现可以通过这样去恢复 点击被覆盖后的文件------->右击--------->选择replace with------>p ...

  10. ARP (地址解析协议)

    地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议.主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机, ...