zoukankan      html  css  js  c++  java
  • umeng 渠道统计 android

    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) {
     
                              }
                      }
             }
    }
    

      

  • 相关阅读:
    Git之GitFlow工作流
    auth
    rbac
    修改或删除windows上的git用户凭证信息
    Linux之shell备份数据库
    解决Navicat 连接服务器数据库报10060问题
    PHP框架学习思路
    shell之hello world
    Linux命令大全
    PHP 各个版本的区别
  • 原文地址:https://www.cnblogs.com/likwo/p/5794071.html
Copyright © 2011-2022 走看看