505">3505
        }
3504 3506
    }
3505 3507
3506 3508
    @Override
@ -3508,9 +3510,10 @@ public class MainMapActivity extends Activity implements LocationSource, AMapLoc
3508 3510
        for (String s : perms) {
3509 3511
            LogUtils.e(s);
3510 3512
        }
3513
3511 3514
        if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
3512 3515
            new AppSettingsDialog.Builder(MainMapActivity.this,
3513
                    "该功能需要开启摄像头权限,是否前往开启?").build().show();
3516
                    "该功能需要开启摄像头权限,是否前往开启?").build().show();
3514 3517
        }
3515 3518
    }
3516 3519
@ -3518,6 +3521,26 @@ public class MainMapActivity extends Activity implements LocationSource, AMapLoc
3518 3521
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
3519 3522
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
3520 3523
        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
3524
3525
        switch (requestCode) {
3526
            case READ_PHONE_STATE:
3527
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
3528
                    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
3529
                        return;
3530
                    }
3531
                    TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
3532
                    String deviceId = "";
3533
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
3534
                        deviceId = telephonyManager.getImei();
3535
                    } else {
3536
                        deviceId = telephonyManager.getDeviceId();
3537
                    }
3538
                    ProfileManager.getInstance().setDeviceId(deviceId);
3539
                } else {
3540
                    ProfileManager.getInstance().setDeviceId(ProfileManager.getInstance().getTempDeviceId());
3541
                }
3542
                break;
3543
        }
3521 3544
    }
3522 3545
3523 3546
    private boolean hasCameraPermission() {
@ -6213,5 +6236,64 @@ public class MainMapActivity extends Activity implements LocationSource, AMapLoc
6213 6236
        });
6214 6237
    }
6215 6238
6239
    private void getDeviceId() {
6240
        String deviceId = ProfileManager.getInstance().getDeviceId();
6241
        if (!TextUtils.isEmpty(deviceId)) {
6242
            return;
6243
        }
6244
6245
        TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
6246
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
6247
            int checkPermission = ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.READ_PHONE_STATE);
6248
            if (checkPermission != PackageManager.PERMISSION_GRANTED) { // 未授权,去授权
6249
                ActivityCompat.requestPermissions(MainMapActivity.this, new String[]{Manifest.permission.READ_PHONE_STATE},READ_PHONE_STATE);
6250
            } else {
6251
                deviceId = telephonyManager.getImei();
6252
            }
6253
        } else {
6254
            int checkPermission = ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.READ_PHONE_STATE);
6255
            if (checkPermission != PackageManager.PERMISSION_GRANTED) { // 未授权,去授权
6256
                ActivityCompat.requestPermissions(MainMapActivity.this, new String[]{Manifest.permission.READ_PHONE_STATE},READ_PHONE_STATE);
6257
            } else {
6258
                deviceId = telephonyManager.getDeviceId();
6259
            }
6260
        }
6261
        if (!TextUtils.isEmpty(deviceId )) {
6262
            ProfileManager.getInstance().setDeviceId(deviceId);
6263
        }
6264
    }
6265
6266
    private void loadDmpData() {
6267
        OkHttpUtils.get().url(MainApplication.url + "/zhannew/xd_url.php").build().connTimeOut(3000).readTimeOut(3000)
6268
                .execute(new StringCallback() {
6269
                    @Override
6270
                    public void onError(Call call, Exception e) {
6271
                        e.printStackTrace();
6272
                    }
6273
6274
                    @Override
6275
                    public void onResponse(String response) {
6276
                        String show_url = JsonUtils.getKeyResult(response, "show_url");
6277
                        String click_url = JsonUtils.getKeyResult(response, "click_url");
6278
                        uploadDmp(show_url);
6279
                        sav.setClick_url(click_url);
6280
                    }
6281
                });
6282
    }
6283
6284
    private void uploadDmp(String url) {
6285
        url = Util.generateDmpUrl(url);
6286
        OkHttpUtils.get().url(url).build().connTimeOut(3000).readTimeOut(3000)
6287
                .execute(new StringCallback() {
6288
                    @Override
6289
                    public void onError(Call call, Exception e) {
6290
                        e.printStackTrace();
6291
                    }
6292
6293
                    @Override
6294
                    public void onResponse(String response) {
6295
                    }
6296
                });
6297
    }
6216 6298
6217 6299
}

+ 2 - 15
app/src/main/java/com/electric/chargingpile/activity/MyWebViewActivity.java

@ -54,6 +54,7 @@ import com.electric.chargingpile.util.ImageUitl;
54 54
import com.electric.chargingpile.util.JsonUtils;
55 55
import com.electric.chargingpile.util.MediaUtility;
56 56
import com.electric.chargingpile.util.ToastUtil;
57
import com.electric.chargingpile.util.Util;
57 58
import com.electric.chargingpile.view.AlertDialogTwo;
58 59
import com.google.gson.Gson;
59 60
import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet;
@ -92,7 +93,6 @@ public class MyWebViewActivity extends Activity implements PlatformActionListene
92 93
    private String index = "0";
93 94
    private String mUrl = "";
94 95
    private String advertiser;
95
    private String click_url;
96 96
    private ArrayList<String> list = new ArrayList<>();
97 97
    private String refreshUrl = "";
98 98
    private String currentUrl = "";
@ -123,25 +123,12 @@ public class MyWebViewActivity extends Activity implements PlatformActionListene
123 123
    private void getIntentData() {
124 124
        mUrl = getIntent().getStringExtra("url");
125 125
        advertiser = getIntent().getStringExtra("advertiser");
126
        click_url = getIntent().getStringExtra("click_url");
127 126
        Log.e(TAG, "getIntentData: " + mUrl);
128 127
        if (advertiser!=null && advertiser.equals("1")) {
129
            uploadDmpClick(click_url);
128
            mUrl = Util.generateDmpUrl(mUrl);
130 129
        }
131 130
    }
132 131
133
    private void uploadDmpClick(String url) {
134
        OkHttpUtils.get().url(url).build().connTimeOut(6000).readTimeOut(6000)
135
                .execute(new StringCallback() {
136
                    @Override
137
                    public void onError(Call call, Exception e) {
138
                        e.printStackTrace();
139
                    }
140
                    @Override
141
                    public void onResponse(String response) {
142
                    }
143
                });
144
    }
145 132
146 133
    private void initView() {
147 134
        rl_point = (RelativeLayout) findViewById(R.id.rl_point);

+ 3 - 0
app/src/main/java/com/electric/chargingpile/application/MainApplication.java

@ -10,6 +10,8 @@ import android.os.Bundle;
10 10
import android.os.Environment;
11 11
import android.os.StrictMode;
12 12
import android.support.multidex.MultiDexApplication;
13
import android.telephony.TelephonyManager;
14
import android.text.TextUtils;
13 15
import android.util.Log;
14 16

15 17
import com.amap.api.maps.model.LatLng;
@ -207,6 +209,7 @@ public class MainApplication extends MultiDexApplication {
207 209
        loginRemind();
208 210
        setFestival();
209 211
        initSmallVideo();
212

210 213
    }
211 214

212 215
    public static MainApplication getInstance() {

+ 10 - 0
app/src/main/java/com/electric/chargingpile/data/Adin.java

@ -17,6 +17,16 @@ public class Adin implements Serializable {
17 17
    private String timer;
18 18
    private int is_dui;
19 19
20
    public String getAdvertiser() {
21
        return advertiser;
22
    }
23
24
    public void setAdvertiser(String advertiser) {
25
        this.advertiser = advertiser;
26
    }
27
28
    private String advertiser;
29
20 30
    public int getIs_dui() {
21 31
        return is_dui;
22 32
    }

+ 25 - 0
app/src/main/java/com/electric/chargingpile/manager/ProfileManager.java

@ -3,6 +3,9 @@ package com.electric.chargingpile.manager;
3 3
import android.content.Context;
4 4
import android.util.Log;
5 5

6
import com.electric.chargingpile.application.MainApplication;
7
import com.electric.chargingpile.util.PhoneUtils;
8

6 9
public class ProfileManager {
7 10

8 11
    private static final String KEY_USERNAME = "key_username";
@ -64,8 +67,11 @@ public class ProfileManager {
64 67
    private static final String KEY_CLICKED_USER_PUBLISH_TOPIC = "key_clicked_user_publish_topic";
65 68
    private static final String KEY_CLICKED_USER_PUBLISH_ROLE = "key_clicked_user_publish_role";
66 69
    private static final String KEY_MAKE_SURE_NETWORK_FOR_VIDEO = "key_make_sure_network_for_video";
70
    private static final String KEY_DEVICE_ID = "key_device_id";
67 71

68 72
    private static ProfileManager instance;
73
    private String deviceId;
74
    private String tempDeviceId;
69 75

70 76
    public static ProfileManager getInstance() {
71 77
        if (instance == null) {
@ -626,4 +632,23 @@ public class ProfileManager {
626 632
    public void setMsgChargingStatusNo(Context context, int id) {
627 633
        PreferenceManager.getInstance(context).putInt(KEY_MESSAGE_STATUS_CHARGING_NO, id);
628 634
    }
635

636
    public void setDeviceId(String value) {
637
        PreferenceManager.getInstance(MainApplication.context).putString(KEY_DEVICE_ID, value);
638
        deviceId = value;
639
    }
640

641
    public String getDeviceId() {
642
        if (deviceId == null) {
643
            deviceId = PreferenceManager.getInstance(MainApplication.context).getString(KEY_DEVICE_ID, "");
644
        }
645
        return deviceId;
646
    }
647

648
    public String getTempDeviceId() {
649
        if (tempDeviceId == null) {
650
            tempDeviceId = PhoneUtils.getGUID();
651
        }
652
        return tempDeviceId;
653
    }
629 654
}

+ 83 - 0
app/src/main/java/com/electric/chargingpile/util/PhoneUtils.java

@ -0,0 +1,83 @@
1
package com.electric.chargingpile.util;
2

3
import android.content.Context;
4
import android.content.pm.PackageInfo;
5
import android.content.pm.PackageManager;
6
import android.telephony.TelephonyManager;
7
import android.text.TextUtils;
8

9
import com.electric.chargingpile.manager.ProfileManager;
10

11
import java.security.SecureRandom;
12
import java.util.Random;
13

14
/**
15
 * Created by lenovo on 2016/10/28.
16
 */
17

18
public class PhoneUtils {
19

20
    /**
21
     * 获取App版本号
22
     *
23
     * @param context
24
     * @return
25
     */
26
    public static String getAppVersion(Context context) {
27
        if (context == null) return "";
28
        PackageManager mPackageManager = context.getPackageManager();
29
        try {
30
            PackageInfo info = mPackageManager.getPackageInfo(context.getPackageName(), 0);
31
            return info.versionName;
32
        } catch (Exception e) {
33
            return "Unknow";
34
        }
35
    }
36

37

38
    /**
39
     * 获取设备唯一标识 imei meid
40
     *
41
     * @return
42
     */
43
    public static final String getDeviceId() {
44
        String deviceId = ProfileManager.getInstance().getDeviceId();
45
        if ("".equals(deviceId)) {
46
            deviceId = ProfileManager.getInstance().getTempDeviceId();
47
        }
48
        return deviceId;
49
    }
50

51
    public static boolean isReadPhone = true;
52

53
    /**
54
     * 生成16位不重复的随机数,含数字+大小写
55
     */
56
    public static final String getGUID() {
57
        StringBuilder uid = new StringBuilder();
58
        //产生16位的强随机数
59
        Random rd = new SecureRandom();
60
        for (int i = 0; i < 16; i++) {
61
            //产生0-2的3位随机数
62
            int type = rd.nextInt(3);
63
            switch (type) {
64
                case 0:
65
                    //0-9的随机数
66
                    uid.append(rd.nextInt(10));
67
                    break;
68
                case 1:
69
                    //ASCII在65-90之间为大写,获取大写随机
70
                    uid.append((char) (rd.nextInt(25) + 65));
71
                    break;
72
                case 2:
73
                    //ASCII在97-122之间为小写,获取小写随机
74
                    uid.append((char) (rd.nextInt(25) + 97));
75
                    break;
76
                default:
77
                    break;
78
            }
79
        }
80
        return uid.toString();
81
    }
82

83
}

+ 105 - 0
app/src/main/java/com/electric/chargingpile/util/Util.java

@ -3,7 +3,10 @@ package com.electric.chargingpile.util;
3 3
import android.app.Activity;
4 4
import android.content.Context;
5 5
import android.graphics.Color;
6
import android.net.wifi.WifiInfo;
7
import android.net.wifi.WifiManager;
6 8
import android.os.Build;
9
import android.provider.Settings;
7 10
import android.support.v7.app.ActionBar;
8 11
import android.support.v7.app.AppCompatActivity;
9 12
import android.text.TextUtils;
@ -15,6 +18,7 @@ import com.amap.api.maps.AMap;
15 18
import com.amap.api.maps.model.CustomMapStyleOptions;
16 19
import com.blankj.utilcode.util.StringUtils;
17 20
import com.electric.chargingpile.activity.MainMapActivity;
21
import com.electric.chargingpile.application.MainApplication;
18 22
import com.electric.chargingpile.data.Zhan;
19 23
import com.electric.chargingpile.data.Zhuang;
20 24
import com.electric.chargingpile.manager.ProfileManager;
@ -23,12 +27,20 @@ import java.io.File;
23 27
import java.io.FileOutputStream;
24 28
import java.io.IOException;
25 29
import java.io.InputStream;
30
import java.io.InputStreamReader;
31
import java.io.LineNumberReader;
26 32
import java.io.UnsupportedEncodingException;
33
import java.net.InetAddress;
34
import java.net.NetworkInterface;
35
import java.net.SocketException;
27 36
import java.net.URLEncoder;
28 37
import java.text.DecimalFormat;
29 38
import java.util.ArrayList;
39
import java.util.Collections;
40
import java.util.Enumeration;
30 41
import java.util.HashMap;
31 42
import java.util.List;
43
import java.util.Locale;
32 44
import java.util.Map;
33 45
import java.util.Random;
34 46

@ -388,6 +400,99 @@ public class Util {
388 400
        aMap.setCustomMapStyle(customMapStyleOptions);
389 401
    }
390 402

403
    public static String generateDmpUrl(String url) {
404
        url = url.replace("__OS__", "android");
405
        url = url.replace("__IMEI__", Base64.encode(PhoneUtils.getDeviceId().getBytes()));
406
        String mac = getMac(MainApplication.context);
407
        if (mac != null) {
408
            mac = mac.replace(":", "");
409
            mac = mac.toUpperCase();
410
            url = url.replace("__MAC__", Base64.encode(mac.getBytes()));
411
        }
412

413
        String androidId = getAndroidId();
414
        if (androidId != null) {
415
            url = url.replace("__ANDROIDID__", Base64.encode(androidId.getBytes()));
416
        }
417

418
        url = url.replace("__APP__", "com.electric.chargingpile");
419

420
        url = url.replace("__DVCBRAND__", Build.BRAND);
421
        url = url.replace("__DVCMODEL__", Build.MODEL);
422

423
        return url;
424
    }
425

426
    private static String getAndroidId() {
427
        String androidId = null;
428
        try {
429
            androidId = Settings.System.getString(MainApplication.context.getContentResolver(), Settings.Secure.ANDROID_ID);
430
        } catch (Exception e) {
431
            e.printStackTrace();
432
        }
433

434
        return androidId;
435
    }
391 436

437
    /**
438
     * 获取wifi的mac地址,适配到android Q
439
     * @param paramContext
440
     * @return
441
     */
442
    private static String getMac(Context paramContext) {
443
        try {
444
            if (Build.VERSION.SDK_INT >= 23) {
445
                String str = getMacMoreThanM(paramContext);
446
                if (!TextUtils.isEmpty(str))
447
                    return str;
448
            }
449
            // 6.0以下手机直接获取wifi的mac地址即可
450
            WifiManager wifiManager = (WifiManager)paramContext.getSystemService("wifi");
451
            WifiInfo wifiInfo = wifiManager.getConnectionInfo();
452
            if (wifiInfo != null)
453
                return wifiInfo.getMacAddress();
454
        } catch (Throwable throwable) {
455
            throwable.printStackTrace();
456
        }
457
        return null;
458
    }
459

460
    /**
461
     * android 6.0+获取wifi的mac地址
462
     * @param paramContext
463
     * @return
464
     */
465
    private static String getMacMoreThanM(Context paramContext) {
466
        try {
467
            //获取本机器所有的网络接口
468
            Enumeration enumeration = NetworkInterface.getNetworkInterfaces();
469
            while (enumeration.hasMoreElements()) {
470
                NetworkInterface networkInterface = (NetworkInterface)enumeration.nextElement();
471
                //获取硬件地址,一般是MAC
472
                byte[] arrayOfByte = networkInterface.getHardwareAddress();
473
                if (arrayOfByte == null || arrayOfByte.length == 0) {
474
                    continue;
475
                }
476

477
                StringBuilder stringBuilder = new StringBuilder();
478
                for (byte b : arrayOfByte) {
479
                    //格式化为:两位十六进制加冒号的格式,若是不足两位,补0
480
                    stringBuilder.append(String.format("%02X:", new Object[] { Byte.valueOf(b) }));
481
                }
482
                if (stringBuilder.length() > 0) {
483
                    //删除后面多余的冒号
484
                    stringBuilder.deleteCharAt(stringBuilder.length() - 1);
485
                }
486
                String str = stringBuilder.toString();
487
                // wlan0:无线网卡 eth0:以太网卡
488
                if (networkInterface.getName().equals("wlan0")) {
489
                    return str;
490
                }
491
            }
492
        } catch (SocketException socketException) {
493
            return null;
494
        }
495
        return null;
496
    }
392 497

393 498
}

+ 31 - 0
app/src/main/java/com/electric/chargingpile/view/SlideAdView.java

@ -38,6 +38,7 @@ import com.electric.chargingpile.data.Adin;
38 38
import com.electric.chargingpile.data.ChargingShareBean;
39 39
import com.electric.chargingpile.util.DES3;
40 40
import com.electric.chargingpile.util.JsonUtils;
41
import com.electric.chargingpile.util.Util;
41 42
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
42 43
import com.nostra13.universalimageloader.core.ImageLoader;
43 44
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
@ -107,6 +108,15 @@ public class SlideAdView extends FrameLayout {
107 108
    private Context context;
108 109
109 110
    private static String tag = "ResolvePicture";
111
    private String click_url;
112
113
    public String getClick_url() {
114
        return click_url;
115
    }
116
117
    public void setClick_url(String click_url) {
118
        this.click_url = click_url;
119
    }
110 120
111 121
    //Handler
112 122
    private Handler handler = new Handler() {
@ -256,7 +266,13 @@ public class SlideAdView extends FrameLayout {
256 266
                } else {
257 267
                    url = mAdin.getUrl() + "?cdzshareid=" + mAdin.getId();
258 268
                }
269
                String advertiser = mAdin.getAdvertiser();
270
                if (advertiser != null && advertiser.equals("1")) {
271
                    intent.putExtra("advertiser", advertiser);
272
                    uploadDmp(click_url);
273
                }
259 274
                intent.putExtra("url", url);
275
260 276
                Log.e(TAG, "imageBrower: url=" + url);
261 277
                context.startActivity(intent);
262 278
            }
@ -785,4 +801,19 @@ public class SlideAdView extends FrameLayout {
785 801
        });
786 802
        platform.share(paramsToShare);
787 803
    }
804
805
    private void uploadDmp(String url) {
806
        url = Util.generateDmpUrl(url);
807
        OkHttpUtils.get().url(url).build().connTimeOut(3000).readTimeOut(3000)
808
                .execute(new StringCallback() {
809
                    @Override
810
                    public void onError(Call call, Exception e) {
811
                        e.printStackTrace();
812
                    }
813
814
                    @Override
815
                    public void onResponse(String response) {
816
                    }
817
                });
818
    }
788 819
}

Jayson Wilke - Gogs: Go Git Service
jaysonwilke832 (Jayson Wilke)

フォロー