Browse Source

删除无用代码,并且将文件相关操作的代码适配至Android 12

hy 3 years ago
parent
commit
d7ea28348c
43 changed files with 1445 additions and 2588 deletions
  1. 1 1
      app/build.gradle
  2. 18 15
      app/src/main/AndroidManifest.xml
  3. 4 42
      app/src/main/java/com/electric/chargingpile/activity/AboutActivity.java
  4. 6 5
      app/src/main/java/com/electric/chargingpile/activity/AdinShowActivity.java
  5. 45 180
      app/src/main/java/com/electric/chargingpile/activity/AlterOneActivity.java
  6. 47 21
      app/src/main/java/com/electric/chargingpile/activity/CarOwnerCertificateActivity.java
  7. 50 160
      app/src/main/java/com/electric/chargingpile/activity/ChargingCommentActivity.java
  8. 3 67
      app/src/main/java/com/electric/chargingpile/activity/ClaimDataActivity.java
  9. 96 78
      app/src/main/java/com/electric/chargingpile/activity/ClaimSurveyTwoActivity.java
  10. 7 26
      app/src/main/java/com/electric/chargingpile/activity/CompletePhotoActivity.java
  11. 58 23
      app/src/main/java/com/electric/chargingpile/activity/EditAnswerActivity.java
  12. 63 22
      app/src/main/java/com/electric/chargingpile/activity/EditQuestionTwoActivity.java
  13. 53 168
      app/src/main/java/com/electric/chargingpile/activity/FeedbackActivity.java
  14. 5 10
      app/src/main/java/com/electric/chargingpile/activity/FindActivity.java
  15. 21 18
      app/src/main/java/com/electric/chargingpile/activity/H5Activity.java
  16. 21 19
      app/src/main/java/com/electric/chargingpile/activity/HomeWebActivity.java
  17. 9 6
      app/src/main/java/com/electric/chargingpile/activity/HotInfoActivity.java
  18. 155 72
      app/src/main/java/com/electric/chargingpile/activity/MainMapActivity.java
  19. 5 48
      app/src/main/java/com/electric/chargingpile/activity/MyWebViewActivity.java
  20. 2 2
      app/src/main/java/com/electric/chargingpile/activity/NewSelectCityActivity.java
  21. 57 218
      app/src/main/java/com/electric/chargingpile/activity/PrivateZhuangInfoActivity.java
  22. 2 0
      app/src/main/java/com/electric/chargingpile/activity/PublishItemsActivity.java
  23. 69 120
      app/src/main/java/com/electric/chargingpile/activity/PublishPicTopicActivity.java
  24. 5 5
      app/src/main/java/com/electric/chargingpile/activity/PublishVideoTopicActivity.java
  25. 0 135
      app/src/main/java/com/electric/chargingpile/activity/QRChargingActivity.java
  26. 31 10
      app/src/main/java/com/electric/chargingpile/activity/RoutePlanMapActivity.java
  27. 58 160
      app/src/main/java/com/electric/chargingpile/activity/ShareTwoActivity.java
  28. 63 133
      app/src/main/java/com/electric/chargingpile/activity/ShareTwoEditActivity.java
  29. 96 45
      app/src/main/java/com/electric/chargingpile/activity/SkipUserInfoActivity.java
  30. 0 72
      app/src/main/java/com/electric/chargingpile/activity/TestProgressActivity.java
  31. 0 18
      app/src/main/java/com/electric/chargingpile/activity/TesttActivity.java
  32. 5 7
      app/src/main/java/com/electric/chargingpile/activity/UserCenterActivity.java
  33. 91 82
      app/src/main/java/com/electric/chargingpile/activity/UserInfoActivity.java
  34. 2 31
      app/src/main/java/com/electric/chargingpile/activity/WelcomeActivity.java
  35. 52 151
      app/src/main/java/com/electric/chargingpile/activity/ZhanCommentActivity.java
  36. 6 55
      app/src/main/java/com/electric/chargingpile/activity/ZoomingPhotoTextActivity.java
  37. 4 4
      app/src/main/java/com/electric/chargingpile/application/MainApplication.java
  38. 0 23
      app/src/main/java/com/electric/chargingpile/fragment/YueFragment.java
  39. 0 304
      app/src/main/java/com/electric/chargingpile/fragment/ZoomingPhotoTextFragment.java
  40. 152 0
      app/src/main/java/com/electric/chargingpile/util/DownloadUtil.java
  41. 0 32
      app/src/main/java/com/electric/chargingpile/util/ImageTools.java
  42. 82 0
      app/src/main/java/com/electric/chargingpile/util/PhotoUtils.java
  43. 1 0
      app/src/main/res/xml/provider_paths.xml

+ 1 - 1
app/build.gradle

205
    // 停更过期库,用zhihu/Matisse
205
    // 停更过期库,用zhihu/Matisse
206
//    implementation 'me.iwf.photopicker:PhotoPicker:0.9.12@aar'
206
//    implementation 'me.iwf.photopicker:PhotoPicker:0.9.12@aar'
207
    // 为了兼容Android10 使用beta版本
207
    // 为了兼容Android10 使用beta版本
208
    implementation 'com.zhihu.android:matisse:0.5.3-beta3'
208
//    implementation 'com.zhihu.android:matisse:0.5.3-beta3'
209
    implementation 'top.zibin:Luban:1.1.8'
209
    implementation 'top.zibin:Luban:1.1.8'
210
    implementation 'com.ms-square:expandableTextView:0.1.4'
210
    implementation 'com.ms-square:expandableTextView:0.1.4'
211
    implementation 'io.reactivex.rxjava2:rxjava:2.0.5'
211
    implementation 'io.reactivex.rxjava2:rxjava:2.0.5'

+ 18 - 15
app/src/main/AndroidManifest.xml

16
<!--        android:name="${applicationId}.permission.JPUSH_MESSAGE"-->
16
<!--        android:name="${applicationId}.permission.JPUSH_MESSAGE"-->
17
<!--        android:protectionLevel="signature" />-->
17
<!--        android:protectionLevel="signature" />-->
18
18
19
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 往SDCard写入数据权限 -->
20
19
21
    <uses-feature android:name="android.hardware.camera" />
20
    <uses-feature android:name="android.hardware.camera" />
22
    <uses-feature android:name="android.hardware.camera.autofocus" />
21
    <uses-feature android:name="android.hardware.camera.autofocus" />
48
    <uses-permission android:name="android.permission.INTERNET" />
47
    <uses-permission android:name="android.permission.INTERNET" />
49
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
48
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
50
    <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
49
    <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
51
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
50
52
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 极光 -->
51
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 极光 -->
53
    <uses-permission android:name="android.permission.VIBRATE" />
52
    <uses-permission android:name="android.permission.VIBRATE" />
54
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
53
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
55
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
54
56
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
55
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
57
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 【常用】 信鸽SDK所需权限 -->
58
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
56
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
59
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
57
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
60
    <uses-permission android:name="android.permission.REORDER_TASKS" />
58
    <uses-permission android:name="android.permission.REORDER_TASKS" />
61
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
59
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
62
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 权限 : AGPS定位 -->
63
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
60
61
    <!--适配Android R包可见性 开始-->
62
    <queries package="${applicationId}">
63
        <intent>
64
            <action android:name="android.media.action.IMAGE_CAPTURE">
65
66
            </action>
67
        </intent>
68
        <intent>
69
            <action android:name="android.media.action.ACTION_VIDEO_CAPTURE">
70
71
            </action>
72
        </intent>
73
    </queries>
74
    <!--适配Android R包可见性 结束-->
64
75
65
    <application
76
    <application
66
        android:name=".application.MainApplication"
77
        android:name=".application.MainApplication"
122
            android:screenOrientation="portrait"
133
            android:screenOrientation="portrait"
123
            android:windowSoftInputMode="stateHidden|adjustUnspecified" />
134
            android:windowSoftInputMode="stateHidden|adjustUnspecified" />
124
        <activity
135
        <activity
136
            android:exported="true"
125
            android:name=".activity.MainActicity"
137
            android:name=".activity.MainActicity"
126
            android:configChanges="keyboardHidden|orientation"
138
            android:configChanges="keyboardHidden|orientation"
127
            android:label="@string/main_name"
139
            android:label="@string/main_name"
440
            android:label="@string/title_activity_che_xing"
452
            android:label="@string/title_activity_che_xing"
441
            android:screenOrientation="portrait" />
453
            android:screenOrientation="portrait" />
442
        <activity
454
        <activity
443
            android:name=".activity.TesttActivity"
444
            android:label="@string/title_activity_testt" />
445
        <activity
446
            android:name=".activity.DetailsActivity"
455
            android:name=".activity.DetailsActivity"
447
            android:label="@string/title_activity_details"
456
            android:label="@string/title_activity_details"
448
            android:screenOrientation="portrait" />
457
            android:screenOrientation="portrait" />
512
            android:name=".activity.BasicNaviActivity"
521
            android:name=".activity.BasicNaviActivity"
513
            android:screenOrientation="portrait" />
522
            android:screenOrientation="portrait" />
514
        <activity
523
        <activity
515
            android:name=".activity.QRChargingActivity"
516
            android:screenOrientation="portrait" />
517
        <activity
518
            android:name=".activity.ScanQRActivity"
524
            android:name=".activity.ScanQRActivity"
519
            android:screenOrientation="portrait" />
525
            android:screenOrientation="portrait" />
520
        <activity
526
        <activity
675
            android:name=".activity.MemberLevelActivity"
681
            android:name=".activity.MemberLevelActivity"
676
            android:screenOrientation="portrait" />
682
            android:screenOrientation="portrait" />
677
        <activity
683
        <activity
678
            android:name=".activity.TestProgressActivity"
679
            android:screenOrientation="portrait" />
680
        <activity
681
            android:name=".activity.AlbumActivityFeedback"
684
            android:name=".activity.AlbumActivityFeedback"
682
            android:screenOrientation="portrait" />
685
            android:screenOrientation="portrait" />
683
        <activity
686
        <activity

+ 4 - 42
app/src/main/java/com/electric/chargingpile/activity/AboutActivity.java

8
import android.content.Intent;
8
import android.content.Intent;
9
import android.content.pm.PackageInfo;
9
import android.content.pm.PackageInfo;
10
import android.content.pm.PackageManager;
10
import android.content.pm.PackageManager;
11
import android.graphics.Bitmap;
12
import android.graphics.BitmapFactory;
11
import android.graphics.BitmapFactory;
13
import android.net.Uri;
12
import android.net.Uri;
14
import android.os.Bundle;
13
import android.os.Bundle;
15
import android.os.Environment;
16
import android.provider.MediaStore;
14
import android.provider.MediaStore;
17
import android.view.View;
15
import android.view.View;
18
import android.view.View.OnClickListener;
16
import android.view.View.OnClickListener;
23
import com.electric.chargingpile.BuildConfig;
21
import com.electric.chargingpile.BuildConfig;
24
import com.electric.chargingpile.R;
22
import com.electric.chargingpile.R;
25
import com.electric.chargingpile.util.BarColorUtil;
23
import com.electric.chargingpile.util.BarColorUtil;
24
import com.electric.chargingpile.util.ImageUitl;
25
import com.electric.chargingpile.util.PhotoUtils;
26
import com.electric.chargingpile.util.ToastUtil;
26
import com.electric.chargingpile.util.ToastUtil;
27
import com.umeng.analytics.MobclickAgent;
27
import com.umeng.analytics.MobclickAgent;
28

28

29
import java.io.File;
29
import java.io.File;
30
import java.io.FileOutputStream;
31
import java.io.IOException;
32
import java.util.List;
30
import java.util.List;
33

31

34
import pub.devrel.easypermissions.AppSettingsDialog;
32
import pub.devrel.easypermissions.AppSettingsDialog;
117
                break;
115
                break;
118

116

119
            case R.id.icon_scan:
117
            case R.id.icon_scan:
120
                saveBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.icon_erweima));
118
                PhotoUtils.saveBitmap(this,BitmapFactory.decodeResource(getResources(), R.drawable.icon_erweima));
121
                break;
119
                break;
122

120

123

121

137
    }
135
    }
138

136

139

137

140
    public void saveBitmap(Bitmap mBitmap) {
141
        String dir_path = Environment.getExternalStorageDirectory() + File.separator + "D1ev/";
142
        File directory = new File(dir_path);
143
        File f = new File(directory, "erweima.png");
144
        try {
145
            if (!directory.exists()) {
146
                directory.mkdir();//没有目录先创建目录
147
            }
148
            f.createNewFile();
149
        } catch (IOException e) {
150
            // TODO Auto-generated catch block
151
        }
152
        FileOutputStream fOut = null;
153
        try {
154
            fOut = new FileOutputStream(f);
155
        } catch (Exception e) {
156
            e.printStackTrace();
157
        }
158
        mBitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
159
//        Log.e("!!!", "下载图片");
160
        Toast.makeText(AboutActivity.this, "保存成功", Toast.LENGTH_SHORT).show();
161
        try {
162
            fOut.flush();
163
        } catch (IOException e) {
164
            e.printStackTrace();
165
        }
166
        try {
167
            fOut.close();
168
        } catch (IOException e) {
169
            e.printStackTrace();
170
        }
171
        MediaStore.Images.Media.insertImage(getContentResolver(), mBitmap, "", "");
172
        Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
173
        Uri uri = Uri.fromFile(new File(dir_path));
174
        intent.setData(uri);
175
        mContext.sendBroadcast(intent);
176
    }
138

177

139

178
    @Override
140
    @Override
179
    public void onPermissionsGranted(int requestCode, List<String> perms) {
141
    public void onPermissionsGranted(int requestCode, List<String> perms) {

+ 6 - 5
app/src/main/java/com/electric/chargingpile/activity/AdinShowActivity.java

14
import android.net.http.SslError;
14
import android.net.http.SslError;
15
import android.os.Build;
15
import android.os.Build;
16
import android.os.Bundle;
16
import android.os.Bundle;
17
import android.os.Environment;
18
import android.provider.MediaStore;
17
import android.provider.MediaStore;
19
import androidx.annotation.NonNull;
18
import androidx.annotation.NonNull;
20
import androidx.core.content.FileProvider;
19
import androidx.core.content.FileProvider;
63
import pub.devrel.easypermissions.AfterPermissionGranted;
62
import pub.devrel.easypermissions.AfterPermissionGranted;
64
import pub.devrel.easypermissions.EasyPermissions;
63
import pub.devrel.easypermissions.EasyPermissions;
65
64
65
import static com.electric.chargingpile.util.PhotoUtils.CACHE_DIR;
66
66
public class AdinShowActivity extends Activity implements View.OnClickListener {
67
public class AdinShowActivity extends Activity implements View.OnClickListener {
67
    private WebView webView;
68
    private WebView webView;
68
    private ImageView iv_back, iv_close;
69
    private ImageView iv_back, iv_close;
978
    // 拍照
979
    // 拍照
979
    private void takeCamera() {
980
    private void takeCamera() {
980
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
981
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
981
        if (ImageUitl.hasSdcard()) {
982
//        if (ImageUitl.hasSdcard()) {
982
            String fileName = "android" + System.currentTimeMillis() / 1000 + ".jpg";
983
            String fileName = "android" + System.currentTimeMillis() / 1000 + ".jpg";
983
            cameraFilePath = ImageUitl.getPath(Environment.getExternalStorageDirectory() + "/" + "cdz") + "/" + fileName;
984
            cameraFilePath = ImageUitl.getPath( CACHE_DIR) + "/" + fileName;
984
            File imageFile = ImageUitl.getFile(cameraFilePath);
985
            File imageFile = ImageUitl.getFile(cameraFilePath);
985
            Uri uri = parseUri(imageFile);
986
            Uri uri = parseUri(imageFile);
986
            intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
987
            intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
990
                e.printStackTrace();
991
                e.printStackTrace();
991
            }
992
            }
992
993
993
        }
994
//        }
994
    }
995
    }
995
996
996
    private Uri parseUri(File cameraFile) {
997
    private Uri parseUri(File cameraFile) {
1028
                result = data.getData();
1029
                result = data.getData();
1029
            }
1030
            }
1030
            if (result == null && ImageUitl.hasFile(cameraFilePath)) {
1031
            if (result == null && ImageUitl.hasFile(cameraFilePath)) {
1031
                result = Uri.fromFile(new File(cameraFilePath));
1032
                result = parseUri(new File(cameraFilePath));
1032
            }
1033
            }
1033
1034
1034
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
1035
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {

+ 45 - 180
app/src/main/java/com/electric/chargingpile/activity/AlterOneActivity.java

5
import android.app.Activity;
5
import android.app.Activity;
6
import android.app.ProgressDialog;
6
import android.app.ProgressDialog;
7
import android.app.TimePickerDialog;
7
import android.app.TimePickerDialog;
8
import android.content.ContentValues;
9
import android.content.Context;
8
import android.content.Context;
10
import android.content.Intent;
9
import android.content.Intent;
11
import android.database.Cursor;
12
import android.graphics.Bitmap;
10
import android.graphics.Bitmap;
13
import android.graphics.BitmapFactory;
11
import android.graphics.BitmapFactory;
14
import android.graphics.Color;
12
import android.graphics.Color;
15
import android.graphics.Matrix;
13
import android.graphics.Matrix;
16
import android.graphics.drawable.BitmapDrawable;
17
import android.graphics.drawable.ColorDrawable;
14
import android.graphics.drawable.ColorDrawable;
18
import android.net.Uri;
15
import android.net.Uri;
19
import android.os.Build;
16
import android.os.Build;
20
import android.os.Bundle;
17
import android.os.Bundle;
21
import android.os.Environment;
22
import android.os.Handler;
18
import android.os.Handler;
23
import android.os.Message;
19
import android.os.Message;
24
import android.provider.MediaStore;
25
import android.util.Base64;
20
import android.util.Base64;
26
import android.util.DisplayMetrics;
21
import android.util.DisplayMetrics;
27
import android.util.Log;
22
import android.util.Log;
48
import com.electric.chargingpile.R;
43
import com.electric.chargingpile.R;
49
import com.electric.chargingpile.application.MainApplication;
44
import com.electric.chargingpile.application.MainApplication;
50
import com.electric.chargingpile.data.Zhan;
45
import com.electric.chargingpile.data.Zhan;
46
import com.electric.chargingpile.engine.GlideEngine;
51
import com.electric.chargingpile.util.BarColorUtil;
47
import com.electric.chargingpile.util.BarColorUtil;
52
import com.electric.chargingpile.util.Bimp;
48
import com.electric.chargingpile.util.Bimp;
53
import com.electric.chargingpile.util.DES3;
49
import com.electric.chargingpile.util.DES3;
54
import com.electric.chargingpile.util.FileUtils;
55
import com.electric.chargingpile.util.ImageItem;
50
import com.electric.chargingpile.util.ImageItem;
56
import com.electric.chargingpile.util.ImageUtils;
57
import com.electric.chargingpile.util.PublicWay;
51
import com.electric.chargingpile.util.PublicWay;
58
import com.electric.chargingpile.util.Res;
52
import com.electric.chargingpile.util.Res;
59
import com.electric.chargingpile.util.StatusConstants;
53
import com.electric.chargingpile.util.StatusConstants;
60
import com.electric.chargingpile.util.ToastUtil;
54
import com.electric.chargingpile.util.ToastUtil;
61
import com.electric.chargingpile.util.UploadUtil;
55
import com.electric.chargingpile.util.UploadUtil;
56
import com.electric.chargingpile.util.Util;
62
import com.electric.chargingpile.view.AlertDialogTwo;
57
import com.electric.chargingpile.view.AlertDialogTwo;
63
import com.electric.chargingpile.view.CustomProgressDialog;
58
import com.electric.chargingpile.view.CustomProgressDialog;
64
import com.google.android.gms.appindexing.Action;
59
import com.google.android.gms.appindexing.Action;
65
import com.google.android.gms.appindexing.AppIndex;
60
import com.google.android.gms.appindexing.AppIndex;
66
import com.google.android.gms.appindexing.Thing;
61
import com.google.android.gms.appindexing.Thing;
67
import com.google.android.gms.common.api.GoogleApiClient;
62
import com.google.android.gms.common.api.GoogleApiClient;
63
import com.luck.picture.lib.PictureSelector;
64
import com.luck.picture.lib.animators.AnimationType;
65
import com.luck.picture.lib.config.PictureConfig;
66
import com.luck.picture.lib.config.PictureMimeType;
67
import com.luck.picture.lib.entity.LocalMedia;
68
import com.umeng.analytics.MobclickAgent;
68
import com.umeng.analytics.MobclickAgent;
69
import com.zhihu.matisse.Matisse;
70
import com.zhihu.matisse.MimeType;
71
import com.zhihu.matisse.engine.impl.GlideEngine;
72
import com.zhihu.matisse.internal.entity.CaptureStrategy;
73

69

74
import org.json.JSONException;
70
import org.json.JSONException;
75
import org.json.JSONObject;
71
import org.json.JSONObject;
129
    private EditText et_remark;
125
    private EditText et_remark;
130
    private GridAdapter adapter;
126
    private GridAdapter adapter;
131
    private View parentView;
127
    private View parentView;
132
    private PopupWindow pop = null;
128

133
    Bitmap bm = null;
129
    Bitmap bm = null;
134
    private String camePath;//拍照路径
135
    private LinearLayout ll_popup;
130

136
    private Animation animation;
131
    private Animation animation;
137
    private ImageView point;
132
    private ImageView point;
138
    private Toast toast = null;
133
    private Toast toast = null;
139
    private static final String PHOTO_FILE_NAME = "android.jpg";
140
    private static final String PHOTO_FILE_PATH = getPath(Environment.getExternalStorageDirectory() + "/" + "cdz");
141
    private File tempFile;
134

142
    private static final int PHOTO_REQUEST_CAMERA = 1;
135
    private static final int PHOTO_REQUEST_CAMERA = 1;
143
    private static final int PHOTO_REQUEST_GALLERY = 2;
136
    private static final int PHOTO_REQUEST_GALLERY = 2;
144
    private static final int PHOTO_REQUEST_CUT = 3;
137
    private static final int PHOTO_REQUEST_CUT = 3;
189
     * See https://g.co/AppIndexing/AndroidStudio for more information.
182
     * See https://g.co/AppIndexing/AndroidStudio for more information.
190
     */
183
     */
191
    private GoogleApiClient client;
184
    private GoogleApiClient client;
192

185
    private List<LocalMedia> mSelectionData =new ArrayList<LocalMedia>();
193
    @Override
186
    @Override
194
    protected void onCreate(Bundle savedInstanceState) {
187
    protected void onCreate(Bundle savedInstanceState) {
195
        super.onCreate(savedInstanceState);
188
        super.onCreate(savedInstanceState);
196
        tempFile = getFile(PHOTO_FILE_PATH + "/" + PHOTO_FILE_NAME);
197
        Res.init(this);
189
        Res.init(this);
198
        bimap = BitmapFactory.decodeResource(
190
        bimap = BitmapFactory.decodeResource(
199
                getResources(),
191
                getResources(),
223
    }
215
    }
224

216

225
    public void Init() {
217
    public void Init() {
226

227
        pop = new PopupWindow(AlterOneActivity.this);
228

229
        View view = getLayoutInflater().inflate(R.layout.item_popupwindows, null);
230

231
        ll_popup = (LinearLayout) view.findViewById(R.id.ll_popup);
232

233
        pop.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
234
        pop.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
235
        pop.setBackgroundDrawable(new BitmapDrawable());
236
        pop.setFocusable(true);
237
        pop.setOutsideTouchable(true);
238
        pop.setContentView(view);
239

240

241
        final RelativeLayout parent = (RelativeLayout) view.findViewById(R.id.parent);
242
        Button bt1 = (Button) view.findViewById(R.id.item_popupwindows_camera);
243
        Button bt2 = (Button) view.findViewById(R.id.item_popupwindows_Photo);
244
        Button bt3 = (Button) view.findViewById(R.id.item_popupwindows_cancel);
245
        parent.setOnClickListener(new View.OnClickListener() {
246

247
            @Override
248
            public void onClick(View v) {
249
                pop.dismiss();
250
                ll_popup.clearAnimation();
251
            }
252
        });
253
        bt1.setOnClickListener(new View.OnClickListener() {
254
            @Override
255
            public void onClick(View v) {
256
                pop.dismiss();
257
                ll_popup.clearAnimation();
258
                if (MainScanActivity.isCameraUseable()) {
259
                    photo();
260
                } else {
261
                    ToastUtil.showToast(getApplicationContext(), "您当前关闭了调用摄像头权限", Toast.LENGTH_SHORT);
262
                }
263
            }
264
        });
265
        bt2.setOnClickListener(new View.OnClickListener() {
266
            @Override
267
            public void onClick(View v) {
268
                Intent intent = new Intent(AlterOneActivity.this,
269
                        AlbumActivityAlter.class);
270
                startActivity(intent);
271
                overridePendingTransition(R.anim.activity_translate_in, R.anim.activity_translate_out);
272
                pop.dismiss();
273
                ll_popup.clearAnimation();
274
            }
275
        });
276
        bt3.setOnClickListener(new View.OnClickListener() {
277
            @Override
278
            public void onClick(View v) {
279
                pop.dismiss();
280
                ll_popup.clearAnimation();
281
            }
282
        });
283

284
        noScrollgridview = (GridView) findViewById(R.id.noScrollgridview);
218
        noScrollgridview = (GridView) findViewById(R.id.noScrollgridview);
285
        noScrollgridview.setSelector(new ColorDrawable(Color.TRANSPARENT));
219
        noScrollgridview.setSelector(new ColorDrawable(Color.TRANSPARENT));
286
        adapter = new GridAdapter(this);
220
        adapter = new GridAdapter(this);
306
     * 调用图库选择
240
     * 调用图库选择
307
     */
241
     */
308
    private void callGallery() {
242
    private void callGallery() {
309
        Matisse.from(AlterOneActivity.this)
310
                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
311
                .showSingleMediaType(true)
312
                .countable(true)
313
                .maxSelectable(PIC_NUM - Bimp.tempSelectBitmap.size())
314
                .capture(true)
315
                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
316
                .imageEngine(new GlideEngine())
317
                .forResult(REQUEST_CODE_CHOOSE);
243
        PictureSelector.create(this)
244
                    .openGallery(PictureMimeType.ofImage())
245
                    .maxSelectNum(PIC_NUM-Bimp.tempSelectBitmap.size())
246
                    .selectionMode(PictureConfig.MULTIPLE)
247
                   // .selectionData(mSelectionData)//是否传入已选图片
248
                    .isCompress(true)//是否压缩
249
                    .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
250
                    .isGif(true)//是否显示gif
251
                    .isAndroidQTransform(true)
252
                    .imageEngine(GlideEngine.createGlideEngine())
253
                    .isWeChatStyle(false)// 是否开启微信图片选择风格
254
                    .isUseCustomCamera(false)// 是否使用自定义相机
255
                    .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
256
                    .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
257
                    .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
258
                    .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
259
                    .imageSpanCount(4)// 每行显示个数
260
                    .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
261
                    .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
262
                    .forResult(REQUEST_CODE_CHOOSE);
318
    }
263
    }
319

264

320
    @Override
265
    @Override
344
                    @Override
289
                    @Override
345
                    public ObservableSource<Boolean> apply(Intent intent) throws Exception {
290
                    public ObservableSource<Boolean> apply(Intent intent) throws Exception {
346
                        try {
291
                        try {
292
                            mSelectionData= PictureSelector.obtainMultipleResult(data);
347

293

348
                            List<Uri> uriList = Matisse.obtainResult(data);
349
                            for (Uri uri : uriList) {
350
                                Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
351
                                File file = FileUtils.from(AlterOneActivity.this, uri);
352

353
                                bitmap = FileUtils.rotateIfRequired(file, bitmap);
354
                                bitmap = imageZoom(bitmap);
294
                            for (LocalMedia localMedia : mSelectionData) {
295
//                                Bitmap bitmap = BitmapFactory.decodeFile(getContentResolver().openInputStream(uri));
296
//                                File file = FileUtils.from(AlterOneActivity.this, uri);
297
//
298
//                                bitmap = FileUtils.rotateIfRequired(file, bitmap);
299
//                                bitmap = imageZoom(bitmap);
300
                                String path="";
301
                                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
302
                                    path= localMedia.getAndroidQToPath();
303
                                }else{
304
                                    path=localMedia.getPath();
305
                                }
355
                                ImageItem takePhoto = new ImageItem();
306
                                ImageItem takePhoto = new ImageItem();
356
                                takePhoto.setBitmap(bitmap);
307
                                takePhoto.setBitmap(imageZoom(BitmapFactory.decodeFile(path)));
357
                                Bimp.tempSelectBitmap.add(takePhoto);
308
                                Bimp.tempSelectBitmap.add(takePhoto);
358
                            }
309
                            }
359
                            return Observable.just(true);
310
                            return Observable.just(true);
613

564

614
    private static final int TAKE_PICTURE = 0x000001;
565
    private static final int TAKE_PICTURE = 0x000001;
615

566

616

617
    public void photo() {
618

619
        if (hasSdcard()) {
620
            int currentapiVersion = Build.VERSION.SDK_INT;
621
            Log.e("currentapiVersion", "currentapiVersion====>" + currentapiVersion);
622
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//���������
623
            intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
624
            startActivityForResult(intent, PHOTO_REQUEST_CAMERA);
625
        }
626
    }
627

628
    @Override
567
    @Override
629
    public void onClick(View v) {
568
    public void onClick(View v) {
630
        if (imm.isActive()) {
569
        if (imm.isActive()) {
841
        }
780
        }
842
    }
781
    }
843

782

844
    private void crop(Uri uri, Uri cutImgUri) {
845
        Intent intent = new Intent("com.android.camera.action.CROP");
846
        intent.setDataAndType(getImageContentUri(this, tempFile), "image/*");
847
        intent.putExtra("crop", "true");
848
        intent.putExtra("outputFormat", "JPEG");
849
        intent.putExtra("noFaceDetection", true);
850
        intent.putExtra("return-data", false);
851
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
852
        startActivityForResult(intent, PHOTO_REQUEST_CUT);
853
    }
854

855
    private boolean hasSdcard() {
856
        if (Environment.getExternalStorageState().equals(
857
                Environment.MEDIA_MOUNTED)) {
858
            return true;
859
        } else {
860
            return false;
861
        }
862
    }
863

864
    private static String getPath(String path) {
865
        File f = new File(path);
866
        if (!f.exists()) {
867
            f.mkdirs();
868
        }
869
        return f.getAbsolutePath();
870
    }
871

872
    private File getFile(String path) {
873
        File f = new File(path);
874
        if (!f.exists()) {
875
            try {
876
                f.createNewFile();
877
            } catch (IOException e) {
878
                e.printStackTrace();
879
            }
880
        }
881
        return f;
882
    }
883

884
    public Bitmap decodeUriAsBitmap(Uri uri) {
885
        Bitmap bitmap = null;
886
        try {
887
            bitmap = BitmapFactory.decodeStream(this.getContentResolver().openInputStream(uri));
888
        } catch (FileNotFoundException e) {
889
            e.printStackTrace();
890
            return null;
891
        }
892
        return bitmap;
893
    }
894

895
    public static Uri getImageContentUri(Context context, File imageFile) {
896
        String filePath = imageFile.getAbsolutePath();
897
        Cursor cursor = context.getContentResolver().query(
898
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
899
                new String[]{MediaStore.Images.Media._ID},
900
                MediaStore.Images.Media.DATA + "=? ",
901
                new String[]{filePath}, null);
902

783

903
        if (cursor != null && cursor.moveToFirst()) {
904
            int id = cursor.getInt(cursor
905
                    .getColumnIndex(MediaStore.MediaColumns._ID));
906
            Uri baseUri = Uri.parse("content://media/external/images/media");
907
            return Uri.withAppendedPath(baseUri, "" + id);
908
        } else {
909
            if (imageFile.exists()) {
910
                ContentValues values = new ContentValues();
911
                values.put(MediaStore.Images.Media.DATA, filePath);
912
                return context.getContentResolver().insert(
913
                        MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
914
            } else {
915
                return null;
916
            }
917
        }
918
    }
919

784

920
    public static boolean containsEmoji(String source) {
785
    public static boolean containsEmoji(String source) {
921
        int len = source.length();
786
        int len = source.length();

+ 47 - 21
app/src/main/java/com/electric/chargingpile/activity/CarOwnerCertificateActivity.java

13
import android.graphics.Matrix;
13
import android.graphics.Matrix;
14
import android.graphics.drawable.Drawable;
14
import android.graphics.drawable.Drawable;
15
import android.net.Uri;
15
import android.net.Uri;
16
import android.os.Build;
16
import android.os.Bundle;
17
import android.os.Bundle;
17
import android.text.TextUtils;
18
import android.text.TextUtils;
18
import android.util.Base64;
19
import android.util.Base64;
32
import com.electric.chargingpile.R;
33
import com.electric.chargingpile.R;
33
import com.electric.chargingpile.application.MainApplication;
34
import com.electric.chargingpile.application.MainApplication;
34
import com.electric.chargingpile.data.CarOwnerCertificateBean;
35
import com.electric.chargingpile.data.CarOwnerCertificateBean;
36
import com.electric.chargingpile.engine.GlideEngine;
35
import com.electric.chargingpile.entity.CarBrandGroupEntity;
37
import com.electric.chargingpile.entity.CarBrandGroupEntity;
36
import com.electric.chargingpile.entity.CarModelEntity;
38
import com.electric.chargingpile.entity.CarModelEntity;
37
import com.electric.chargingpile.entity.CarSeriesEntity;
39
import com.electric.chargingpile.entity.CarSeriesEntity;
44
import com.electric.chargingpile.util.JsonUtils;
46
import com.electric.chargingpile.util.JsonUtils;
45
import com.electric.chargingpile.util.LoadingDialog;
47
import com.electric.chargingpile.util.LoadingDialog;
46
import com.electric.chargingpile.util.ToastUtil;
48
import com.electric.chargingpile.util.ToastUtil;
49
import com.electric.chargingpile.util.Util;
47
import com.electric.chargingpile.view.TextImageView;
50
import com.electric.chargingpile.view.TextImageView;
48
import com.google.gson.Gson;
51
import com.google.gson.Gson;
49
import com.google.gson.reflect.TypeToken;
52
import com.google.gson.reflect.TypeToken;
50
import com.zhihu.matisse.Matisse;
51
import com.zhihu.matisse.MimeType;
52
import com.zhihu.matisse.engine.impl.GlideEngine;
53
import com.zhihu.matisse.internal.entity.CaptureStrategy;
53
54
import com.luck.picture.lib.PictureSelector;
55
import com.luck.picture.lib.animators.AnimationType;
56
import com.luck.picture.lib.config.PictureConfig;
57
import com.luck.picture.lib.config.PictureMimeType;
58
import com.luck.picture.lib.entity.LocalMedia;
54
import com.zhy.http.okhttp.OkHttpUtils;
59
import com.zhy.http.okhttp.OkHttpUtils;
55
import com.zhy.http.okhttp.callback.StringCallback;
60
import com.zhy.http.okhttp.callback.StringCallback;
56
61
417
            public void subscribe(ObservableEmitter<String> subscriber) throws Exception {
422
            public void subscribe(ObservableEmitter<String> subscriber) throws Exception {
418
423
419
                try {
424
                try {
420
                    List<Uri> uriList = Matisse.obtainResult(data);
421
                    Uri uri = uriList.get(0);
422
                    Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
423
                    File file = FileUtils.from(CarOwnerCertificateActivity.this, uri);
424
425
                    bitmap = FileUtils.rotateIfRequired(file, bitmap);
426
                    bitmap = imageZoom(bitmap);
427
                    insertBitmap = bitmap;
428
                    subscriber.onComplete();
425
//                    List<Uri> uriList = Matisse.obtainResult(data);
426
                    List<LocalMedia> localList = PictureSelector.obtainMultipleResult(data);
427
                    if (localList !=null && localList.size()>0 ){
428
                        LocalMedia localMedia = localList.get(0);
429
//                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
430
//                        File file = FileUtils.from(CarOwnerCertificateActivity.this, uri);
431
//                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
432
                        String path="";
433
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
434
                            path= localMedia.getAndroidQToPath();
435
                        }else{
436
                            path=localMedia.getPath();
437
                        }
438
                        insertBitmap =imageZoom( BitmapFactory.decodeFile(path));
439
                        subscriber.onComplete();
440
                    }
441
429
                } catch (Exception e) {
442
                } catch (Exception e) {
430
                    e.printStackTrace();
443
                    e.printStackTrace();
431
                    subscriber.onError(e);
444
                    subscriber.onError(e);
638
    @AfterPermissionGranted(RC_ALBUM_PERM)
651
    @AfterPermissionGranted(RC_ALBUM_PERM)
639
    public void permissionTask() {
652
    public void permissionTask() {
640
        if (isPermissionOK()) {
653
        if (isPermissionOK()) {
641
            Matisse.from(CarOwnerCertificateActivity.this)
642
                    .choose(MimeType.of(MimeType.JPEG, MimeType.PNG))
643
                    .showSingleMediaType(true)
644
                    .countable(true)
645
                    .maxSelectable(1)
646
                    .capture(true)
647
                    .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
648
                    .imageEngine(new GlideEngine())
654
            PictureSelector.create(this)
655
                    .openGallery(PictureMimeType.ofImage())
656
                    .maxSelectNum(1)
657
                    .selectionMode(PictureConfig.SINGLE)
658
                    .isSingleDirectReturn(true)
659
                    .isCompress(true)//是否压缩
660
                    .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
661
                    .isGif(false)//是否显示gif
662
                    .isAndroidQTransform(true)
663
                    .imageEngine(GlideEngine.createGlideEngine())
664
                    .isWeChatStyle(false)// 是否开启微信图片选择风格
665
                    .isUseCustomCamera(false)// 是否使用自定义相机
666
                    .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
667
                    .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
668
                    .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
669
                    .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
670
                    .imageSpanCount(4)// 每行显示个数
671
                    .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
672
                    .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
649
                    .forResult(REQUEST_CODE_CHOOSE);
673
                    .forResult(REQUEST_CODE_CHOOSE);
674
675
650
        } else {
676
        } else {
651
            EasyPermissions.requestPermissions(
677
            EasyPermissions.requestPermissions(
652
                    this, "充电桩想要获取您的图片读取权限,是否允许?",
678
                    this, "充电桩想要获取您的图片读取权限,是否允许?",

+ 50 - 160
app/src/main/java/com/electric/chargingpile/activity/ChargingCommentActivity.java

3
import android.Manifest;
3
import android.Manifest;
4
import android.app.Activity;
4
import android.app.Activity;
5
import android.app.ProgressDialog;
5
import android.app.ProgressDialog;
6
import android.content.ContentValues;
7
import android.content.Context;
6
import android.content.Context;
8
import android.content.Intent;
7
import android.content.Intent;
9
import android.database.Cursor;
10
import android.graphics.Bitmap;
8
import android.graphics.Bitmap;
11
import android.graphics.BitmapFactory;
9
import android.graphics.BitmapFactory;
12
import android.graphics.Color;
10
import android.graphics.Color;
13
import android.graphics.Matrix;
11
import android.graphics.Matrix;
14
import android.graphics.drawable.BitmapDrawable;
12
import android.graphics.drawable.BitmapDrawable;
15
import android.graphics.drawable.ColorDrawable;
13
import android.graphics.drawable.ColorDrawable;
16
import android.net.Uri;
17
import android.os.Build;
14
import android.os.Build;
18
import android.os.Bundle;
15
import android.os.Bundle;
19
import android.os.Environment;
20
import android.os.Handler;
16
import android.os.Handler;
21
import android.os.Message;
17
import android.os.Message;
22
import android.provider.MediaStore;
23
import android.text.Editable;
18
import android.text.Editable;
24
import android.text.TextWatcher;
19
import android.text.TextWatcher;
25
import android.util.Base64;
20
import android.util.Base64;
32
import android.view.inputmethod.InputMethodManager;
27
import android.view.inputmethod.InputMethodManager;
33
import android.widget.AdapterView;
28
import android.widget.AdapterView;
34
import android.widget.BaseAdapter;
29
import android.widget.BaseAdapter;
35
import android.widget.Button;
36
import android.widget.GridView;
30
import android.widget.GridView;
37
import android.widget.ImageView;
31
import android.widget.ImageView;
38
import android.widget.LinearLayout;
39
import android.widget.PopupWindow;
32
import android.widget.PopupWindow;
40
import android.widget.RelativeLayout;
33
import android.widget.RelativeLayout;
41
import android.widget.ScrollView;
34
import android.widget.ScrollView;
50
import com.electric.chargingpile.data.ChargingShareBean;
43
import com.electric.chargingpile.data.ChargingShareBean;
51
import com.electric.chargingpile.data.CommentsBean;
44
import com.electric.chargingpile.data.CommentsBean;
52
import com.electric.chargingpile.data.RObject;
45
import com.electric.chargingpile.data.RObject;
46
import com.electric.chargingpile.engine.GlideEngine;
53
import com.electric.chargingpile.util.BarColorUtil;
47
import com.electric.chargingpile.util.BarColorUtil;
54
import com.electric.chargingpile.util.Bimp;
48
import com.electric.chargingpile.util.Bimp;
55
import com.electric.chargingpile.util.DES3;
49
import com.electric.chargingpile.util.DES3;
56
import com.electric.chargingpile.util.FileUtils;
57
import com.electric.chargingpile.util.ImageItem;
50
import com.electric.chargingpile.util.ImageItem;
58
import com.electric.chargingpile.util.ImageUtils;
59
import com.electric.chargingpile.util.JsonUtils;
51
import com.electric.chargingpile.util.JsonUtils;
60
import com.electric.chargingpile.util.LoadingDialog;
52
import com.electric.chargingpile.util.LoadingDialog;
61
import com.electric.chargingpile.util.Md5Util;
53
import com.electric.chargingpile.util.Md5Util;
64
import com.electric.chargingpile.util.StatusConstants;
56
import com.electric.chargingpile.util.StatusConstants;
65
import com.electric.chargingpile.util.ToastUtil;
57
import com.electric.chargingpile.util.ToastUtil;
66
import com.electric.chargingpile.util.UploadUtil;
58
import com.electric.chargingpile.util.UploadUtil;
59
import com.electric.chargingpile.util.Util;
67
import com.electric.chargingpile.view.HongBaoDialog;
60
import com.electric.chargingpile.view.HongBaoDialog;
68
import com.electric.chargingpile.view.HongBaoResultDialog;
61
import com.electric.chargingpile.view.HongBaoResultDialog;
69
import com.electric.chargingpile.view.REditText;
62
import com.electric.chargingpile.view.REditText;
70
import com.electric.chargingpile.view.RatingBarView;
63
import com.electric.chargingpile.view.RatingBarView;
64
import com.luck.picture.lib.PictureSelector;
65
import com.luck.picture.lib.animators.AnimationType;
66
import com.luck.picture.lib.config.PictureConfig;
67
import com.luck.picture.lib.config.PictureMimeType;
68
import com.luck.picture.lib.entity.LocalMedia;
71
import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet;
69
import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet;
72
import com.zhihu.matisse.Matisse;
73
import com.zhihu.matisse.MimeType;
74
import com.zhihu.matisse.engine.impl.GlideEngine;
75
import com.zhihu.matisse.internal.entity.CaptureStrategy;
76
import com.zhy.http.okhttp.OkHttpUtils;
70
import com.zhy.http.okhttp.OkHttpUtils;
77
import com.zhy.http.okhttp.callback.StringCallback;
71
import com.zhy.http.okhttp.callback.StringCallback;
78
import com.zhy.view.flowlayout.FlowLayout;
72
import com.zhy.view.flowlayout.FlowLayout;
84
78
85
import java.io.ByteArrayOutputStream;
79
import java.io.ByteArrayOutputStream;
86
import java.io.File;
80
import java.io.File;
87
import java.io.FileNotFoundException;
88
import java.io.IOException;
81
import java.io.IOException;
89
import java.net.URLEncoder;
82
import java.net.URLEncoder;
90
import java.util.ArrayList;
83
import java.util.ArrayList;
137
    private String select_s = "";
130
    private String select_s = "";
138
    private String select_ss = "";
131
    private String select_ss = "";
139
    private TextView tv_grade;
132
    private TextView tv_grade;
140
    private File tempFile;
141
    private static String PHOTO_FILE_NAME = "";
142
    private static final String PHOTO_FILE_PATH = getPath(Environment.getExternalStorageDirectory() + "/" + "cdz");
133
143
    public static Bitmap bimap;
134
    public static Bitmap bimap;
144
    private PopupWindow pop = null;
145
    private LinearLayout ll_popup;
135
146
    private GridView noScrollgridview;
136
    private GridView noScrollgridview;
147
    private ScrollView sv;
137
    private ScrollView sv;
148
    private GridAdapter adapter;
138
    private GridAdapter adapter;
193
            super.handleMessage(msg);
183
            super.handleMessage(msg);
194
        }
184
        }
195
    };
185
    };
196
186
    private List<LocalMedia> mSelectionData =new ArrayList<LocalMedia>();
197
    @Override
187
    @Override
198
    protected void onCreate(Bundle savedInstanceState) {
188
    protected void onCreate(Bundle savedInstanceState) {
199
        super.onCreate(savedInstanceState);
189
        super.onCreate(savedInstanceState);
201
        BarColorUtil.initStatusBarColor(ChargingCommentActivity.this);
191
        BarColorUtil.initStatusBarColor(ChargingCommentActivity.this);
202
        dialog = new LoadingDialog(this);
192
        dialog = new LoadingDialog(this);
203
        dialog.setCanceledOnTouchOutside(false);
193
        dialog.setCanceledOnTouchOutside(false);
204
        long appTime1 = System.currentTimeMillis() / 1000;
205
        PHOTO_FILE_NAME = "android" + appTime1 + ".jpg";
206
        tempFile = getFile(PHOTO_FILE_PATH + "/" + PHOTO_FILE_NAME);
207
        Res.init(this);
194
        Res.init(this);
208
        bimap = BitmapFactory.decodeResource(
195
        bimap = BitmapFactory.decodeResource(
209
                getResources(),
196
                getResources(),
451
    }
438
    }
452
439
453
    public void Init() {
440
    public void Init() {
454
        pop = new PopupWindow(ChargingCommentActivity.this);
455
        View view = getLayoutInflater().inflate(R.layout.item_popupwindows, null);
456
        ll_popup = (LinearLayout) view.findViewById(R.id.ll_popup);
457
458
        pop.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
459
        pop.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
460
        pop.setBackgroundDrawable(new BitmapDrawable());
461
        pop.setFocusable(true);
462
        pop.setOutsideTouchable(true);
463
        pop.setContentView(view);
464
465
466
        final RelativeLayout parent = (RelativeLayout) view.findViewById(R.id.parent);
467
        Button bt1 = (Button) view
468
                .findViewById(R.id.item_popupwindows_camera);
469
        Button bt2 = (Button) view
470
                .findViewById(R.id.item_popupwindows_Photo);
471
        Button bt3 = (Button) view
472
                .findViewById(R.id.item_popupwindows_cancel);
473
        parent.setOnClickListener(new View.OnClickListener() {
474
475
            @Override
476
            public void onClick(View v) {
477
                // TODO Auto-generated method stub
478
                pop.dismiss();
479
                ll_popup.clearAnimation();
480
            }
481
        });
482
        bt1.setOnClickListener(new View.OnClickListener() {
483
            public void onClick(View v) {
484
                photo();
485
//                saveFullImage();
486
                pop.dismiss();
487
//                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
488
//                ((Activity) mContext).startActivityForResult(intent, 2);
489
                ll_popup.clearAnimation();
490
            }
491
        });
492
        bt2.setOnClickListener(new View.OnClickListener() {
493
            public void onClick(View v) {
494
                Intent intent = new Intent(ChargingCommentActivity.this,
495
                        AlbumActivityCharging.class);
496
                startActivity(intent);
497
                overridePendingTransition(R.anim.activity_translate_in, R.anim.activity_translate_out);
498
//                startActivityForResult(intent, 1);
499
                pop.dismiss();
500
                ll_popup.clearAnimation();
501
            }
502
        });
503
        bt3.setOnClickListener(new View.OnClickListener() {
504
            public void onClick(View v) {
505
                pop.dismiss();
506
                ll_popup.clearAnimation();
507
            }
508
        });
509
441
510
        noScrollgridview = (GridView) findViewById(R.id.noScrollgridview);
442
        noScrollgridview = (GridView) findViewById(R.id.noScrollgridview);
511
        noScrollgridview.setSelector(new ColorDrawable(Color.TRANSPARENT));
443
        noScrollgridview.setSelector(new ColorDrawable(Color.TRANSPARENT));
534
     * 调用图库选择
466
     * 调用图库选择
535
     */
467
     */
536
    private void callGallery() {
468
    private void callGallery() {
469
/*
537
        Matisse.from(ChargingCommentActivity.this)
470
        Matisse.from(ChargingCommentActivity.this)
538
                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
471
                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
539
                .showSingleMediaType(true)
472
                .showSingleMediaType(true)
543
                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
476
                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
544
                .imageEngine(new GlideEngine())
477
                .imageEngine(new GlideEngine())
545
                .forResult(REQUEST_CODE_CHOOSE);
478
                .forResult(REQUEST_CODE_CHOOSE);
479
*/
480
481
        PictureSelector.create(this)
482
                .openGallery(PictureMimeType.ofImage())
483
                .maxSelectNum(PIC_NUM)
484
                .selectionMode(PictureConfig.MULTIPLE)
485
                .selectionData(mSelectionData)//是否传入已选图片
486
                .isCompress(true)//是否压缩
487
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
488
                .isGif(true)//是否显示gif
489
                .isAndroidQTransform(true)
490
                .imageEngine(GlideEngine.createGlideEngine())
491
                .isWeChatStyle(false)// 是否开启微信图片选择风格
492
                .isUseCustomCamera(false)// 是否使用自定义相机
493
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
494
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
495
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
496
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
497
                .imageSpanCount(4)// 每行显示个数
498
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
499
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
500
                .forResult(REQUEST_CODE_CHOOSE);
501
546
    }
502
    }
547
503
548
    @Override
504
    @Override
571
            @Override
527
            @Override
572
            public void subscribe(ObservableEmitter<String> subscriber) throws Exception {
528
            public void subscribe(ObservableEmitter<String> subscriber) throws Exception {
573
                try {
529
                try {
574
                    List<Uri> uriList = Matisse.obtainResult(data);
575
                    for (Uri uri : uriList) {
576
                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
577
                        File file = FileUtils.from(ChargingCommentActivity.this, uri);
578
579
                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
580
                        bitmap = imageZoom(bitmap);
530
                    mSelectionData= PictureSelector.obtainMultipleResult(data);
531
532
//                    List<Uri> uriList = Matisse.obtainResult(data);
533
                    for (LocalMedia media : mSelectionData) {
534
//                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
535
//                        File file = FileUtils.from(ChargingCommentActivity.this, uri);
536
//
537
//                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
538
//                        bitmap = imageZoom(bitmap);
539
                        String path="";
540
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
541
                            path= media.getAndroidQToPath();
542
                        }else{
543
                            path=media.getPath();
544
                        }
581
                        ImageItem takePhoto = new ImageItem();
545
                        ImageItem takePhoto = new ImageItem();
582
                        takePhoto.setBitmap(bitmap);
546
                        takePhoto.setBitmap(imageZoom(BitmapFactory.decodeFile(path)));
583
                        Bimp.tempSelectBitmap.add(takePhoto);
547
                        Bimp.tempSelectBitmap.add(takePhoto);
584
                        subscriber.onNext("");
548
                        subscriber.onNext("");
585
                    }
549
                    }
1173
        }
1137
        }
1174
    }
1138
    }
1175
1139
1176
    public void photo() {
1177
        if (hasSdcard()) {
1178
            int currentapiVersion = Build.VERSION.SDK_INT;
1179
            Log.e("currentapiVersion", "currentapiVersion====>" + currentapiVersion);
1180
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//���������
1181
            intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
1182
            startActivityForResult(intent, PHOTO_REQUEST_CAMERA);
1183
        }
1184
    }
1185
1140
1186
    private boolean hasSdcard() {
1187
        if (Environment.getExternalStorageState().equals(
1188
                Environment.MEDIA_MOUNTED)) {
1189
            return true;
1190
        } else {
1191
            return false;
1192
        }
1193
    }
1194
1195
    private void crop(Uri uri, Uri cutImgUri) {
1196
        // �ü�ͼƬ��ͼ
1197
        Intent intent = new Intent("com.android.camera.action.CROP");
1198
        intent.setDataAndType(getImageContentUri(this, tempFile), "image/*");
1199
1200
        intent.putExtra("crop", "true");
1201
        // �ü���ı�����1��1
1202
//        intent.putExtra("aspectX", 16);
1203
//        intent.putExtra("aspectY", 9);
1204
//        // �ü������ͼƬ�ijߴ��С
1205
//        intent.putExtra("outputX", 640);
1206
//        intent.putExtra("outputY", 360);
1207
1208
        // ͼƬ��ʽ
1209
        intent.putExtra("outputFormat", "JPEG");
1210
        intent.putExtra("noFaceDetection", true);// ȡ������ʶ��
1211
        intent.putExtra("return-data", false);// true:������uri��false������uri
1212
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));//д���ȡ��ͼƬ
1213
        startActivityForResult(intent, PHOTO_REQUEST_CUT);
1214
    }
1215
1216
    public static Uri getImageContentUri(Context context, File imageFile) {
1217
        String filePath = imageFile.getAbsolutePath();
1218
        Cursor cursor = context.getContentResolver().query(
1219
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
1220
                new String[]{MediaStore.Images.Media._ID},
1221
                MediaStore.Images.Media.DATA + "=? ",
1222
                new String[]{filePath}, null);
1223
1224
        if (cursor != null && cursor.moveToFirst()) {
1225
            int id = cursor.getInt(cursor
1226
                    .getColumnIndex(MediaStore.MediaColumns._ID));
1227
            Uri baseUri = Uri.parse("content://media/external/images/media");
1228
            return Uri.withAppendedPath(baseUri, "" + id);
1229
        } else {
1230
            if (imageFile.exists()) {
1231
                ContentValues values = new ContentValues();
1232
                values.put(MediaStore.Images.Media.DATA, filePath);
1233
                return context.getContentResolver().insert(
1234
                        MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
1235
            } else {
1236
                return null;
1237
            }
1238
        }
1239
    }
1240
1241
    public Bitmap decodeUriAsBitmap(Uri uri) {
1242
        Bitmap bitmap = null;
1243
        try {
1244
            bitmap = BitmapFactory.decodeStream(this.getContentResolver().openInputStream(uri));
1245
        } catch (FileNotFoundException e) {
1246
            e.printStackTrace();
1247
            return null;
1248
        }
1249
        return bitmap;
1250
    }
1251
1141
1252
    protected void onRestart() {
1142
    protected void onRestart() {
1253
        adapter.update();
1143
        adapter.update();

+ 3 - 67
app/src/main/java/com/electric/chargingpile/activity/ClaimDataActivity.java

8
import android.graphics.Bitmap;
8
import android.graphics.Bitmap;
9
import android.net.Uri;
9
import android.net.Uri;
10
import android.os.Bundle;
10
import android.os.Bundle;
11
import android.os.Environment;
11
12
import android.os.Handler;
12
import android.os.Handler;
13
import android.os.Message;
13
import android.os.Message;
14
import android.telephony.TelephonyManager;
14
import android.telephony.TelephonyManager;
50
import java.util.HashMap;
50
import java.util.HashMap;
51
import java.util.Map;
51
import java.util.Map;
52
52
53
import static com.electric.chargingpile.util.PhotoUtils.CACHE_DIR;
54
53
55
54
public class ClaimDataActivity extends Activity {
56
public class ClaimDataActivity extends Activity {
55
    private TextView zhanName, address, shuoming;
57
    private TextView zhanName, address, shuoming;
582
    }
584
    }
583
585
584
    /**
586
    /**
585
     * 裁剪图片方法实现 @param uri
586
     */
587
    public void startPhotoZoom(Uri uri) {
588
        /*
589
         *   * 至于下面这个Intent的ACTION是怎么知道的,大家可以看下自己路径下的如下网页   *
590
         * yourself_sdk_path/docs/reference/android/content/Intent.html   *
591
         * 直接在里面Ctrl+F搜:CROP ,之前小马没仔细看过,其实安卓系统早已经有自带图片裁剪功能,   * 是直接调本地库的,不懂C C++
592
         * 这个不做详细了解去了,有轮子就用轮子,不再研究轮子是怎么   * 制做的了...吼吼
593
         */
594
        Intent intent = new Intent("com.android.camera.action.CROP");
595
        intent.setDataAndType(uri, "image/*");
596
597
        // 下面这个crop=true是设置在开启的Intent中设置显示的VIEW可裁剪
598
        intent.putExtra("crop", "true");
599
        // aspectX aspectY 是宽高的比例
600
        intent.putExtra("aspectX", 4);
601
        intent.putExtra("aspectY", 3);
602
        // outputX outputY 是裁剪图片宽高
603
        intent.putExtra("outputX", 400);
604
        intent.putExtra("outputY", 300);
605
        intent.putExtra("return-data", true);
606
        startActivityForResult(intent, 3);
607
    }
608
609
    /**
610
     * 保存裁剪之后的图片数据
587
     * 保存裁剪之后的图片数据
611
     **/
588
     **/
612
    private void setPicToView(Intent picdata) {
589
    private void setPicToView(Intent picdata) {
623
        }
600
        }
624
    }
601
    }
625
602
626
    private String bitmapToBase64(Bitmap bitmap) {
627
628
        String result = null;
629
        ByteArrayOutputStream baos = null;
630
        try {
631
            if (bitmap != null) {
632
                baos = new ByteArrayOutputStream();
633
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
634
                baos.flush();
635
                baos.close();
636
                byte[] bitmapBytes = baos.toByteArray();
637
                result = Base64.encodeToString(bitmapBytes, Base64.DEFAULT);
638
            }
639
        } catch (IOException e) {
640
            e.printStackTrace();
641
        } finally {
642
            try {
643
                if (baos != null) {
644
                    baos.flush();
645
                    baos.close();
646
                }
647
            } catch (IOException e) {
648
                e.printStackTrace();
649
            }
650
        }
651
        return result;
652
    }
653
603
654
    @Override
604
    @Override
655
    public void onActivityResult(final int requestCode, int resultCode,
605
    public void onActivityResult(final int requestCode, int resultCode,
660
            return;
610
            return;
661
611
662
        switch (requestCode) {
612
        switch (requestCode) {
663
            // 如果是直接从相册获取
664
            case 1:
665
                if (data != null) {
666
                    startPhotoZoom(data.getData());
667
                    Toast.makeText(mContext, "拖动正方形角可调整剪切大小",
668
                            android.widget.Toast.LENGTH_SHORT).show();
669
                }
670
                break;
671
            // 如果是调用相机拍照时
672
            case 2:
673
                File temp = new File(Environment.getExternalStorageDirectory()
674
                        + "/androidapp.jpg");
675
                startPhotoZoom(Uri.fromFile(temp));
676
                break;
677
            // 取得裁剪后的图片
613
            // 取得裁剪后的图片
678
            case 3:
614
            case 3:
679
                if (data != null) {
615
                if (data != null) {

+ 96 - 78
app/src/main/java/com/electric/chargingpile/activity/ClaimSurveyTwoActivity.java

16
import android.net.Uri;
16
import android.net.Uri;
17
import android.os.Build;
17
import android.os.Build;
18
import android.os.Bundle;
18
import android.os.Bundle;
19
import android.os.Environment;
20
import android.os.Handler;
19
import android.os.Handler;
21
import android.os.Message;
20
import android.os.Message;
22
import android.provider.MediaStore;
21
import android.provider.MediaStore;
71
import com.electric.chargingpile.R;
70
import com.electric.chargingpile.R;
72
import com.electric.chargingpile.application.MainApplication;
71
import com.electric.chargingpile.application.MainApplication;
73
import com.electric.chargingpile.data.Zhan;
72
import com.electric.chargingpile.data.Zhan;
73
import com.electric.chargingpile.engine.GlideEngine;
74
import com.electric.chargingpile.util.Bimp;
74
import com.electric.chargingpile.util.Bimp;
75
import com.electric.chargingpile.util.DES3;
75
import com.electric.chargingpile.util.DES3;
76
import com.electric.chargingpile.util.FileUtils;
76
import com.electric.chargingpile.util.FileUtils;
77
import com.electric.chargingpile.util.ImageItem;
77
import com.electric.chargingpile.util.ImageItem;
78
import com.electric.chargingpile.util.OkHttpUtil;
78
import com.electric.chargingpile.util.OkHttpUtil;
79
import com.electric.chargingpile.util.PhotoUtils;
79
import com.electric.chargingpile.util.PublicWay;
80
import com.electric.chargingpile.util.PublicWay;
80
import com.electric.chargingpile.util.Res;
81
import com.electric.chargingpile.util.Res;
81
import com.electric.chargingpile.util.SharedPreferencesUtil;
82
import com.electric.chargingpile.util.SharedPreferencesUtil;
88
import com.google.android.gms.appindexing.AppIndex;
89
import com.google.android.gms.appindexing.AppIndex;
89
import com.google.android.gms.appindexing.Thing;
90
import com.google.android.gms.appindexing.Thing;
90
import com.google.android.gms.common.api.GoogleApiClient;
91
import com.google.android.gms.common.api.GoogleApiClient;
92
import com.luck.picture.lib.PictureSelector;
93
import com.luck.picture.lib.animators.AnimationType;
94
import com.luck.picture.lib.config.PictureConfig;
95
import com.luck.picture.lib.config.PictureMimeType;
96
import com.luck.picture.lib.entity.LocalMedia;
91
import com.squareup.okhttp.Request;
97
import com.squareup.okhttp.Request;
92
import com.squareup.okhttp.Response;
98
import com.squareup.okhttp.Response;
93
import com.umeng.analytics.MobclickAgent;
99
import com.umeng.analytics.MobclickAgent;
100
import com.yalantis.ucrop.view.OverlayView;
94
101
95
import org.json.JSONException;
102
import org.json.JSONException;
96
import org.json.JSONObject;
103
import org.json.JSONObject;
122
    private String camePath;//拍照路径
129
    private String camePath;//拍照路径
123
    //    private LocationMode mCurrentMode;
130
    //    private LocationMode mCurrentMode;
124
    private static final String PHOTO_FILE_NAME = "android.jpg";
131
    private static final String PHOTO_FILE_NAME = "android.jpg";
125
    private static final String PHOTO_FILE_PATH = getPath(Environment.getExternalStorageDirectory() + "/" + "cdz");
132
    private static final String PHOTO_FILE_PATH = getPath(PhotoUtils.CACHE_DIR);
126
    private File tempFile;
133
    private File tempFile;
127
    private static final int PHOTO_REQUEST_CAMERA = 1;
134
    private static final int PHOTO_REQUEST_CAMERA = 1;
128
    private static final int PHOTO_REQUEST_GALLERY = 2;
135
    private static final int PHOTO_REQUEST_GALLERY = 2;
129
    private static final int PHOTO_REQUEST_CUT = 3;
136
130
    private String gd_jing, gd_wei;
137
    private String gd_jing, gd_wei;
131
    String ls_jing, ls_wei;
138
    String ls_jing, ls_wei;
132
    private boolean isTouch = false;
139
    private boolean isTouch = false;
369
        });
376
        });
370
        bt2.setOnClickListener(new View.OnClickListener() {
377
        bt2.setOnClickListener(new View.OnClickListener() {
371
            public void onClick(View v) {
378
            public void onClick(View v) {
372
                Intent intent = new Intent(ClaimSurveyTwoActivity.this,
373
                        AlbumActivity4claim.class);
374
                startActivity(intent);
375
                overridePendingTransition(R.anim.activity_translate_in, R.anim.activity_translate_out);
379
//                Intent intent = new Intent(ClaimSurveyTwoActivity.this,
380
//                        AlbumActivity4claim.class);
381
//                startActivity(intent);
382
//                overridePendingTransition(R.anim.activity_translate_in, R.anim.activity_translate_out);
376
//                startActivityForResult(intent, 1);
383
//                startActivityForResult(intent, 1);
384
                openPhotoAlbum();
377
                pop.dismiss();
385
                pop.dismiss();
378
                ll_popup.clearAnimation();
386
                ll_popup.clearAnimation();
379
            }
387
            }
1817
1825
1818
    private static final int TAKE_PICTURE = 0x000001;
1826
    private static final int TAKE_PICTURE = 0x000001;
1819
1827
1820
//    public void photo() {
1821
//        Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
1822
//        startActivityForResult(openCameraIntent, TAKE_PICTURE);
1823
////        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
1824
////        File file = new File(Environment.getExternalStorageDirectory() + "/myimage/", String.valueOf(System
1825
////                .currentTimeMillis()) + ".jpg");
1826
////        camePath = file.getPath();
1827
////        Uri imageUri = Uri.fromFile(file);
1828
////        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
1829
////        startActivityForResult(intent, TAKE_PICTURE);
1830
//    }
1828
1831
1829
1832
    public void photo() {
1830
    public void photo() {
1833
//		Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
1834
//		startActivityForResult(openCameraIntent, TAKE_PICTURE);
1835
//        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
1836
//        File file = new File(Environment.getExternalStorageDirectory() + "/myimage/", String.valueOf(System
1837
//                .currentTimeMillis()) + ".jpg");
1838
//        camePath = file.getPath();
1839
//        Uri imageUri = Uri.fromFile(file);
1840
//        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
1841
//        startActivityForResult(intent, TAKE_PICTURE);
1842
        if (hasSdcard()) {
1843
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//���������
1844
            intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
1845
//            intent.putExtra(MediaStore.EXTRA_OUTPUT, cutImgUri);
1846
            startActivityForResult(intent, PHOTO_REQUEST_CAMERA);
1847
        }
1831
        PictureSelector.create(this)
1832
                .openCamera(PictureMimeType.ofImage())
1833
                .selectionMode(PictureConfig.SINGLE)
1834
                .isSingleDirectReturn(true)
1835
                .isCompress(true)//是否压缩
1836
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
1837
                .isGif(false)//是否显示gif
1838
                .isAndroidQTransform(true)
1839
                .imageEngine(GlideEngine.createGlideEngine())
1840
                .isWeChatStyle(false)// 是否开启微信图片选择风格
1841
                .isUseCustomCamera(false)// 是否使用自定义相机
1842
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
1843
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
1844
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
1845
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
1846
                .imageSpanCount(4)// 每行显示个数
1847
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
1848
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
1849
                .isEnableCrop(true)
1850
                .rotateEnabled(false)//裁剪是否可旋转图片
1851
                .freeStyleCropMode(OverlayView.DEFAULT_FREESTYLE_CROP_MODE)// 裁剪框拖动模式
1852
                .isCropDragSmoothToCenter(true)// 裁剪框拖动时图片自动跟随居中
1853
                .circleDimmedLayer(false)// 是否开启圆形裁剪
1854
                .isDragFrame(true)//是否可拖动裁剪框(固定)
1855
                .showCropFrame(true)// 是否显示裁剪矩形边框 圆形裁剪时建议设为false
1856
                .showCropGrid(true)//是否显示裁剪矩形网格 圆形裁剪时建议设为false
1857
                .forResult(PHOTO_REQUEST_CAMERA);
1858
1859
    }
1860
    private void openPhotoAlbum() {
1861
        PictureSelector.create(this)
1862
                .openGallery(PictureMimeType.ofImage())
1863
                .isCamera(false)//列表是否显示拍照按钮
1864
                .selectionMode(PictureConfig.SINGLE)
1865
                .isSingleDirectReturn(true)//PictureConfig.SINGLE模式下是否直接返回
1866
                .isCompress(true)//是否压缩
1867
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
1868
                .isGif(false)//是否显示gif
1869
                .isAndroidQTransform(true)
1870
                .imageEngine(GlideEngine.createGlideEngine())
1871
                .isWeChatStyle(false)// 是否开启微信图片选择风格
1872
                .isUseCustomCamera(false)// 是否使用自定义相机
1873
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
1874
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
1875
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
1876
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
1877
                .imageSpanCount(4)// 每行显示个数
1878
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
1879
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
1880
                .rotateEnabled(false)//裁剪是否可旋转图片
1881
                .isEnableCrop(true)
1882
                .rotateEnabled(false)//裁剪是否可旋转图片
1883
                .setCircleStrokeWidth(8)//设置圆形裁剪边框粗细
1884
                .freeStyleCropMode(OverlayView.DEFAULT_FREESTYLE_CROP_MODE)// 裁剪框拖动模式
1885
                .isCropDragSmoothToCenter(true)// 裁剪框拖动时图片自动跟随居中
1886
                .circleDimmedLayer(true)// 是否开启圆形裁剪
1887
                .isDragFrame(true)//是否可拖动裁剪框(固定)
1888
                .showCropFrame(false)// 是否显示裁剪矩形边框 圆形裁剪时建议设为false
1889
                .showCropGrid(false)//是否显示裁剪矩形网格 圆形裁剪时建议设为false
1890
                .forResult(PHOTO_REQUEST_GALLERY);
1848
    }
1891
    }
1849
1892
1850
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
1893
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
1861
        }
1904
        }
1862
        System.out.println("--------data------->" + data);
1905
        System.out.println("--------data------->" + data);
1863
        //���ѡȡ
1906
        //���ѡȡ
1864
        if (requestCode == PHOTO_REQUEST_CAMERA && resultCode == Activity.RESULT_OK) {
1865
            //��������ͼƬ�ͽ�ȡ���ͼƬ�ļ���д����ͬһ���ļ���photo.jpg
1866
            crop(Uri.fromFile(tempFile), Uri.fromFile(tempFile));
1867
        }
1868
        //���ؽ�ȡ��ͼƬ
1869
        else if (requestCode == PHOTO_REQUEST_CUT && data != null) {
1870
            //���д�ͼʹ��Uri
1871
            Bitmap bitmap = decodeUriAsBitmap(Uri.fromFile(tempFile));//decode bitmap
1872
//            mFace.setImageBitmap(bitmap);
1873
            String fileName = String.valueOf(System.currentTimeMillis());
1874
            ImageItem takePhoto = new ImageItem();
1875
            takePhoto.setBitmap(bitmap);
1876
            takePhoto.setImagePath(FileUtils.SDPATH + fileName + ".JPEG");
1877
            Bimp.tempSelectBitmap.add(takePhoto);
1878
        } else {
1879
//            Toast.makeText(getApplicationContext(), "��ȡͼƬʧ��", Toast.LENGTH_SHORT).show();
1907
        if (resultCode == Activity.RESULT_OK){
1908
            if (requestCode == PHOTO_REQUEST_CAMERA || requestCode == PHOTO_REQUEST_GALLERY) {
1909
                List<LocalMedia> medias = PictureSelector.obtainMultipleResult(data);
1910
                if (medias != null && medias.size() > 0) {
1911
                    String path = "";
1912
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
1913
                        path = medias.get(0).getAndroidQToPath();
1914
                    } else {
1915
                        path = medias.get(0).getPath();
1916
                    }
1917
                    Bitmap bitmap = BitmapFactory.decodeFile(path);
1918
                    ImageItem takePhoto = new ImageItem();
1919
                    takePhoto.setBitmap(bitmap);
1920
                    takePhoto.setImagePath(path);
1921
                    Bimp.tempSelectBitmap.add(takePhoto);
1922
                }
1923
1924
            }
1925
1880
        }
1926
        }
1927
1881
        super.onActivityResult(requestCode, resultCode, data);
1928
        super.onActivityResult(requestCode, resultCode, data);
1882
    }
1929
    }
1883
1930
2026
//        bdLocation.recycle();
2073
//        bdLocation.recycle();
2027
    }
2074
    }
2028
2075
2029
    private void crop(Uri uri, Uri cutImgUri) {
2030
        // �ü�ͼƬ��ͼ
2031
        Intent intent = new Intent("com.android.camera.action.CROP");
2032
        intent.setDataAndType(uri, "image/*");
2033
        intent.putExtra("crop", "true");
2034
        // �ü���ı�����1��1
2035
//        intent.putExtra("aspectX", 4);
2036
//        intent.putExtra("aspectY", 3);
2037
        // �ü������ͼƬ�ijߴ��С
2038
//        intent.putExtra("outputX", 400);
2039
//        intent.putExtra("outputY", 300);
2040
2041
        // ͼƬ��ʽ
2042
        intent.putExtra("outputFormat", "JPEG");
2043
        intent.putExtra("noFaceDetection", true);// ȡ������ʶ��
2044
        intent.putExtra("return-data", false);// true:������uri��false������uri
2045
        intent.putExtra(MediaStore.EXTRA_OUTPUT, cutImgUri);//д���ȡ��ͼƬ
2046
        startActivityForResult(intent, PHOTO_REQUEST_CUT);
2047
    }
2048
2049
    private boolean hasSdcard() {
2050
        if (Environment.getExternalStorageState().equals(
2051
                Environment.MEDIA_MOUNTED)) {
2052
            return true;
2053
        } else {
2054
            return false;
2055
        }
2056
    }
2057
2058
    private static String getPath(String path) {
2076
    private static String getPath(String path) {
2059
        File f = new File(path);
2077
        File f = new File(path);
2060
        if (!f.exists()) {
2078
        if (!f.exists()) {

+ 7 - 26
app/src/main/java/com/electric/chargingpile/activity/CompletePhotoActivity.java

1
package com.electric.chargingpile.activity;
1
package com.electric.chargingpile.activity;
2

2

3
import android.app.Activity;
3
import android.app.Activity;
4
import android.app.AlertDialog;
5
import android.content.ContentResolver;
6
import android.content.DialogInterface;
7
import android.content.Intent;
8
import android.database.Cursor;
9
import android.graphics.Bitmap;
10
import android.graphics.BitmapFactory;
11
import android.net.Uri;
12
import android.os.Bundle;
13
import android.os.Environment;
14
import android.provider.MediaStore;
15
import android.text.TextUtils;
16
import android.util.Log;
17
import android.view.View;
18
import android.widget.ImageView;
19
import android.widget.LinearLayout;
20

21
import com.electric.chargingpile.R;
22
import com.electric.chargingpile.util.ImageTools;
23

24
import java.io.File;
25

26

27
public class CompletePhotoActivity extends Activity implements View.OnClickListener {
28
    LinearLayout ll_addMore_photo;
4
/**
5
 * 已废弃
6
 * */
7
@Deprecated
8
public class CompletePhotoActivity extends Activity {
9
 /*   LinearLayout ll_addMore_photo;
29
    private static String srcPath = "";
10
    private static String srcPath = "";
30
    private ImageView image, updatePhoto_moveback;
11
    private ImageView image, updatePhoto_moveback;
31
    private File mPhotoFile;
12
    private File mPhotoFile;
169
                image.setImageBitmap(BitmapFactory.decodeFile(srcPath));
150
                image.setImageBitmap(BitmapFactory.decodeFile(srcPath));
170
            }
151
            }
171
        }
152
        }
172
    }
153
    }*/
173
}
154
}

+ 58 - 23
app/src/main/java/com/electric/chargingpile/activity/EditAnswerActivity.java

7
import android.graphics.Bitmap;
7
import android.graphics.Bitmap;
8
import android.graphics.BitmapFactory;
8
import android.graphics.BitmapFactory;
9
import android.graphics.Matrix;
9
import android.graphics.Matrix;
10
import android.net.Uri;
10
import android.os.Build;
11
import android.os.Bundle;
11
import android.os.Bundle;
12
import android.os.Handler;
12
import android.os.Handler;
13
14
import androidx.appcompat.app.AppCompatActivity;
15
16
import android.util.DisplayMetrics;
13
import android.util.DisplayMetrics;
17
import android.util.Log;
14
import android.util.Log;
18
import android.util.TypedValue;
15
import android.util.TypedValue;
27
import android.widget.TextView;
24
import android.widget.TextView;
28
import android.widget.Toast;
25
import android.widget.Toast;
29
26
27
import androidx.appcompat.app.AppCompatActivity;
28
30
import com.electric.chargingpile.R;
29
import com.electric.chargingpile.R;
31
import com.electric.chargingpile.application.MainApplication;
30
import com.electric.chargingpile.application.MainApplication;
31
import com.electric.chargingpile.engine.GlideEngine;
32
import com.electric.chargingpile.util.AndroidBug5497Workaround;
32
import com.electric.chargingpile.util.AndroidBug5497Workaround;
33
import com.electric.chargingpile.util.BarColorUtil;
33
import com.electric.chargingpile.util.BarColorUtil;
34
import com.electric.chargingpile.util.FileUtils;
34
import com.electric.chargingpile.util.FileUtils;
35
import com.electric.chargingpile.util.ImageItem;
36
import com.electric.chargingpile.util.ImageUitl;
35
import com.electric.chargingpile.util.ImageUitl;
37
import com.electric.chargingpile.util.ImageUtils;
38
import com.electric.chargingpile.util.JsonUtils;
36
import com.electric.chargingpile.util.JsonUtils;
39
import com.electric.chargingpile.util.ScreenUtils;
40
import com.electric.chargingpile.util.StringUtils;
37
import com.electric.chargingpile.util.StringUtils;
41
import com.electric.chargingpile.util.ToastUtil;
38
import com.electric.chargingpile.util.ToastUtil;
42
import com.electric.chargingpile.view.CarTypeDialog;
39
import com.electric.chargingpile.util.Util;
43
import com.electric.chargingpile.view.xrichtext.RichTextEditorForA;
40
import com.electric.chargingpile.view.xrichtext.RichTextEditorForA;
44
import com.electric.chargingpile.view.xrichtext.SDCardUtil;
41
import com.electric.chargingpile.view.xrichtext.SDCardUtil;
45
import com.zhihu.matisse.Matisse;
46
import com.zhihu.matisse.MimeType;
47
import com.zhihu.matisse.engine.impl.GlideEngine;
48
import com.zhihu.matisse.internal.entity.CaptureStrategy;
42
import com.luck.picture.lib.PictureSelector;
43
import com.luck.picture.lib.animators.AnimationType;
44
import com.luck.picture.lib.config.PictureConfig;
45
import com.luck.picture.lib.config.PictureMimeType;
46
import com.luck.picture.lib.entity.LocalMedia;
49
import com.zhy.http.okhttp.OkHttpUtils;
47
import com.zhy.http.okhttp.OkHttpUtils;
50
import com.zhy.http.okhttp.callback.StringCallback;
48
import com.zhy.http.okhttp.callback.StringCallback;
51
49
52
import java.io.ByteArrayOutputStream;
50
import java.io.ByteArrayOutputStream;
53
import java.io.File;
51
import java.io.File;
54
import java.util.ArrayList;
55
import java.util.HashMap;
52
import java.util.HashMap;
56
import java.util.Iterator;
53
import java.util.Iterator;
57
import java.util.List;
54
import java.util.List;
333
330
334
                try {
331
                try {
335
                    et_new_content.measure(0, 0);
332
                    et_new_content.measure(0, 0);
336
                    List<Uri> uriList = Matisse.obtainResult(data);
337
                    Uri uri = uriList.get(0);
338
                    Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
339
                    File file = FileUtils.from(EditAnswerActivity.this, uri);
333
//                    List<Uri> uriList = Matisse.obtainResult(data);
334
                   List<LocalMedia> selectionData= PictureSelector.obtainMultipleResult(data);
335
                    if (selectionData!=null && selectionData.size()>0){
336
                        LocalMedia media = selectionData.get(0);
337
338
//                        Uri uri = uriList.get(0);
339
//                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
340
//                        File file = FileUtils.from(EditAnswerActivity.this, uri);
341
//
342
//                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
343
//                        bitmap = imageZoom(bitmap);
344
                        String path="";
345
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
346
                            path= media.getAndroidQToPath();
347
                        }else{
348
                            path=media.getPath();
349
                        }
350
                        insertBitmap = imageZoom(BitmapFactory.decodeFile(path));
340
351
341
                    bitmap = FileUtils.rotateIfRequired(file, bitmap);
342
                    bitmap = imageZoom(bitmap);
343
                    insertBitmap = bitmap;
352
                        u_path = path;
344
353
345
                    u_path = SDCardUtil.saveToSdCard(bitmap);
354
                        subscriber.onNext(u_path);
355
                        subscriber.onComplete();
356
                    }else{
357
                        subscriber.onError(new Exception());
358
                    }
346
359
347
                    subscriber.onNext(u_path);
348
                    subscriber.onComplete();
349
                } catch (Exception e) {
360
                } catch (Exception e) {
350
                    e.printStackTrace();
361
                    e.printStackTrace();
351
                    subscriber.onError(e);
362
                    subscriber.onError(e);
502
     * 调用图库选择
513
     * 调用图库选择
503
     */
514
     */
504
    private void callGallery() {
515
    private void callGallery() {
516
/*
505
        Matisse.from(EditAnswerActivity.this)
517
        Matisse.from(EditAnswerActivity.this)
506
                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
518
                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
507
                .showSingleMediaType(true)
519
                .showSingleMediaType(true)
511
                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
523
                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
512
                .imageEngine(new GlideEngine())
524
                .imageEngine(new GlideEngine())
513
                .forResult(REQUEST_CODE_CHOOSE);
525
                .forResult(REQUEST_CODE_CHOOSE);
526
*/
527
528
        PictureSelector.create(this)
529
                .openGallery(PictureMimeType.ofImage())
530
                .maxSelectNum(1)
531
                .selectionMode(PictureConfig.SINGLE)
532
                .isSingleDirectReturn(true)
533
                .isCompress(true)//是否压缩
534
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
535
                .isGif(true)//是否显示gif
536
                .isAndroidQTransform(true)
537
                .imageEngine(GlideEngine.createGlideEngine())
538
                .isWeChatStyle(false)// 是否开启微信图片选择风格
539
                .isUseCustomCamera(false)// 是否使用自定义相机
540
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
541
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
542
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
543
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
544
                .imageSpanCount(4)// 每行显示个数
545
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
546
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
547
                .forResult(REQUEST_CODE_CHOOSE);
548
514
    }
549
    }
515
550
516
    @Override
551
    @Override

+ 63 - 22
app/src/main/java/com/electric/chargingpile/activity/EditQuestionTwoActivity.java

8
import android.graphics.BitmapFactory;
8
import android.graphics.BitmapFactory;
9
import android.graphics.Matrix;
9
import android.graphics.Matrix;
10
import android.net.Uri;
10
import android.net.Uri;
11
import android.os.Build;
11
import android.os.Bundle;
12
import android.os.Bundle;
12
import android.os.Handler;
13
import android.os.Handler;
13
14
27
28
28
import com.electric.chargingpile.R;
29
import com.electric.chargingpile.R;
29
import com.electric.chargingpile.application.MainApplication;
30
import com.electric.chargingpile.application.MainApplication;
31
import com.electric.chargingpile.engine.GlideEngine;
30
import com.electric.chargingpile.util.AndroidBug5497Workaround;
32
import com.electric.chargingpile.util.AndroidBug5497Workaround;
31
import com.electric.chargingpile.util.BarColorUtil;
33
import com.electric.chargingpile.util.BarColorUtil;
32
import com.electric.chargingpile.util.FileUtils;
34
import com.electric.chargingpile.util.FileUtils;
35
import com.electric.chargingpile.util.ScreenUtils;
37
import com.electric.chargingpile.util.ScreenUtils;
36
import com.electric.chargingpile.util.StringUtils;
38
import com.electric.chargingpile.util.StringUtils;
37
import com.electric.chargingpile.util.ToastUtil;
39
import com.electric.chargingpile.util.ToastUtil;
40
import com.electric.chargingpile.util.Util;
38
import com.electric.chargingpile.view.CarTypeDialog;
41
import com.electric.chargingpile.view.CarTypeDialog;
39
import com.electric.chargingpile.view.xrichtext.RichTextEditor;
42
import com.electric.chargingpile.view.xrichtext.RichTextEditor;
40
import com.electric.chargingpile.view.xrichtext.SDCardUtil;
43
import com.electric.chargingpile.view.xrichtext.SDCardUtil;
44
import com.luck.picture.lib.PictureSelector;
45
import com.luck.picture.lib.animators.AnimationType;
46
import com.luck.picture.lib.config.PictureConfig;
47
import com.luck.picture.lib.config.PictureMimeType;
48
import com.luck.picture.lib.entity.LocalMedia;
41
import com.umeng.analytics.MobclickAgent;
49
import com.umeng.analytics.MobclickAgent;
42
import com.zhihu.matisse.Matisse;
43
import com.zhihu.matisse.MimeType;
44
import com.zhihu.matisse.engine.impl.GlideEngine;
45
import com.zhihu.matisse.internal.entity.CaptureStrategy;
50
46
import com.zhy.http.okhttp.OkHttpUtils;
51
import com.zhy.http.okhttp.OkHttpUtils;
47
import com.zhy.http.okhttp.callback.StringCallback;
52
import com.zhy.http.okhttp.callback.StringCallback;
48
53
353
358
354
                try {
359
                try {
355
                    et_new_content.measure(0, 0);
360
                    et_new_content.measure(0, 0);
356
                    List<Uri> uriList = Matisse.obtainResult(data);
357
                    Uri uri = uriList.get(0);
358
                    Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
359
                    File file = FileUtils.from(EditQuestionTwoActivity.this, uri);
361
                    List<LocalMedia> selectionData= PictureSelector.obtainMultipleResult(data);
362
                    if (selectionData!=null && selectionData.size()>0) {
363
                        LocalMedia media = selectionData.get(0);
364
                        /*List<Uri> uriList = Matisse.obtainResult(data);
365
                        Uri uri = uriList.get(0);
366
                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
367
                        File file = FileUtils.from(EditQuestionTwoActivity.this, uri);
368
369
                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
370
                        bitmap = imageZoom(bitmap);
371
                        insertBitmap = bitmap;*/
372
                        String path="";
373
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
374
                            path= media.getAndroidQToPath();
375
                        }else{
376
                            path=media.getPath();
377
                        }
378
                        insertBitmap = imageZoom(BitmapFactory.decodeFile(path));
360
379
361
                    bitmap = FileUtils.rotateIfRequired(file, bitmap);
362
                    bitmap = imageZoom(bitmap);
363
                    insertBitmap = bitmap;
380
                        u_path = path;
364
381
365
                    u_path = SDCardUtil.saveToSdCard(bitmap);
382
                        subscriber.onNext(u_path);
383
                        subscriber.onComplete();
384
                    }else{
385
                        subscriber.onError(new Exception());
386
                    }
366
387
367
                    subscriber.onNext(u_path);
368
                    subscriber.onComplete();
369
                } catch (Exception e) {
388
                } catch (Exception e) {
370
                    e.printStackTrace();
389
                    e.printStackTrace();
371
                    subscriber.onError(e);
390
                    subscriber.onError(e);
531
     * 调用图库选择
550
     * 调用图库选择
532
     */
551
     */
533
    private void callGallery() {
552
    private void callGallery() {
534
        Matisse.from(EditQuestionTwoActivity.this)
535
                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
536
                .showSingleMediaType(true)
537
                .countable(true)
538
                .maxSelectable(1)
539
                .capture(true)
540
                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
541
                .imageEngine(new GlideEngine())
553
//        Matisse.from(EditQuestionTwoActivity.this)
554
//                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
555
//                .showSingleMediaType(true)
556
//                .countable(true)
557
//                .maxSelectable(1)
558
//                .capture(true)
559
//                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
560
//                .imageEngine(new GlideEngine())
561
//                .forResult(REQUEST_CODE_CHOOSE);
562
563
        PictureSelector.create(this)
564
                .openGallery(PictureMimeType.ofImage())
565
                .maxSelectNum(1)
566
                .selectionMode(PictureConfig.SINGLE)
567
                .isSingleDirectReturn(true)
568
                .isCompress(true)//是否压缩
569
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
570
                .isGif(true)//是否显示gif
571
                .isAndroidQTransform(true)
572
                .imageEngine(GlideEngine.createGlideEngine())
573
                .isWeChatStyle(false)// 是否开启微信图片选择风格
574
                .isUseCustomCamera(false)// 是否使用自定义相机
575
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
576
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
577
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
578
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
579
                .imageSpanCount(4)// 每行显示个数
580
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
581
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
542
                .forResult(REQUEST_CODE_CHOOSE);
582
                .forResult(REQUEST_CODE_CHOOSE);
583
543
    }
584
    }
544
585
545
    @Override
586
    @Override

+ 53 - 168
app/src/main/java/com/electric/chargingpile/activity/FeedbackActivity.java

16
import android.net.Uri;
16
import android.net.Uri;
17
import android.os.Build;
17
import android.os.Build;
18
import android.os.Bundle;
18
import android.os.Bundle;
19
import android.os.Environment;
19

20

20
import android.os.Handler;
21
import android.os.Handler;
21
import android.os.Message;
22
import android.os.Message;
22
import android.provider.MediaStore;
23

23
import android.text.Editable;
24
import android.text.Editable;
24
import android.text.TextWatcher;
25
import android.text.TextWatcher;
25
import android.util.Base64;
26
import android.util.Base64;
45
import com.electric.chargingpile.R;
46
import com.electric.chargingpile.R;
46
import com.electric.chargingpile.application.MainApplication;
47
import com.electric.chargingpile.application.MainApplication;
47
import com.electric.chargingpile.data.UploadPic;
48
import com.electric.chargingpile.data.UploadPic;
49
import com.electric.chargingpile.engine.GlideEngine;
48
import com.electric.chargingpile.util.BarColorUtil;
50
import com.electric.chargingpile.util.BarColorUtil;
49
import com.electric.chargingpile.util.Bimp;
51
import com.electric.chargingpile.util.Bimp;
50
import com.electric.chargingpile.util.FileUtils;
52
import com.electric.chargingpile.util.FileUtils;
56
import com.electric.chargingpile.util.ToastUtil;
58
import com.electric.chargingpile.util.ToastUtil;
57
import com.electric.chargingpile.util.UploadUtil;
59
import com.electric.chargingpile.util.UploadUtil;
58
import com.electric.chargingpile.util.Util;
60
import com.electric.chargingpile.util.Util;
61
import com.luck.picture.lib.PictureSelector;
62
import com.luck.picture.lib.animators.AnimationType;
63
import com.luck.picture.lib.config.PictureConfig;
64
import com.luck.picture.lib.config.PictureMimeType;
65
import com.luck.picture.lib.entity.LocalMedia;
59
import com.umeng.analytics.MobclickAgent;
66
import com.umeng.analytics.MobclickAgent;
60
import com.zhihu.matisse.Matisse;
61
import com.zhihu.matisse.MimeType;
62
import com.zhihu.matisse.engine.impl.GlideEngine;
63
import com.zhihu.matisse.internal.entity.CaptureStrategy;
67

64
import com.zhy.http.okhttp.OkHttpUtils;
68
import com.zhy.http.okhttp.OkHttpUtils;
65
import com.zhy.http.okhttp.callback.StringCallback;
69
import com.zhy.http.okhttp.callback.StringCallback;
66

70

89
    private static final int PIC_NUM = 3;
93
    private static final int PIC_NUM = 3;
90
    private ImageView ivBack;
94
    private ImageView ivBack;
91
    private TextView tv_right;
95
    private TextView tv_right;
92
    private static String PHOTO_FILE_NAME = "";
93
    private static final String PHOTO_FILE_PATH = getPath(Environment.getExternalStorageDirectory() + "/" + "cdz");
96

97

94
    private GridView noScrollgridview;
98
    private GridView noScrollgridview;
95
    private PopupWindow pop = null;
96
    private LinearLayout ll_popup;
97
    private File tempFile;
99

100

98
    Bitmap bm = null;
101
    Bitmap bm = null;
99
    private static final int PHOTO_REQUEST_CAMERA = 1;
102
    private static final int PHOTO_REQUEST_CAMERA = 1;
100
    private static final int PHOTO_REQUEST_GALLERY = 2;
103
    private static final int PHOTO_REQUEST_GALLERY = 2;
134
        }
137
        }
135
    };
138
    };
136

139

137

140
    private List<LocalMedia> mSelectionData =new ArrayList<LocalMedia>();
138
    @Override
141
    @Override
139
    protected void onCreate(Bundle savedInstanceState) {
142
    protected void onCreate(Bundle savedInstanceState) {
140
        super.onCreate(savedInstanceState);
143
        super.onCreate(savedInstanceState);
143
        initView();
146
        initView();
144
        Res.init(this);
147
        Res.init(this);
145
        PublicWay.activityList.add(this);
148
        PublicWay.activityList.add(this);
146
        long appTime1 = System.currentTimeMillis() / 1000;
147
        PHOTO_FILE_NAME = "android" + appTime1 + ".jpg";
148
        tempFile = getFile(PHOTO_FILE_PATH + "/" + PHOTO_FILE_NAME);
149
        dialog = new LoadingDialog(this);
149
        dialog = new LoadingDialog(this);
150
        dialog.setCanceledOnTouchOutside(false);
150
        dialog.setCanceledOnTouchOutside(false);
151
        Init();
151
        Init();
271
        return f;
271
        return f;
272
    }
272
    }
273

273

274
    private static String getPath(String path) {
275
        File f = new File(path);
276
        if (!f.exists()) {
277
            f.mkdirs();
278
        }
279
        return f.getAbsolutePath();
280
    }
281

282
    private boolean hasSdcard() {
283
        if (Environment.getExternalStorageState().equals(
284
                Environment.MEDIA_MOUNTED)) {
285
            return true;
286
        } else {
287
            return false;
288
        }
289
    }
290

291
    public void Init() {
274
    public void Init() {
292
        pop = new PopupWindow(FeedbackActivity.this);
293
        View view = getLayoutInflater().inflate(R.layout.item_popupwindows, null);
294
        ll_popup = (LinearLayout) view.findViewById(R.id.ll_popup);
295

296
        pop.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
297
        pop.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
298
        pop.setBackgroundDrawable(new BitmapDrawable());
299
        pop.setFocusable(true);
300
        pop.setOutsideTouchable(true);
301
        pop.setContentView(view);
302

303

304
        final RelativeLayout parent = (RelativeLayout) view.findViewById(R.id.parent);
305
        Button bt1 = (Button) view
306
                .findViewById(R.id.item_popupwindows_camera);
307
        Button bt2 = (Button) view
308
                .findViewById(R.id.item_popupwindows_Photo);
309
        Button bt3 = (Button) view
310
                .findViewById(R.id.item_popupwindows_cancel);
311
        parent.setOnClickListener(new View.OnClickListener() {
312

313
            @Override
314
            public void onClick(View v) {
315
                // TODO Auto-generated method stub
316
                pop.dismiss();
317
                ll_popup.clearAnimation();
318
            }
319
        });
320
        bt1.setOnClickListener(new View.OnClickListener() {
321
            public void onClick(View v) {
322
                pop.dismiss();
323
                ll_popup.clearAnimation();
324
                if (MainScanActivity.isCameraUseable()) {
325
                    photo();
326
                } else {
327
                    ToastUtil.showToast(getApplicationContext(), "您当前关闭了调用摄像头权限", Toast.LENGTH_SHORT);
328
//					new AlertDialogTwo(FeedbackActivity.this).builder()
329
//							.setMsg("您当前关闭了调用摄像头权限,是否去打开?")
330
//							.setPositiveButton("去打开", new View.OnClickListener() {
331
//								@Override
332
//								public void onClick(View v) {
333
//									Intent intent = new Intent(Settings.ACTION_SETTINGS);
334
//									startActivity(intent);
335
//								}
336
//							}).setNegativeButton("忽略", new View.OnClickListener() {
337
//						@Override
338
//						public void onClick(View v) {
339
//
340
//						}
341
//					}).show();
342
                }
343
            }
344
        });
345
        bt2.setOnClickListener(new View.OnClickListener() {
346
            public void onClick(View v) {
347
                Intent intent = new Intent(FeedbackActivity.this,
348
                        AlbumActivityFeedback.class);
349
                startActivity(intent);
350
                overridePendingTransition(R.anim.activity_translate_in, R.anim.activity_translate_out);
351
//                startActivityForResult(intent, 1);
352
                pop.dismiss();
353
                ll_popup.clearAnimation();
354
            }
355
        });
356
        bt3.setOnClickListener(new View.OnClickListener() {
357
            public void onClick(View v) {
358
                pop.dismiss();
359
                ll_popup.clearAnimation();
360
            }
361
        });
362

363
        noScrollgridview = (GridView) findViewById(R.id.noScrollgridview);
275
        noScrollgridview = (GridView) findViewById(R.id.noScrollgridview);
364
        noScrollgridview.setSelector(new ColorDrawable(Color.TRANSPARENT));
276
        noScrollgridview.setSelector(new ColorDrawable(Color.TRANSPARENT));
365
        adapter = new GridAdapter(this);
277
        adapter = new GridAdapter(this);
387
     * 调用图库选择
299
     * 调用图库选择
388
     */
300
     */
389
    private void callGallery() {
301
    private void callGallery() {
302
/*
390
        Matisse.from(FeedbackActivity.this)
303
        Matisse.from(FeedbackActivity.this)
391
                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
304
                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
392
                .showSingleMediaType(true)
305
                .showSingleMediaType(true)
396
                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
309
                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
397
                .imageEngine(new GlideEngine())
310
                .imageEngine(new GlideEngine())
398
                .forResult(REQUEST_CODE_CHOOSE);
311
                .forResult(REQUEST_CODE_CHOOSE);
312
*/
313

314
        PictureSelector.create(this)
315
                .openGallery(PictureMimeType.ofImage())
316
                .maxSelectNum(PIC_NUM)
317
                .selectionMode(PictureConfig.MULTIPLE)
318
                .selectionData(mSelectionData)//是否传入已选图片
319
                .isCompress(true)//是否压缩
320
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
321
                .isGif(true)//是否显示gif
322
                .isAndroidQTransform(true)
323
                .imageEngine(GlideEngine.createGlideEngine())
324
                .isWeChatStyle(false)// 是否开启微信图片选择风格
325
                .isUseCustomCamera(false)// 是否使用自定义相机
326
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
327
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
328
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
329
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
330
                .imageSpanCount(4)// 每行显示个数
331
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
332
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
333
                .forResult(REQUEST_CODE_CHOOSE);
399

334

400

335

401
    }
336
    }
427
            public void subscribe(ObservableEmitter<String> subscriber) throws Exception {
362
            public void subscribe(ObservableEmitter<String> subscriber) throws Exception {
428

363

429
                try {
364
                try {
430
                    List<Uri> uriList = Matisse.obtainResult(data);
431
                    for (Uri uri: uriList) {
432
                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
433
                        File file = FileUtils.from(FeedbackActivity.this, uri);
434

435
                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
436
                        bitmap = imageZoom(bitmap);
365
//                    List<Uri> uriList = Matisse.obtainResult(data);
366
                    mSelectionData = PictureSelector.obtainMultipleResult(data);
367
                    for (LocalMedia media: mSelectionData) {
368
//                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
369
//                        File file = FileUtils.from(FeedbackActivity.this, uri);
370
//
371
//                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
372
//                        bitmap = imageZoom(bitmap);
373
                        String path="";
374
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
375
                            path= media.getAndroidQToPath();
376
                        }else{
377
                            path=media.getPath();
378
                        }
437
                        ImageItem takePhoto = new ImageItem();
379
                        ImageItem takePhoto = new ImageItem();
438
                        takePhoto.setBitmap(bitmap);
380
                        takePhoto.setBitmap(imageZoom(BitmapFactory.decodeFile(path)));
439
                        Bimp.tempSelectBitmap.add(takePhoto);
381
                        Bimp.tempSelectBitmap.add(takePhoto);
440
                        subscriber.onNext("");
382
                        subscriber.onNext("");
441
                    }
383
                    }
582
        }
524
        }
583
    }
525
    }
584

526

585
    public void photo() {
586
        if (hasSdcard()) {
587
            int currentapiVersion = Build.VERSION.SDK_INT;
588
            Log.e("currentapiVersion", "currentapiVersion====>" + currentapiVersion);
589
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//���������
590
            intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
591
            startActivityForResult(intent, PHOTO_REQUEST_CAMERA);
592
        }
593
    }
594

595
    public static Uri getImageContentUri(Context context, File imageFile) {
596
        String filePath = imageFile.getAbsolutePath();
597
        Cursor cursor = context.getContentResolver().query(
598
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
599
                new String[]{MediaStore.Images.Media._ID},
600
                MediaStore.Images.Media.DATA + "=? ",
601
                new String[]{filePath}, null);
602

603
        if (cursor != null && cursor.moveToFirst()) {
604
            int id = cursor.getInt(cursor
605
                    .getColumnIndex(MediaStore.MediaColumns._ID));
606
            Uri baseUri = Uri.parse("content://media/external/images/media");
607
            return Uri.withAppendedPath(baseUri, "" + id);
608
        } else {
609
            if (imageFile.exists()) {
610
                ContentValues values = new ContentValues();
611
                values.put(MediaStore.Images.Media.DATA, filePath);
612
                return context.getContentResolver().insert(
613
                        MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
614
            } else {
615
                return null;
616
            }
617
        }
618
    }
619

620
    private void crop(Uri uri, Uri cutImgUri) {
621
        Intent intent = new Intent("com.android.camera.action.CROP");
622
        intent.setDataAndType(getImageContentUri(this, tempFile), "image/*");
623

624
        intent.putExtra("crop", "true");
625
        intent.putExtra("outputFormat", "JPEG");
626
        intent.putExtra("noFaceDetection", true);
627
        intent.putExtra("return-data", false);
628
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
629
        startActivityForResult(intent, PHOTO_REQUEST_CUT);
630
    }
631

632
    public Bitmap decodeUriAsBitmap(Uri uri) {
633
        Bitmap bitmap = null;
634
        try {
635
            bitmap = BitmapFactory.decodeStream(this.getContentResolver().openInputStream(uri));
636
        } catch (FileNotFoundException e) {
637
            e.printStackTrace();
638
            return null;
639
        }
640
        return bitmap;
641
    }
642

527

643

528

644
    protected void onRestart() {
529
    protected void onRestart() {

+ 5 - 10
app/src/main/java/com/electric/chargingpile/activity/FindActivity.java

12
import android.content.SharedPreferences;
12
import android.content.SharedPreferences;
13
import android.content.res.AssetManager;
13
import android.content.res.AssetManager;
14
import android.graphics.Bitmap;
14
import android.graphics.Bitmap;
15
import android.graphics.BitmapFactory;
16
import android.net.ConnectivityManager;
15
import android.net.ConnectivityManager;
17
import android.net.NetworkInfo;
16
import android.net.NetworkInfo;
18
import android.net.Uri;
17
import android.net.Uri;
19
import android.os.Build;
18
import android.os.Build;
20
import android.os.Bundle;
19
import android.os.Bundle;
21
import android.os.Environment;
22
import android.os.Handler;
20
import android.os.Handler;
23
import android.os.Message;
21
import android.os.Message;
24
import android.provider.Settings;
22
import android.provider.Settings;
25
import androidx.annotation.NonNull;
26
import androidx.appcompat.app.AppCompatActivity;
27
import androidx.recyclerview.widget.GridLayoutManager;
28
import androidx.recyclerview.widget.RecyclerView;
29
import android.util.Log;
23
import android.util.Log;
30
import android.view.KeyEvent;
24
import android.view.KeyEvent;
31
import android.view.LayoutInflater;
25
import android.view.LayoutInflater;
37
import android.widget.TextView;
31
import android.widget.TextView;
38
import android.widget.Toast;
32
import android.widget.Toast;
39
33
34
import androidx.annotation.NonNull;
35
import androidx.appcompat.app.AppCompatActivity;
36
import androidx.recyclerview.widget.GridLayoutManager;
37
import androidx.recyclerview.widget.RecyclerView;
38
40
import com.blankj.utilcode.util.EmptyUtils;
39
import com.blankj.utilcode.util.EmptyUtils;
41
import com.blankj.utilcode.util.LogUtils;
40
import com.blankj.utilcode.util.LogUtils;
42
import com.electric.chargingpile.R;
41
import com.electric.chargingpile.R;
49
import com.electric.chargingpile.manager.ProfileManager;
48
import com.electric.chargingpile.manager.ProfileManager;
50
import com.electric.chargingpile.util.BarColorUtil;
49
import com.electric.chargingpile.util.BarColorUtil;
51
import com.electric.chargingpile.util.DES3;
50
import com.electric.chargingpile.util.DES3;
52
import com.electric.chargingpile.util.ImageTools;
53
import com.electric.chargingpile.util.JsonUtils;
51
import com.electric.chargingpile.util.JsonUtils;
54
import com.electric.chargingpile.util.OkHttpUtil;
52
import com.electric.chargingpile.util.OkHttpUtil;
55
import com.electric.chargingpile.util.ToastUtil;
53
import com.electric.chargingpile.util.ToastUtil;
68
import org.zackratos.ultimatebar.UltimateBar;
66
import org.zackratos.ultimatebar.UltimateBar;
69
67
70
import java.io.BufferedReader;
68
import java.io.BufferedReader;
71
import java.io.File;
72
import java.io.IOException;
69
import java.io.IOException;
73
import java.io.InputStreamReader;
70
import java.io.InputStreamReader;
74
import java.net.URLEncoder;
71
import java.net.URLEncoder;
87
import pub.devrel.easypermissions.AfterPermissionGranted;
84
import pub.devrel.easypermissions.AfterPermissionGranted;
88
import pub.devrel.easypermissions.AppSettingsDialog;
85
import pub.devrel.easypermissions.AppSettingsDialog;
89
import pub.devrel.easypermissions.EasyPermissions;
86
import pub.devrel.easypermissions.EasyPermissions;
90
import top.zibin.luban.Luban;
91
import top.zibin.luban.OnCompressListener;
92
87
93
public class FindActivity extends AppCompatActivity implements View.OnClickListener, EasyPermissions.PermissionCallbacks {
88
public class FindActivity extends AppCompatActivity implements View.OnClickListener, EasyPermissions.PermissionCallbacks {
94
    private static final String TAG = "FindActivity";
89
    private static final String TAG = "FindActivity";

+ 21 - 18
app/src/main/java/com/electric/chargingpile/activity/H5Activity.java

16
import android.net.http.SslError;
16
import android.net.http.SslError;
17
import android.os.Build;
17
import android.os.Build;
18
import android.os.Bundle;
18
import android.os.Bundle;
19
import android.os.Environment;
20
import android.provider.MediaStore;
19
import android.provider.MediaStore;
20
21
import androidx.annotation.NonNull;
21
import androidx.annotation.NonNull;
22
import androidx.core.content.FileProvider;
22
import androidx.core.content.FileProvider;
23
23
import android.util.Log;
24
import android.util.Log;
24
import android.view.KeyEvent;
25
import android.view.KeyEvent;
25
import android.view.View;
26
import android.view.View;
46
import com.electric.chargingpile.util.DES3;
47
import com.electric.chargingpile.util.DES3;
47
import com.electric.chargingpile.util.ImageUitl;
48
import com.electric.chargingpile.util.ImageUitl;
48
import com.electric.chargingpile.util.JsonUtils;
49
import com.electric.chargingpile.util.JsonUtils;
50
import com.electric.chargingpile.util.PhotoUtils;
49
import com.electric.chargingpile.util.ToastUtil;
51
import com.electric.chargingpile.util.ToastUtil;
50
import com.google.gson.Gson;
52
import com.google.gson.Gson;
51
import com.umeng.analytics.MobclickAgent;
53
import com.umeng.analytics.MobclickAgent;
70
import pub.devrel.easypermissions.AfterPermissionGranted;
72
import pub.devrel.easypermissions.AfterPermissionGranted;
71
import pub.devrel.easypermissions.EasyPermissions;
73
import pub.devrel.easypermissions.EasyPermissions;
72
74
73
public class H5Activity extends Activity implements View.OnClickListener, PlatformActionListener,EasyPermissions.PermissionCallbacks {
75
public class H5Activity extends Activity implements View.OnClickListener, PlatformActionListener, EasyPermissions.PermissionCallbacks {
74
    private WebView webView;
76
    private WebView webView;
75
    private ImageView iv_back, iv_close;
77
    private ImageView iv_back, iv_close;
76
    private TextView txtTitle, tv_next;
78
    private TextView txtTitle, tv_next;
1151
    public void onCancel(Platform platform, int i) {
1153
    public void onCancel(Platform platform, int i) {
1152
        Toast.makeText(getApplicationContext(), "分享已取消", Toast.LENGTH_SHORT).show();
1154
        Toast.makeText(getApplicationContext(), "分享已取消", Toast.LENGTH_SHORT).show();
1153
    }
1155
    }
1156
1154
    @Override
1157
    @Override
1155
    public void onRequestPermissionsResult(int requestCode,
1158
    public void onRequestPermissionsResult(int requestCode,
1156
                                           @NonNull String[] permissions,
1159
                                           @NonNull String[] permissions,
1277
                .canceledOnTouchOutside(false).itemsCallback(new MaterialDialog.ListCallback() {
1280
                .canceledOnTouchOutside(false).itemsCallback(new MaterialDialog.ListCallback() {
1278
            @Override
1281
            @Override
1279
            public void onSelection(MaterialDialog dialog, View itemView, int position, CharSequence text) {
1282
            public void onSelection(MaterialDialog dialog, View itemView, int position, CharSequence text) {
1280
                if (position == 0){
1283
                if (position == 0) {
1281
                    takeCamera();
1284
                    takeCamera();
1282
                } else if (position == 1) {
1285
                } else if (position == 1) {
1283
                    takePhoto();
1286
                    takePhoto();
1297
    // 拍照
1300
    // 拍照
1298
    private void takeCamera() {
1301
    private void takeCamera() {
1299
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
1302
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
1300
        if (ImageUitl.hasSdcard()) {
1301
            String fileName = "android" + System.currentTimeMillis() / 1000 + ".jpg";
1302
            cameraFilePath = ImageUitl.getPath(Environment.getExternalStorageDirectory() + "/" + "cdz") + "/" + fileName;
1303
            File imageFile = ImageUitl.getFile(cameraFilePath);
1304
            Uri uri = parseUri(imageFile);
1305
            intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
1306
            try{
1307
                startActivityForResult(intent, FILE_CAMERA_RESULT_CODE);
1308
            } catch (Exception e) {
1309
                e.printStackTrace();
1310
            }
1311
1303
1304
        String fileName = "android" + System.currentTimeMillis() / 1000 + ".jpg";
1305
        cameraFilePath = ImageUitl.getPath(PhotoUtils.CACHE_DIR) + "/" + fileName;
1306
        File imageFile = ImageUitl.getFile(cameraFilePath);
1307
        Uri uri = parseUri(imageFile);
1308
        intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
1309
        try {
1310
            startActivityForResult(intent, FILE_CAMERA_RESULT_CODE);
1311
        } catch (Exception e) {
1312
            e.printStackTrace();
1312
        }
1313
        }
1314
1313
    }
1315
    }
1314
1316
1315
    private Uri parseUri(File cameraFile) {
1317
    private Uri parseUri(File cameraFile) {
1327
    @Override
1329
    @Override
1328
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
1330
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
1329
        super.onActivityResult(requestCode, resultCode, data);
1331
        super.onActivityResult(requestCode, resultCode, data);
1330
        if (null == mOpenFileWebChromeClient.mFilePathCallback && null == mOpenFileWebChromeClient.mFilePathCallbacks) return;
1332
        if (null == mOpenFileWebChromeClient.mFilePathCallback && null == mOpenFileWebChromeClient.mFilePathCallbacks)
1333
            return;
1331
        if (resultCode != RESULT_OK) {
1334
        if (resultCode != RESULT_OK) {
1332
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
1335
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
1333
                mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(null);
1336
                mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(null);
1347
                result = data.getData();
1350
                result = data.getData();
1348
            }
1351
            }
1349
            if (result == null && ImageUitl.hasFile(cameraFilePath)) {
1352
            if (result == null && ImageUitl.hasFile(cameraFilePath)) {
1350
                result = Uri.fromFile(new File(cameraFilePath));
1353
                result = PhotoUtils.parseUri(new File(cameraFilePath));
1351
            }
1354
            }
1352
1355
1353
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
1356
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
1378
            ClipData clipData = intent.getClipData();
1381
            ClipData clipData = intent.getClipData();
1379
            if (clipData != null) {
1382
            if (clipData != null) {
1380
                results = new Uri[clipData.getItemCount()];
1383
                results = new Uri[clipData.getItemCount()];
1381
                for (int i=0;i<clipData.getItemCount();i++) {
1384
                for (int i = 0; i < clipData.getItemCount(); i++) {
1382
                    ClipData.Item item = clipData.getItemAt(i);
1385
                    ClipData.Item item = clipData.getItemAt(i);
1383
                    results[i] = item.getUri();
1386
                    results[i] = item.getUri();
1384
                }
1387
                }
1385
            }
1388
            }
1386
            if (dataString != null) {
1389
            if (dataString != null) {
1387
                results = new Uri[] {Uri.parse(dataString)};
1390
                results = new Uri[]{Uri.parse(dataString)};
1388
            }
1391
            }
1389
            mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(results);
1392
            mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(results);
1390
            mOpenFileWebChromeClient.mFilePathCallbacks = null;
1393
            mOpenFileWebChromeClient.mFilePathCallbacks = null;

+ 21 - 19
app/src/main/java/com/electric/chargingpile/activity/HomeWebActivity.java

13
import android.net.http.SslError;
13
import android.net.http.SslError;
14
import android.os.Build;
14
import android.os.Build;
15
import android.os.Bundle;
15
import android.os.Bundle;
16
import android.os.Environment;
16
17
import android.provider.MediaStore;
17
import android.provider.MediaStore;
18
18
import androidx.annotation.NonNull;
19
import androidx.annotation.NonNull;
19
import androidx.core.content.FileProvider;
20
import androidx.core.content.FileProvider;
21
20
import android.util.Log;
22
import android.util.Log;
21
import android.view.KeyEvent;
23
import android.view.KeyEvent;
22
import android.view.View;
24
import android.view.View;
40
import com.electric.chargingpile.util.DES3;
42
import com.electric.chargingpile.util.DES3;
41
import com.electric.chargingpile.util.ImageUitl;
43
import com.electric.chargingpile.util.ImageUitl;
42
import com.electric.chargingpile.util.JsonUtils;
44
import com.electric.chargingpile.util.JsonUtils;
45
import com.electric.chargingpile.util.PhotoUtils;
43
import com.umeng.analytics.MobclickAgent;
46
import com.umeng.analytics.MobclickAgent;
44
47
45
import java.io.File;
48
import java.io.File;
56
import pub.devrel.easypermissions.AfterPermissionGranted;
59
import pub.devrel.easypermissions.AfterPermissionGranted;
57
import pub.devrel.easypermissions.EasyPermissions;
60
import pub.devrel.easypermissions.EasyPermissions;
58
61
59
public class HomeWebActivity extends Activity implements View.OnClickListener, PlatformActionListener,EasyPermissions.PermissionCallbacks {
62
public class HomeWebActivity extends Activity implements View.OnClickListener, PlatformActionListener, EasyPermissions.PermissionCallbacks {
60
    private WebView webView;
63
    private WebView webView;
61
    private ImageView iv_back, iv_close;
64
    private ImageView iv_back, iv_close;
62
    private TextView txtTitle, tv_next;
65
    private TextView txtTitle, tv_next;
707
        super.onPause();
710
        super.onPause();
708
        MobclickAgent.onPause(this);
711
        MobclickAgent.onPause(this);
709
    }
712
    }
713
710
    @Override
714
    @Override
711
    public void onRequestPermissionsResult(int requestCode,
715
    public void onRequestPermissionsResult(int requestCode,
712
                                           @NonNull String[] permissions,
716
                                           @NonNull String[] permissions,
828
                .canceledOnTouchOutside(false).itemsCallback(new MaterialDialog.ListCallback() {
832
                .canceledOnTouchOutside(false).itemsCallback(new MaterialDialog.ListCallback() {
829
            @Override
833
            @Override
830
            public void onSelection(MaterialDialog dialog, View itemView, int position, CharSequence text) {
834
            public void onSelection(MaterialDialog dialog, View itemView, int position, CharSequence text) {
831
                if (position == 0){
835
                if (position == 0) {
832
                    takeCamera();
836
                    takeCamera();
833
                } else if (position == 1) {
837
                } else if (position == 1) {
834
                    takePhoto();
838
                    takePhoto();
848
    // 拍照
852
    // 拍照
849
    private void takeCamera() {
853
    private void takeCamera() {
850
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
854
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
851
        if (ImageUitl.hasSdcard()) {
852
            String fileName = "android" + System.currentTimeMillis() / 1000 + ".jpg";
853
            cameraFilePath = ImageUitl.getPath(Environment.getExternalStorageDirectory() + "/" + "cdz") + "/" + fileName;
854
            File imageFile = ImageUitl.getFile(cameraFilePath);
855
            Uri uri = parseUri(imageFile);
856
            intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
857
            try{
858
                startActivityForResult(intent, FILE_CAMERA_RESULT_CODE);
859
            } catch (Exception e) {
860
                e.printStackTrace();
861
            }
862
855
        String fileName = "android" + System.currentTimeMillis() / 1000 + ".jpg";
856
        cameraFilePath = ImageUitl.getPath(PhotoUtils.CACHE_DIR) + "/" + fileName;
857
        File imageFile = ImageUitl.getFile(cameraFilePath);
858
        Uri uri = parseUri(imageFile);
859
        intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
860
        try {
861
            startActivityForResult(intent, FILE_CAMERA_RESULT_CODE);
862
        } catch (Exception e) {
863
            e.printStackTrace();
863
        }
864
        }
864
    }
865
    }
865
866
878
    @Override
879
    @Override
879
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
880
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
880
        super.onActivityResult(requestCode, resultCode, data);
881
        super.onActivityResult(requestCode, resultCode, data);
881
        if (null == mOpenFileWebChromeClient.mFilePathCallback && null == mOpenFileWebChromeClient.mFilePathCallbacks) return;
882
        if (null == mOpenFileWebChromeClient.mFilePathCallback && null == mOpenFileWebChromeClient.mFilePathCallbacks)
883
            return;
882
        if (resultCode != RESULT_OK) {
884
        if (resultCode != RESULT_OK) {
883
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
885
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
884
                mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(null);
886
                mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(null);
898
                result = data.getData();
900
                result = data.getData();
899
            }
901
            }
900
            if (result == null && ImageUitl.hasFile(cameraFilePath)) {
902
            if (result == null && ImageUitl.hasFile(cameraFilePath)) {
901
                result = Uri.fromFile(new File(cameraFilePath));
903
                result = PhotoUtils.parseUri(new File(cameraFilePath));
902
            }
904
            }
903
905
904
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
906
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
929
            ClipData clipData = intent.getClipData();
931
            ClipData clipData = intent.getClipData();
930
            if (clipData != null) {
932
            if (clipData != null) {
931
                results = new Uri[clipData.getItemCount()];
933
                results = new Uri[clipData.getItemCount()];
932
                for (int i=0;i<clipData.getItemCount();i++) {
934
                for (int i = 0; i < clipData.getItemCount(); i++) {
933
                    ClipData.Item item = clipData.getItemAt(i);
935
                    ClipData.Item item = clipData.getItemAt(i);
934
                    results[i] = item.getUri();
936
                    results[i] = item.getUri();
935
                }
937
                }
936
            }
938
            }
937
            if (dataString != null) {
939
            if (dataString != null) {
938
                results = new Uri[] {Uri.parse(dataString)};
940
                results = new Uri[]{Uri.parse(dataString)};
939
            }
941
            }
940
            mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(results);
942
            mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(results);
941
            mOpenFileWebChromeClient.mFilePathCallbacks = null;
943
            mOpenFileWebChromeClient.mFilePathCallbacks = null;

+ 9 - 6
app/src/main/java/com/electric/chargingpile/activity/HotInfoActivity.java

8
import android.graphics.drawable.BitmapDrawable;
8
import android.graphics.drawable.BitmapDrawable;
9
import android.net.Uri;
9
import android.net.Uri;
10
import android.os.Bundle;
10
import android.os.Bundle;
11
import android.os.Environment;
12
import android.os.Handler;
11
import android.os.Handler;
13
import android.os.Message;
12
import android.os.Message;
14
import android.provider.MediaStore;
13
import android.provider.MediaStore;
41
import com.electric.chargingpile.util.DES3;
40
import com.electric.chargingpile.util.DES3;
42
import com.electric.chargingpile.util.NetUtil;
41
import com.electric.chargingpile.util.NetUtil;
43
import com.electric.chargingpile.util.OkHttpUtil;
42
import com.electric.chargingpile.util.OkHttpUtil;
43
import com.electric.chargingpile.util.PhotoUtils;
44
import com.electric.chargingpile.util.UploadUtil;
44
import com.electric.chargingpile.util.UploadUtil;
45
import com.electric.chargingpile.view.CustomProgressDialog;
45
import com.electric.chargingpile.view.CustomProgressDialog;
46
import com.squareup.okhttp.Request;
46
import com.squareup.okhttp.Request;
61
61
62
import cn.sharesdk.framework.Platform;
62
import cn.sharesdk.framework.Platform;
63
63
64
64
/**
65
 * 已废弃,
66
 * */
67
@Deprecated
65
public class HotInfoActivity extends Activity implements View.OnClickListener {
68
public class HotInfoActivity extends Activity implements View.OnClickListener {
66
    private EditText address, remark, name, phone, car;
69
    private EditText address, remark, name, phone, car;
67
    private String hotAddress, poi_jing, poi_wei, city, district;
70
    private String hotAddress, poi_jing, poi_wei, city, district;
430
                    @Override
433
                    @Override
431
                    public void onClick(View view) {
434
                    public void onClick(View view) {
432
                        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
435
                        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
433
                        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(
434
                                Environment.getExternalStorageDirectory(), "androidapp.jpg")));
436
                        intent.putExtra(MediaStore.EXTRA_OUTPUT, PhotoUtils.parseUri(new File(
437
                               PhotoUtils.CACHE_DIR, "androidapp.jpg")));
435
                        ((Activity) mContext).startActivityForResult(intent, 2);
438
                        ((Activity) mContext).startActivityForResult(intent, 2);
436
                        popupWindow.dismiss();
439
                        popupWindow.dismiss();
437
                    }
440
                    }
597
                break;
600
                break;
598
            // 如果是调用相机拍照时
601
            // 如果是调用相机拍照时
599
            case 2:
602
            case 2:
600
                File temp = new File(Environment.getExternalStorageDirectory()
603
                File temp = new File(PhotoUtils.CACHE_DIR
601
                        + "/androidapp.jpg");
604
                        + "/androidapp.jpg");
602
                startPhotoZoom(Uri.fromFile(temp));
605
                startPhotoZoom(PhotoUtils.parseUri(temp));
603
                break;
606
                break;
604
            // 取得裁剪后的图片
607
            // 取得裁剪后的图片
605
            case 3:
608
            case 3:

+ 155 - 72
app/src/main/java/com/electric/chargingpile/activity/MainMapActivity.java

1
package com.electric.chargingpile.activity;
1
package com.electric.chargingpile.activity;
2
2
3
import android.Manifest;
3
import android.Manifest;
4
import android.annotation.SuppressLint;
4
import android.app.Activity;
5
import android.app.Activity;
5
import android.content.BroadcastReceiver;
6
import android.content.BroadcastReceiver;
7
import android.content.ContentResolver;
6
import android.content.ContentValues;
8
import android.content.ContentValues;
7
import android.content.Context;
9
import android.content.Context;
8
import android.content.DialogInterface;
10
import android.content.DialogInterface;
29
31
30
import androidx.annotation.NonNull;
32
import androidx.annotation.NonNull;
31
import androidx.annotation.Nullable;
33
import androidx.annotation.Nullable;
34
import androidx.annotation.RequiresApi;
32
import androidx.constraintlayout.widget.ConstraintLayout;
35
import androidx.constraintlayout.widget.ConstraintLayout;
33
import androidx.core.content.FileProvider;
36
import androidx.core.content.FileProvider;
34
37
38
import android.os.Process;
39
import android.provider.MediaStore;
40
import android.provider.Settings;
35
import android.text.TextUtils;
41
import android.text.TextUtils;
36
import android.util.Log;
42
import android.util.Log;
37
import android.view.Gravity;
43
import android.view.Gravity;
54
import android.widget.TextView;
60
import android.widget.TextView;
55
import android.widget.Toast;
61
import android.widget.Toast;
56
62
63
import com.afollestad.materialdialogs.MaterialDialog;
57
import com.alibaba.fastjson.JSON;
64
import com.alibaba.fastjson.JSON;
58
import com.amap.api.location.AMapLocation;
65
import com.amap.api.location.AMapLocation;
59
import com.amap.api.location.AMapLocationClient;
66
import com.amap.api.location.AMapLocationClient;
118
import com.electric.chargingpile.util.DES3;
125
import com.electric.chargingpile.util.DES3;
119
import com.electric.chargingpile.util.DES3S;
126
import com.electric.chargingpile.util.DES3S;
120
import com.electric.chargingpile.util.DensityUtil;
127
import com.electric.chargingpile.util.DensityUtil;
128
import com.electric.chargingpile.util.DownloadUtil;
121
import com.electric.chargingpile.util.EventBusUtil;
129
import com.electric.chargingpile.util.EventBusUtil;
122
import com.electric.chargingpile.util.JsonUtils;
130
import com.electric.chargingpile.util.JsonUtils;
123
import com.electric.chargingpile.util.LoadingDialog;
131
import com.electric.chargingpile.util.LoadingDialog;
124
import com.electric.chargingpile.util.Md5Util;
132
import com.electric.chargingpile.util.Md5Util;
125
import com.electric.chargingpile.util.OkHttpUtil;
133
import com.electric.chargingpile.util.OkHttpUtil;
134
import com.electric.chargingpile.util.PhotoUtils;
126
import com.electric.chargingpile.util.SharedPreferencesUtil;
135
import com.electric.chargingpile.util.SharedPreferencesUtil;
127
import com.electric.chargingpile.util.SystemTypeUtil;
136
import com.electric.chargingpile.util.SystemTypeUtil;
128
import com.electric.chargingpile.util.ToastUtil;
137
import com.electric.chargingpile.util.ToastUtil;
129
import com.electric.chargingpile.util.Util;
138
import com.electric.chargingpile.util.Util;
130
import com.electric.chargingpile.util.ZhanDBHelper;
139
import com.electric.chargingpile.util.ZhanDBHelper;
131
import com.electric.chargingpile.view.AlertDialog;
132
import com.electric.chargingpile.view.AlertDialogCommon;
140
import com.electric.chargingpile.view.AlertDialogCommon;
133
import com.electric.chargingpile.view.AlertDialogUpdate;
141
import com.electric.chargingpile.view.AlertDialogUpdate;
134
import com.electric.chargingpile.view.LocationPermissionsDialog;
142
import com.electric.chargingpile.view.LocationPermissionsDialog;
135
import com.electric.chargingpile.view.NotRegisterDialog;
143
import com.electric.chargingpile.view.NotRegisterDialog;
136
import com.electric.chargingpile.view.PreferentialDialog;
137
import com.electric.chargingpile.view.SlideAdView;
144
import com.electric.chargingpile.view.SlideAdView;
138
import com.electric.chargingpile.view.UpdateDialog;
145
import com.electric.chargingpile.view.UpdateDialog;
139
import com.google.gson.Gson;
146
import com.google.gson.Gson;
157
import java.io.BufferedReader;
164
import java.io.BufferedReader;
158
import java.io.BufferedWriter;
165
import java.io.BufferedWriter;
159
import java.io.File;
166
import java.io.File;
167
import java.io.FileInputStream;
168
import java.io.FileNotFoundException;
160
import java.io.FileOutputStream;
169
import java.io.FileOutputStream;
161
import java.io.IOException;
170
import java.io.IOException;
162
import java.io.InputStream;
171
import java.io.InputStream;
163
import java.io.InputStreamReader;
172
import java.io.InputStreamReader;
173
import java.io.OutputStream;
164
import java.io.OutputStreamWriter;
174
import java.io.OutputStreamWriter;
165
import java.io.PrintWriter;
175
import java.io.PrintWriter;
166
import java.net.Socket;
176
import java.net.Socket;
174
import java.util.List;
184
import java.util.List;
175
import java.util.Map;
185
import java.util.Map;
176
import java.util.Random;
186
import java.util.Random;
187
import java.util.concurrent.TimeUnit;
177
188
178
import cn.sharesdk.framework.Platform;
189
import cn.sharesdk.framework.Platform;
179
import cn.sharesdk.framework.PlatformActionListener;
190
import cn.sharesdk.framework.PlatformActionListener;
182
import cn.sharesdk.wechat.friends.Wechat;
193
import cn.sharesdk.wechat.friends.Wechat;
183
import cn.sharesdk.wechat.moments.WechatMoments;
194
import cn.sharesdk.wechat.moments.WechatMoments;
184
import okhttp3.Call;
195
import okhttp3.Call;
196
import okhttp3.OkHttpClient;
185
import pub.devrel.easypermissions.AfterPermissionGranted;
197
import pub.devrel.easypermissions.AfterPermissionGranted;
186
import pub.devrel.easypermissions.AppSettingsDialog;
187
import pub.devrel.easypermissions.EasyPermissions;
198
import pub.devrel.easypermissions.EasyPermissions;
188
199
189
public class MainMapActivity extends Activity implements LocationSource, AMapLocationListener,
200
public class MainMapActivity extends Activity implements LocationSource, AMapLocationListener,
381
    private static final int RC_CAMERA_PERM = 123;
392
    private static final int RC_CAMERA_PERM = 123;
382
    private static final int RC_Location_PERM = 125;
393
    private static final int RC_Location_PERM = 125;
383
    private static final int RC_Location_FIRST_PERM = 126;
394
    private static final int RC_Location_FIRST_PERM = 126;
395
    private static final int RC_READ_EXTERNAL_PERM = 127;
396
    private static final int INSTALL_PERMISS_CODE = 128;
384
397
385
    private String adfloatUrl = "";
398
    private String adfloatUrl = "";
386
    private int mLocationToast=0;
399
    private int mLocationToast=0;
401
                    String format = data.getString("format");
414
                    String format = data.getString("format");
402
                    String f = data.getString("progress");
415
                    String f = data.getString("progress");
403
                    String s = f.substring(0, f.indexOf("."));
416
                    String s = f.substring(0, f.indexOf("."));
404
                    LogUtils.e(s);
417
//                    LogUtils.e(s);
405
418
406
                    updateDialog.updateMsg("当前已下载:" + format);
419
                    updateDialog.updateMsg("当前已下载:" + format);
407
                    updateDialog.updateProgress(Integer.parseInt(s));
420
                    updateDialog.updateProgress(Integer.parseInt(s));
473
                                now_versionName = JsonUtils.getKeyResult(android, "versionName");
486
                                now_versionName = JsonUtils.getKeyResult(android, "versionName");
474
                                String[] key = now_versionName.split("\\.");
487
                                String[] key = now_versionName.split("\\.");
475
                                if (key.length - 1 > 2) {
488
                                if (key.length - 1 > 2) {
476
                                    dialogup_other();
489
                                    permissionTask();
477
                                } else {
490
                                } else {
478
                                    dialogup();
491
                                    dialogup();
479
                                }
492
                                }
734
        registerReceiver(networkChangeReceiver, intentFilter);
747
        registerReceiver(networkChangeReceiver, intentFilter);
735
748
736
        EventBusUtil.register(this);
749
        EventBusUtil.register(this);
737
738
        if (MainApplication.ad_link.equals("1")) {
750
        if (MainApplication.ad_link.equals("1")) {
739
            againPoint = "1";
751
            againPoint = "1";
740
            is_dui = getIntent().getStringExtra("is_dui");
752
            is_dui = getIntent().getStringExtra("is_dui");
1535
                                        this,
1547
                                        this,
1536
                                        "为了定位您的位置,推荐充电桩,充电桩位置路线导航需要开启位置权限,是否前往开启?",
1548
                                        "为了定位您的位置,推荐充电桩,充电桩位置路线导航需要开启位置权限,是否前往开启?",
1537
                                        RC_Location_FIRST_PERM,
1549
                                        RC_Location_FIRST_PERM,
1538
                                        Manifest.permission.ACCESS_FINE_LOCATION);
1550
                                        Manifest.permission.ACCESS_FINE_LOCATION,
1551
                                        Manifest.permission.ACCESS_COARSE_LOCATION
1552
                                        );
1539
1553
1540
                        }).show();
1554
                        }).show();
1541
1555
2864
2878
2865
    private boolean hasLocationPermission() {
2879
    private boolean hasLocationPermission() {
2866
        return EasyPermissions.hasPermissions(this,
2880
        return EasyPermissions.hasPermissions(this,
2867
                Manifest.permission.ACCESS_FINE_LOCATION
2881
                Manifest.permission.ACCESS_FINE_LOCATION,
2882
                Manifest.permission.ACCESS_COARSE_LOCATION
2868
        );
2883
        );
2869
    }
2884
    }
2870
2885
2884
                    this,
2899
                    this,
2885
                    "为了定位您的位置,推荐充电桩,充电桩位置路线导航需要开启位置权限,是否前往开启?",
2900
                    "为了定位您的位置,推荐充电桩,充电桩位置路线导航需要开启位置权限,是否前往开启?",
2886
                    RC_Location_PERM,
2901
                    RC_Location_PERM,
2887
                    Manifest.permission.ACCESS_FINE_LOCATION);
2902
                    Manifest.permission.ACCESS_FINE_LOCATION,
2903
                    Manifest.permission.ACCESS_COARSE_LOCATION
2904
                    );
2888
        }
2905
        }
2889
    }
2906
    }
2890
2907
3375
                    aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(screenCity, 14.0f));
3392
                    aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(screenCity, 14.0f));
3376
                }
3393
                }
3377
            }, 500);
3394
            }, 500);
3395
        }else if (resultCode == RESULT_OK && requestCode == INSTALL_PERMISS_CODE){
3396
            permissionTask();
3378
        }
3397
        }
3379
    }
3398
    }
3380
3399
3410
    }
3429
    }
3411
3430
3412
    private void dialogup_other() {
3431
    private void dialogup_other() {
3432
3433
        now_versionCode="999";
3434
        now_versionName="999";
3435
        title="999";
3413
        int code = Integer.parseInt(now_versionCode);
3436
        int code = Integer.parseInt(now_versionCode);
3414
        if (code - getVersionCode(getApplication()) > 0) {
3437
        if (code - getVersionCode(getApplication()) > 0) {
3415
            alterDialog = new AlertDialogUpdate(MainMapActivity.this);
3438
            alterDialog = new AlertDialogUpdate(MainMapActivity.this);
3422
                        public void onClick(View v) {
3445
                        public void onClick(View v) {
3423
                            showProgressWindow();
3446
                            showProgressWindow();
3424
                            ToastUtil.showToast(getApplicationContext(), "正在下载中", Toast.LENGTH_SHORT);
3447
                            ToastUtil.showToast(getApplicationContext(), "正在下载中", Toast.LENGTH_SHORT);
3425
                            OkHttpUtils.get().url("http://cdz.evcharge.cc/app/app.apk").build()
3426
                                    .execute(new FileCallBack(Environment.getExternalStorageDirectory().getAbsolutePath(), "cdz_install") {
3427
                                        @Override
3428
                                        public void inProgress(final float progress, long total) {
3429
3430
                                            NumberFormat numberFormat = NumberFormat.getInstance();
3431
3432
                                            // 设置精确到小数点后2位
3433
3434
                                            numberFormat.setMaximumFractionDigits(2);
3435
                                            String format = numberFormat.format(progress * 100);
3436
3437
                                            Message message = new Message();
3438
                                            message.what = 0x01;
3439
3440
                                            Bundle bundle = new Bundle();
3441
                                            bundle.putString("format", format + "%");
3442
                                            LogUtils.e("当前:" + format);
3443
                                            if (!format.contains(".")) {
3444
                                                bundle.putString("progress", format + ".");
3445
                                            } else {
3446
                                                bundle.putString("progress", format);
3447
                                            }
3448
3449
3450
                                            message.setData(bundle);
3451
                                            myHandler.sendMessage(message);
3452
3453
3454
                                        }
3455
3456
                                        @Override
3457
                                        public void onError(Call call, Exception e) {
3458
//                                            LogUtils.e(e.getMessage());
3459
                                        }
3460
3461
                                        @Override
3462
                                        public void onResponse(File response) {
3463
                                            String path = getDatabasePath("zhan_list").getPath();
3464
                                            com.blankj.utilcode.util.LogUtils.e(path);
3465
                                            AppUtils.cleanAppData(path);
3466
3467
                                            Intent intent = new Intent();
3468
                                            intent.setAction(android.content.Intent.ACTION_VIEW);
3469
                                            Uri uri;
3470
                                            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
3471
                                                Uri contentUri = FileProvider.getUriForFile(context,
3472
                                                        context.getApplicationContext().getPackageName() + ".provider",
3473
                                                        response);
3474
                                                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
3475
                                                intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
3476
                                                intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
3477
                                            } else {
3478
                                                uri = Uri.fromFile(response);
3479
                                                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
3480
                                                intent.setDataAndType(uri, "application/vnd.android.package-archive");
3481
                                            }
3482
                                            context.startActivity(intent);
3483
                                            android.os.Process.killProcess(android.os.Process.myPid());
3484
                                        }
3485
                                    });
3448
                            downLoadFile();
3486
                        }
3449
                        }
3487
                    }).setNegativeButton("退出", new View.OnClickListener() {
3450
                    }).setNegativeButton("退出", new View.OnClickListener() {
3488
                @Override
3451
                @Override
3493
                    editor1.clear();
3456
                    editor1.clear();
3494
                    finish();
3457
                    finish();
3495
                    ProfileManager.getInstance().setSearchAddress(getApplicationContext(), "");
3458
                    ProfileManager.getInstance().setSearchAddress(getApplicationContext(), "");
3496
                    android.os.Process.killProcess(android.os.Process.myPid());
3459
                    Process.killProcess(Process.myPid());
3497
                }
3460
                }
3498
            }).setCancelable(false).show();
3461
            }).setCancelable(false).show();
3499
        }
3462
        }
3500
    }
3463
    }
3464
    private void downLoadFile() {
3465
        String url = "http://cdz.evcharge.cc/app/app.apk";
3466
3467
        showProgressWindow();
3468
        ToastUtil.showToast(getApplicationContext(), "正在下载中", Toast.LENGTH_SHORT);
3469
        OkHttpUtils.get().url("http://cdz.evcharge.cc/app/app.apk").build()
3470
                .execute(new FileCallBack(PhotoUtils.DOWNLOADS, "cdz_install") {
3471
                    @Override
3472
                    public void inProgress(final float progress, long total) {
3473
3474
                        NumberFormat numberFormat = NumberFormat.getInstance();
3475
3476
                        // 设置精确到小数点后2位
3477
3478
                        numberFormat.setMaximumFractionDigits(2);
3479
                        String format = numberFormat.format(progress * 100);
3480
3481
                        Message message = new Message();
3482
                        message.what = 0x01;
3483
3484
                        Bundle bundle = new Bundle();
3485
                        bundle.putString("format", format + "%");
3486
//                        LogUtils.e("当前:" + format);
3487
                        if (!format.contains(".")) {
3488
                            bundle.putString("progress", format + ".");
3489
                        } else {
3490
                            bundle.putString("progress", format);
3491
                        }
3492
3493
3494
                        message.setData(bundle);
3495
                        myHandler.sendMessage(message);
3496
3497
3498
                    }
3499
3500
                    @Override
3501
                    public void onError(Call call, Exception e) {
3502
                          LogUtils.e(e.getMessage());
3503
                    }
3504
3505
                    @Override
3506
                    public void onResponse(File response) {
3507
                        String path = getDatabasePath("zhan_list").getPath();
3508
                        com.blankj.utilcode.util.LogUtils.e(path);
3509
                        AppUtils.cleanAppData(path);
3510
                        Log.e("hyc","**------**"+response.getAbsolutePath());
3511
                        Log.e("hyc","**------**"+!response.exists());
3512
                        if (!response.exists()){
3513
                            Toast.makeText(context, "文件不存在", Toast.LENGTH_SHORT).show();
3514
                            return  ;
3515
                        }
3516
3517
                        Intent intent = new Intent();
3518
                        intent.setAction(android.content.Intent.ACTION_VIEW);
3519
                        Uri uri;
3520
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
3521
                            Uri contentUri = FileProvider.getUriForFile(context,
3522
                                    context.getApplicationContext().getPackageName() + ".provider",
3523
                                    response);
3524
                            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
3525
                            intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
3526
                            intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
3527
                        } else {
3528
                            uri = Uri.fromFile(response);
3529
                            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
3530
                            intent.setDataAndType(uri, "application/vnd.android.package-archive");
3531
                        }
3532
                        context.startActivity(intent);
3533
                        android.os.Process.killProcess(android.os.Process.myPid());
3534
                    }
3535
                });
3536
    }
3537
3538
    @AfterPermissionGranted(RC_READ_EXTERNAL_PERM)
3539
    public void permissionTask() {
3540
        if (isPermissionOK()) {
3541
            dialogup_other();
3542
        } else {
3543
            EasyPermissions.requestPermissions(
3544
                    this, "充电桩想要获取您的图片读取权限,是否允许?",
3545
                    RC_READ_EXTERNAL_PERM,
3546
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
3547
                    Manifest.permission.READ_EXTERNAL_STORAGE);
3548
        }
3549
    }
3501
3550
3551
    private boolean isPermissionOK() {
3552
        return EasyPermissions.hasPermissions(this,
3553
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
3554
                Manifest.permission.READ_EXTERNAL_STORAGE
3555
        );
3556
    }
3502
    public static int getVersionCode(Context context)//获取版本号(内部识别号)
3557
    public static int getVersionCode(Context context)//获取版本号(内部识别号)
3503
    {
3558
    {
3504
        try {
3559
        try {
3921
    }
3976
    }
3922
3977
3923
3978
3979
    @SuppressLint("Range")
3924
    private void getZhanListData(int level) {
3980
    private void getZhanListData(int level) {
3925
        aMap.clear();
3981
        aMap.clear();
3926
        ZhanDBHelper dbHelper = new ZhanDBHelper(this);
3982
        ZhanDBHelper dbHelper = new ZhanDBHelper(this);
5882
    }
5938
    }
5883
5939
5884
5940
5885
5941
    /**
5942
     * 8.0以上系统设置安装未知来源权限
5943
     */
5944
    public void setInstallPermission(){
5945
        boolean haveInstallPermission;
5946
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
5947
            //先判断是否有安装未知来源应用的权限
5948
            haveInstallPermission = getPackageManager().canRequestPackageInstalls();
5949
            if(!haveInstallPermission){
5950
                //弹框提示用户手动打开
5951
                    AlertDialogCommon  alterDialog = new AlertDialogCommon(MainMapActivity.this);
5952
                    //此方法需要API>=26才能使用
5953
                    alterDialog.builder()
5954
                            .setTitle("安装权限")
5955
                            .setMsg("需要打开允许来自此来源,请去设置中开启此权限")
5956
                            .setCancelable(false)
5957
                            .setPositiveButton("确定", v->{
5958
                                Uri packageURI = Uri.parse("package:"+getPackageName());
5959
                                Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES,packageURI);
5960
                                startActivityForResult(intent, INSTALL_PERMISS_CODE);
5961
                            }).show();
5962
            }else{
5963
                permissionTask();
5964
            }
5965
        }else{
5966
            permissionTask();
5967
        }
5968
    }
5886
5969
5887
}
5970
}

+ 5 - 48
app/src/main/java/com/electric/chargingpile/activity/MyWebViewActivity.java

18
import android.net.http.SslError;
18
import android.net.http.SslError;
19
import android.os.Build;
19
import android.os.Build;
20
import android.os.Bundle;
20
import android.os.Bundle;
21
import android.os.Environment;
22
import android.os.Handler;
21
import android.os.Handler;
23
import android.provider.MediaStore;
22
import android.provider.MediaStore;
24
import android.text.TextUtils;
23
import android.text.TextUtils;
65
import com.electric.chargingpile.util.JsonUtils;
64
import com.electric.chargingpile.util.JsonUtils;
66
import com.electric.chargingpile.util.LoadingDialog;
65
import com.electric.chargingpile.util.LoadingDialog;
67
import com.electric.chargingpile.util.PhoneUtils;
66
import com.electric.chargingpile.util.PhoneUtils;
67
import com.electric.chargingpile.util.PhotoUtils;
68
import com.electric.chargingpile.util.ToastUtil;
68
import com.electric.chargingpile.util.ToastUtil;
69
import com.electric.chargingpile.util.Util;
69
import com.electric.chargingpile.util.Util;
70
import com.electric.chargingpile.view.AlertDialogTwo;
70
import com.electric.chargingpile.view.AlertDialogTwo;
245
    }
245
    }
246
246
247
    private void saveImage(Bitmap resource) {
247
    private void saveImage(Bitmap resource) {
248
        String saveImagePath = null;
249
        String imageFileName = "d1ev_" + PhoneUtils.getGUID() + ".png";
250
        File storageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "d1ev");
251
        boolean success = true;
252
        if (!storageDir.exists()) {
253
            success = storageDir.mkdir();
254
        }
255
256
        if (success) {
257
            File imageFile = new File(storageDir, imageFileName);
258
            saveImagePath = imageFile.getAbsolutePath();
259
            try {
260
                OutputStream outputStream = new FileOutputStream(imageFile);
261
                resource.compress(Bitmap.CompressFormat.PNG, 100, outputStream);
262
                outputStream.close();
263
            } catch (Exception e) {
264
                ToastUtil.showToast(MyWebViewActivity.this, "保存图像失败", Toast.LENGTH_SHORT);
265
                e.printStackTrace();
266
            }
267
268
            galleryAddPic(saveImagePath);
269
        } else {
270
            ToastUtil.showToast(MyWebViewActivity.this, "保存图像失败", Toast.LENGTH_SHORT);
271
        }
248
        PhotoUtils.saveBitmap(this,resource);
272
    }
249
    }
273
250
274
    private void galleryAddPic(String imagePath) {
275
        Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
276
        File file = new File(imagePath);
277
        Uri uri = Uri.fromFile(file);
278
        intent.setData(uri);
279
        sendBroadcast(intent);
280
        ToastUtil.showToast(MyWebViewActivity.this, "图像已成功保存到相册", Toast.LENGTH_SHORT);
281
    }
282
251
283
252
284
    // 93 3.5.5 小程序埋点
253
    // 93 3.5.5 小程序埋点
1496
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
1465
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
1497
        if (ImageUitl.hasSdcard()) {
1466
        if (ImageUitl.hasSdcard()) {
1498
            String fileName = "android" + System.currentTimeMillis() / 1000 + ".jpg";
1467
            String fileName = "android" + System.currentTimeMillis() / 1000 + ".jpg";
1499
            cameraFilePath = ImageUitl.getPath(Environment.getExternalStorageDirectory() + "/" + "cdz") + "/" + fileName;
1468
            cameraFilePath = ImageUitl.getPath(PhotoUtils.CACHE_DIR) + "/" + fileName;
1500
            File imageFile = ImageUitl.getFile(cameraFilePath);
1469
            File imageFile = ImageUitl.getFile(cameraFilePath);
1501
            Uri uri = parseUri(imageFile);
1470
            Uri uri =PhotoUtils.parseUri(imageFile);
1502
            intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
1471
            intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
1503
            try {
1472
            try {
1504
                startActivityForResult(intent, FILE_CAMERA_RESULT_CODE);
1473
                startActivityForResult(intent, FILE_CAMERA_RESULT_CODE);
1509
        }
1478
        }
1510
    }
1479
    }
1511
1480
1512
    private Uri parseUri(File cameraFile) {
1513
        Uri imageUri;
1514
        String authority = getPackageName() + ".provider";
1515
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
1516
            //通过FileProvider创建一个content类型的Uri
1517
            imageUri = FileProvider.getUriForFile(getApplicationContext(), authority, cameraFile);
1518
        } else {
1519
            imageUri = Uri.fromFile(cameraFile);
1520
        }
1521
        return imageUri;
1522
    }
1523
1524
    public class MyWebViewClient extends WebViewClient {
1481
    public class MyWebViewClient extends WebViewClient {
1525
        @Override
1482
        @Override
1526
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
1483
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
1593
                result = data.getData();
1550
                result = data.getData();
1594
            }
1551
            }
1595
            if (result == null && ImageUitl.hasFile(cameraFilePath)) {
1552
            if (result == null && ImageUitl.hasFile(cameraFilePath)) {
1596
                result = Uri.fromFile(new File(cameraFilePath));
1553
                result = PhotoUtils.parseUri(new File(cameraFilePath));
1597
            }
1554
            }
1598
1555
1599
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
1556
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {

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

609
    }
609
    }
610
610
611
    private boolean hasLocationPermission() {
611
    private boolean hasLocationPermission() {
612
        return EasyPermissions.hasPermissions(this, Manifest.permission.ACCESS_FINE_LOCATION);
612
        return EasyPermissions.hasPermissions(this, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION);
613
    }
613
    }
614
614
615
    @AfterPermissionGranted(RC_Location_PERM)
615
    @AfterPermissionGranted(RC_Location_PERM)
621
                    this,
621
                    this,
622
                    "为了定位您的位置,推荐充电桩,充电桩位置路线导航需要开启位置权限,是否前往开启?",
622
                    "为了定位您的位置,推荐充电桩,充电桩位置路线导航需要开启位置权限,是否前往开启?",
623
                    RC_Location_PERM,
623
                    RC_Location_PERM,
624
                    Manifest.permission.ACCESS_FINE_LOCATION);
624
                    Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION);
625
        }
625
        }
626
    }
626
    }
627
}
627
}

+ 57 - 218
app/src/main/java/com/electric/chargingpile/activity/PrivateZhuangInfoActivity.java

1
package com.electric.chargingpile.activity;
1
package com.electric.chargingpile.activity;
2
2
3
import android.Manifest;
3
import android.Manifest;
4
import android.annotation.SuppressLint;
5
import android.app.Activity;
4
import android.app.Activity;
6
import android.app.ProgressDialog;
5
import android.app.ProgressDialog;
7
import android.app.TimePickerDialog;
6
import android.app.TimePickerDialog;
9
import android.content.Intent;
8
import android.content.Intent;
10
import android.graphics.Bitmap;
9
import android.graphics.Bitmap;
11
import android.graphics.BitmapFactory;
10
import android.graphics.BitmapFactory;
12
import android.graphics.Color;
13
import android.graphics.Matrix;
11
import android.graphics.Matrix;
14
import android.graphics.drawable.BitmapDrawable;
12
import android.graphics.drawable.BitmapDrawable;
15
import android.graphics.drawable.ColorDrawable;
16
import android.graphics.drawable.Drawable;
13
import android.graphics.drawable.Drawable;
17
import android.net.Uri;
14
import android.os.Build;
18
import android.os.Bundle;
15
import android.os.Bundle;
19
import android.os.Environment;
20
import android.os.Handler;
16
import android.os.Handler;
21
import android.os.Message;
17
import android.os.Message;
22
import android.provider.MediaStore;
23
import android.util.Base64;
18
import android.util.Base64;
24
import android.util.Log;
19
import android.util.Log;
25
import android.view.Gravity;
20
import android.view.Gravity;
29
import android.view.MenuItem;
24
import android.view.MenuItem;
30
import android.view.View;
25
import android.view.View;
31
import android.view.ViewGroup;
26
import android.view.ViewGroup;
32
import android.widget.AdapterView;
33
import android.widget.AdapterView.OnItemClickListener;
34
import android.widget.BaseAdapter;
35
import android.widget.Button;
27
import android.widget.Button;
36
import android.widget.EditText;
28
import android.widget.EditText;
37
import android.widget.GridView;
38
import android.widget.ImageView;
29
import android.widget.ImageView;
39
import android.widget.LinearLayout;
30
import android.widget.LinearLayout;
40
import android.widget.PopupWindow;
31
import android.widget.PopupWindow;
61
import com.electric.chargingpile.data.Pic;
52
import com.electric.chargingpile.data.Pic;
62
import com.electric.chargingpile.data.PrivateZhuang;
53
import com.electric.chargingpile.data.PrivateZhuang;
63
import com.electric.chargingpile.data.Zhan;
54
import com.electric.chargingpile.data.Zhan;
55
import com.electric.chargingpile.engine.GlideEngine;
64
import com.electric.chargingpile.util.BarColorUtil;
56
import com.electric.chargingpile.util.BarColorUtil;
65
import com.electric.chargingpile.util.Bimp;
57
import com.electric.chargingpile.util.Bimp;
66
import com.electric.chargingpile.util.CheckMobileNum;
58
import com.electric.chargingpile.util.CheckMobileNum;
67
import com.electric.chargingpile.util.DensityUtil;
59
import com.electric.chargingpile.util.DensityUtil;
68
import com.electric.chargingpile.util.FileUtils;
69
import com.electric.chargingpile.util.ImageItem;
60
import com.electric.chargingpile.util.ImageItem;
70
import com.electric.chargingpile.util.ImageUtils;
71
import com.electric.chargingpile.util.JsonUtils;
61
import com.electric.chargingpile.util.JsonUtils;
72
import com.electric.chargingpile.util.OkHttpUtil;
62
import com.electric.chargingpile.util.OkHttpUtil;
73
import com.electric.chargingpile.util.PublicWay;
63
import com.electric.chargingpile.util.PublicWay;
74
import com.electric.chargingpile.util.Res;
64
import com.electric.chargingpile.util.Res;
75
import com.electric.chargingpile.util.ScreenUtils;
76
import com.electric.chargingpile.util.ToastUtil;
65
import com.electric.chargingpile.util.ToastUtil;
77
import com.electric.chargingpile.util.UploadUtil;
66
import com.electric.chargingpile.util.UploadUtil;
67
import com.electric.chargingpile.util.Util;
78
import com.electric.chargingpile.view.CustomProgressDialog;
68
import com.electric.chargingpile.view.CustomProgressDialog;
69
import com.luck.picture.lib.PictureSelector;
70
import com.luck.picture.lib.animators.AnimationType;
71
import com.luck.picture.lib.config.PictureConfig;
72
import com.luck.picture.lib.config.PictureMimeType;
73
import com.luck.picture.lib.entity.LocalMedia;
79
import com.squareup.okhttp.Request;
74
import com.squareup.okhttp.Request;
80
import com.squareup.okhttp.Response;
75
import com.squareup.okhttp.Response;
81
import com.zhihu.matisse.Matisse;
82
import com.zhihu.matisse.MimeType;
83
import com.zhihu.matisse.engine.impl.GlideEngine;
84
import com.zhihu.matisse.internal.entity.CaptureStrategy;
85
76
86
import org.json.JSONException;
77
import org.json.JSONException;
87
import org.json.JSONObject;
78
import org.json.JSONObject;
88
79
89
import java.io.ByteArrayInputStream;
90
import java.io.ByteArrayOutputStream;
80
import java.io.ByteArrayOutputStream;
91
import java.io.File;
81
import java.io.File;
92
import java.io.FileNotFoundException;
82
import java.io.FileNotFoundException;
125
    private TimePickerDialog tpd_close = null;
115
    private TimePickerDialog tpd_close = null;
126
    private String camePath;//拍照路径
116
    private String camePath;//拍照路径
127
117
128
    private static final String PHOTO_FILE_NAME = "android.jpg";
129
    private static final String PHOTO_FILE_PATH = getPath(Environment.getExternalStorageDirectory() + "/" + "cdz");
130
    private File tempFile;
131
    private static final int PHOTO_REQUEST_CAMERA = 1;
118
    private static final int PHOTO_REQUEST_CAMERA = 1;
132
    private static final int PHOTO_REQUEST_GALLERY = 2;
119
    private static final int PHOTO_REQUEST_GALLERY = 2;
133
    private static final int PHOTO_REQUEST_CUT = 3;
120
    private static final int PHOTO_REQUEST_CUT = 3;
176
    private RadioGroup rg_claimtype, rg_park;
163
    private RadioGroup rg_claimtype, rg_park;
177
    public static Bitmap bimap;
164
    public static Bitmap bimap;
178
    private View parentView;
165
    private View parentView;
179
    private PopupWindow pop = null;
180
    private LinearLayout ll_popup;
166
181
    private TextView open_time, close_time, share_list;
167
    private TextView open_time, close_time, share_list;
182
    private RelativeLayout rl_address;
168
    private RelativeLayout rl_address;
183
    private String tag, id, zhan_name, zhan_address, poi_jing, poi_wei, fast_num, slow_num,
169
    private String tag, id, zhan_name, zhan_address, poi_jing, poi_wei, fast_num, slow_num,
265
    protected void onCreate(Bundle savedInstanceState) {
251
    protected void onCreate(Bundle savedInstanceState) {
266
        super.onCreate(savedInstanceState);
252
        super.onCreate(savedInstanceState);
267
        initDate();
253
        initDate();
268
269
270
        tempFile = getFile(PHOTO_FILE_PATH + "/" + PHOTO_FILE_NAME);
271
        Res.init(this);
254
        Res.init(this);
272
        bimap = BitmapFactory.decodeResource(getResources(), R.drawable.addpic65);
255
        bimap = BitmapFactory.decodeResource(getResources(), R.drawable.addpic65);
273
        PublicWay.activityList.add(this);
256
        PublicWay.activityList.add(this);
311
        selectBitmap[1] = null;
294
        selectBitmap[1] = null;
312
        selectBitmap[2] = null;
295
        selectBitmap[2] = null;
313
296
314
        pop = new PopupWindow(PrivateZhuangInfoActivity.this);
315
316
        View view = getLayoutInflater().inflate(R.layout.item_popupwindows, null);
317
318
        ll_popup = (LinearLayout) view.findViewById(R.id.ll_popup);
319
320
        pop.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
321
        pop.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
322
        pop.setBackgroundDrawable(new BitmapDrawable());
323
        pop.setFocusable(true);
324
        pop.setOutsideTouchable(true);
325
        pop.setContentView(view);
326
327
        final RelativeLayout parent = (RelativeLayout) view.findViewById(R.id.parent);
328
        Button bt1 = (Button) view.findViewById(R.id.item_popupwindows_camera);
329
        Button bt2 = (Button) view.findViewById(R.id.item_popupwindows_Photo);
330
        Button bt3 = (Button) view.findViewById(R.id.item_popupwindows_cancel);
331
        parent.setOnClickListener(new View.OnClickListener() {
332
            @Override
333
            public void onClick(View v) {
334
                // TODO Auto-generated method stub
335
                pop.dismiss();
336
                ll_popup.clearAnimation();
337
            }
338
        });
339
        bt1.setOnClickListener(new View.OnClickListener() {
340
            public void onClick(View v) {
341
                pop.dismiss();
342
                ll_popup.clearAnimation();
343
                if (MainScanActivity.isCameraUseable()) {
344
                    photo();
345
                } else {
346
                    ToastUtil.showToast(getApplicationContext(), "您当前关闭了调用摄像头权限", Toast.LENGTH_SHORT);
347
                }
348
            }
349
        });
350
        bt2.setOnClickListener(new View.OnClickListener() {
351
            public void onClick(View v) {
352
                Intent intent = new Intent(PrivateZhuangInfoActivity.this,
353
                        AlbumActivity.class);
354
                startActivity(intent);
355
                overridePendingTransition(R.anim.activity_translate_in, R.anim.activity_translate_out);
356
                pop.dismiss();
357
                ll_popup.clearAnimation();
358
            }
359
        });
360
        bt3.setOnClickListener(new View.OnClickListener() {
361
            public void onClick(View v) {
362
                pop.dismiss();
363
                ll_popup.clearAnimation();
364
            }
365
        });
366
297
367
        take_image_0 = findViewById(R.id.take_image_0);
298
        take_image_0 = findViewById(R.id.take_image_0);
368
        take_image_1 = findViewById(R.id.take_image_1);
299
        take_image_1 = findViewById(R.id.take_image_1);
392
     * 调用图库选择
323
     * 调用图库选择
393
     */
324
     */
394
    private void callGallery() {
325
    private void callGallery() {
326
/*
395
        Matisse.from(PrivateZhuangInfoActivity.this)
327
        Matisse.from(PrivateZhuangInfoActivity.this)
396
                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
328
                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
397
                .showSingleMediaType(true)
329
                .showSingleMediaType(true)
401
                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
333
                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
402
                .imageEngine(new GlideEngine())
334
                .imageEngine(new GlideEngine())
403
                .forResult(REQUEST_CODE_CHOOSE);
335
                .forResult(REQUEST_CODE_CHOOSE);
336
*/
337
        PictureSelector.create(this)
338
                .openGallery(PictureMimeType.ofImage())
339
                .selectionMode(PictureConfig.SINGLE)
340
                .isSingleDirectReturn(true)
341
                .isCompress(true)//是否压缩
342
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
343
                .isGif(true)//是否显示gif
344
                .isAndroidQTransform(true)
345
                .imageEngine(GlideEngine.createGlideEngine())
346
                .isWeChatStyle(false)// 是否开启微信图片选择风格
347
                .isUseCustomCamera(false)// 是否使用自定义相机
348
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
349
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
350
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
351
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
352
                .imageSpanCount(4)// 每行显示个数
353
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
354
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
355
                .forResult(REQUEST_CODE_CHOOSE);
356
404
    }
357
    }
405
358
406
    @Override
359
    @Override
436
            @Override
389
            @Override
437
            public void subscribe(ObservableEmitter<String> subscriber) {
390
            public void subscribe(ObservableEmitter<String> subscriber) {
438
                try {
391
                try {
439
                    List<Uri> uriList = Matisse.obtainResult(data);
440
                    Uri uri = uriList.get(0);
441
                    Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
442
                    File file = FileUtils.from(PrivateZhuangInfoActivity.this, uri);
443
444
                    bitmap = FileUtils.rotateIfRequired(file, bitmap);
445
                    bitmap = imageZoom(bitmap);
446
447
                    ImageItem takePhoto = new ImageItem();
448
                    takePhoto.setBitmap(bitmap);
449
                    selectBitmap[selectIndex] = takePhoto;
450
                    isTakePhoto = true;
392
                    List<LocalMedia> mediaList = PictureSelector.obtainMultipleResult(data);
393
                    if (mediaList!=null && mediaList.size()>0){
394
                     /*   List<Uri> uriList = Matisse.obtainResult(data);
395
                        Uri uri = uriList.get(0);
396
                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
397
                        File file = FileUtils.from(PrivateZhuangInfoActivity.this, uri);
398
399
                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
400
                        bitmap = imageZoom(bitmap);*/
401
402
                        String path="";
403
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
404
                            path= mediaList.get(0).getAndroidQToPath();
405
                        }else{
406
                            path=mediaList.get(0).getPath();
407
                        }
408
                        ImageItem takePhoto = new ImageItem();
409
                        takePhoto.setBitmap(imageZoom(BitmapFactory.decodeFile(path)));
410
                        selectBitmap[selectIndex] = takePhoto;
411
                        isTakePhoto = true;
412
413
                        subscriber.onNext("");
414
                        subscriber.onComplete();
415
                    }else{
416
                        subscriber.onError(new Exception(""));
417
                    }
451
418
452
                    subscriber.onNext("");
453
                    subscriber.onComplete();
454
                } catch (Exception e) {
419
                } catch (Exception e) {
455
                    e.printStackTrace();
420
                    e.printStackTrace();
456
                    subscriber.onError(e);
421
                    subscriber.onError(e);
1104
1069
1105
    private static final int TAKE_PICTURE = 0x000001;
1070
    private static final int TAKE_PICTURE = 0x000001;
1106
1071
1107
    public void photo() {
1108
        if (hasSdcard()) {
1109
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
1110
            intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
1111
            startActivityForResult(intent, PHOTO_REQUEST_CAMERA);
1112
        }
1113
    }
1114
1072
1115
    @Override
1073
    @Override
1116
    protected void onDestroy() {
1074
    protected void onDestroy() {
1119
        super.onDestroy();
1077
        super.onDestroy();
1120
    }
1078
    }
1121
1079
1122
1123
    private Bitmap compressBmpFromBmp(Bitmap image) {
1124
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
1125
        int options = 100;
1126
        image.compress(Bitmap.CompressFormat.JPEG, 60, baos);
1127
        while (baos.toByteArray().length / 1024 > 200) {
1128
            baos.reset();
1129
            options -= 10;
1130
            image.compress(Bitmap.CompressFormat.JPEG, options, baos);
1131
        }
1132
        ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());
1133
        Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);
1134
        return bitmap;
1135
    }
1136
1137
1138
    private void crop(Uri uri, Uri cutImgUri) {
1139
        Intent intent = new Intent("com.android.camera.action.CROP");
1140
        intent.setDataAndType(uri, "image/*");
1141
        intent.putExtra("crop", "true");
1142
        intent.putExtra("outputFormat", "JPEG");
1143
        intent.putExtra("noFaceDetection", true);// ȡ������ʶ��
1144
        intent.putExtra("return-data", false);// true:������uri��false������uri
1145
        intent.putExtra(MediaStore.EXTRA_OUTPUT, cutImgUri);//д���ȡ��ͼƬ
1146
        startActivityForResult(intent, PHOTO_REQUEST_CUT);
1147
    }
1148
1149
    private boolean hasSdcard() {
1150
        if (Environment.getExternalStorageState().equals(
1151
                Environment.MEDIA_MOUNTED)) {
1152
            return true;
1153
        } else {
1154
            return false;
1155
        }
1156
    }
1157
1158
    private static String getPath(String path) {
1159
        File f = new File(path);
1160
        if (!f.exists()) {
1161
            f.mkdirs();
1162
        }
1163
        return f.getAbsolutePath();
1164
    }
1165
1166
    private File getFile(String path) {
1167
        File f = new File(path);
1168
        if (!f.exists()) {
1169
            try {
1170
                f.createNewFile();
1171
            } catch (IOException e) {
1172
                e.printStackTrace();
1173
            }
1174
        }
1175
        return f;
1176
    }
1177
1178
    public Bitmap decodeUriAsBitmap(Uri uri) {
1179
        Bitmap bitmap = null;
1180
        try {
1181
            bitmap = BitmapFactory.decodeStream(this.getContentResolver().openInputStream(uri));
1182
        } catch (FileNotFoundException e) {
1183
            e.printStackTrace();
1184
            return null;
1185
        }
1186
        return bitmap;
1187
    }
1188
1189
    private Bitmap comp(Bitmap image) {
1190
1191
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
1192
        image.compress(Bitmap.CompressFormat.JPEG, 30, baos);
1193
        if (baos.toByteArray().length / 1024 > 1024) {//判断如果图片大于1M,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出
1194
            baos.reset();//重置baos即清空baos
1195
            image.compress(Bitmap.CompressFormat.JPEG, 50, baos);//这里压缩50%,把压缩后的数据存放到baos中
1196
        }
1197
        ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());
1198
        BitmapFactory.Options newOpts = new BitmapFactory.Options();
1199
        //开始读入图片,此时把options.inJustDecodeBounds 设回true了
1200
        newOpts.inJustDecodeBounds = true;
1201
        Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);
1202
        newOpts.inJustDecodeBounds = false;
1203
        int w = newOpts.outWidth;
1204
        int h = newOpts.outHeight;
1205
        //现在主流手机比较多是800*480分辨率,所以高和宽我们设置为
1206
        float hh = 800f;//这里设置高度为800f
1207
        float ww = 480f;//这里设置宽度为480f
1208
        //缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可
1209
        int be = 1;//be=1表示不缩放
1210
        if (w > h && w > ww) {//如果宽度大的话根据宽度固定大小缩放
1211
            be = (int) (newOpts.outWidth / ww);
1212
        } else if (w < h && h > hh) {//如果高度高的话根据宽度固定大小缩放
1213
            be = (int) (newOpts.outHeight / hh);
1214
        }
1215
        if (be <= 0)
1216
            be = 1;
1217
        newOpts.inSampleSize = be;//设置缩放比例
1218
        newOpts.inPreferredConfig = Bitmap.Config.RGB_565;//降低图片从ARGB888到RGB565
1219
        //重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了
1220
        isBm = new ByteArrayInputStream(baos.toByteArray());
1221
        bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);
1222
        return compressImage(bitmap);//压缩好比例大小后再进行质量压缩
1223
    }
1224
1225
1226
    private Bitmap compressImage(Bitmap image) {
1227
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
1228
        image.compress(Bitmap.CompressFormat.JPEG, 80, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
1229
        int options = 70;
1230
        while (baos.toByteArray().length / 1024 > 300) {    //循环判断如果压缩后图片是否大于100kb,大于继续压缩
1231
            baos.reset();//重置baos即清空baos
1232
            options -= 10;//每次都减少10
1233
            image.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中
1234
1235
        }
1236
        ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中
1237
        Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream数据生成图片
1238
        return bitmap;
1239
    }
1240
1241
    private Bitmap imageZoom(Bitmap bm) {
1080
    private Bitmap imageZoom(Bitmap bm) {
1242
        // 图片允许最大空间 单位:KB
1081
        // 图片允许最大空间 单位:KB
1243
        double maxSize = 200.00;
1082
        double maxSize = 200.00;

+ 2 - 0
app/src/main/java/com/electric/chargingpile/activity/PublishItemsActivity.java

22
/**
22
/**
23
 * @author dxh
23
 * @author dxh
24
 * 发布类型选择页
24
 * 发布类型选择页
25
 * 已废弃,不在维护。
25
 */
26
 */
27
@Deprecated
26
public class PublishItemsActivity extends AppCompatActivity implements View.OnClickListener {
28
public class PublishItemsActivity extends AppCompatActivity implements View.OnClickListener {
27
    private static final String TAG = "PublishItemsActivity";
29
    private static final String TAG = "PublishItemsActivity";
28
30

+ 69 - 120
app/src/main/java/com/electric/chargingpile/activity/PublishPicTopicActivity.java

16
import android.net.Uri;
16
import android.net.Uri;
17
import android.os.Build;
17
import android.os.Build;
18
import android.os.Bundle;
18
import android.os.Bundle;
19
import android.os.Environment;
19
20
import android.os.Handler;
20
import android.os.Handler;
21
import android.os.Message;
21
import android.os.Message;
22
import android.provider.MediaStore;
22
import android.provider.MediaStore;
54
import com.electric.chargingpile.data.PhotoUploadResult;
54
import com.electric.chargingpile.data.PhotoUploadResult;
55
import com.electric.chargingpile.data.PublishItemSerializable;
55
import com.electric.chargingpile.data.PublishItemSerializable;
56
import com.electric.chargingpile.data.UploadPic;
56
import com.electric.chargingpile.data.UploadPic;
57
import com.electric.chargingpile.engine.GlideEngine;
57
import com.electric.chargingpile.util.BarColorUtil;
58
import com.electric.chargingpile.util.BarColorUtil;
58
import com.electric.chargingpile.util.Base64;
59
import com.electric.chargingpile.util.Base64;
59
import com.electric.chargingpile.util.Bimp;
60
import com.electric.chargingpile.util.Bimp;
68
import com.electric.chargingpile.util.Res;
69
import com.electric.chargingpile.util.Res;
69
import com.electric.chargingpile.util.ToastUtil;
70
import com.electric.chargingpile.util.ToastUtil;
70
import com.electric.chargingpile.util.Util;
71
import com.electric.chargingpile.util.Util;
72
import com.luck.picture.lib.PictureSelector;
73
import com.luck.picture.lib.animators.AnimationType;
74
import com.luck.picture.lib.config.PictureConfig;
75
import com.luck.picture.lib.config.PictureMimeType;
76
import com.luck.picture.lib.entity.LocalMedia;
71
import com.luck.picture.lib.tools.ScreenUtils;
77
import com.luck.picture.lib.tools.ScreenUtils;
72
import com.umeng.analytics.MobclickAgent;
78
import com.umeng.analytics.MobclickAgent;
73
import com.upyun.library.common.ParallelUploader;
79
import com.upyun.library.common.ParallelUploader;
74
import com.upyun.library.common.UploadEngine;
80
import com.upyun.library.common.UploadEngine;
75
import com.upyun.library.listener.UpCompleteListener;
81
import com.upyun.library.listener.UpCompleteListener;
76
import com.upyun.library.listener.UpProgressListener;
82
import com.upyun.library.listener.UpProgressListener;
77
import com.zhihu.matisse.Matisse;
78
import com.zhihu.matisse.MimeType;
79
import com.zhihu.matisse.engine.impl.GlideEngine;
80
import com.zhihu.matisse.internal.entity.CaptureStrategy;
83
81
import com.zhy.http.okhttp.OkHttpUtils;
84
import com.zhy.http.okhttp.OkHttpUtils;
82
import com.zhy.http.okhttp.callback.StringCallback;
85
import com.zhy.http.okhttp.callback.StringCallback;
83
86
104
/**
107
/**
105
 * @desc : 发布话题
108
 * @desc : 发布话题
106
 */
109
 */
110
@Deprecated
107
public class PublishPicTopicActivity extends Activity implements OnClickListener, EasyPermissions.PermissionCallbacks {
111
public class PublishPicTopicActivity extends Activity implements OnClickListener, EasyPermissions.PermissionCallbacks {
108
    private static final String TAG = "PublishPicTopicActivity";
112
    private static final String TAG = "PublishPicTopicActivity";
109
    private static final int PIC_NUM = 9;
113
    private static final int PIC_NUM = 9;
110
    private ImageView ivBack;
114
    private ImageView ivBack;
111
    private TextView tv_right;
115
    private TextView tv_right;
112
    private static String PHOTO_FILE_NAME = "";
113
    private static final String PHOTO_FILE_PATH = getPath(Environment.getExternalStorageDirectory() + "/" + "cdz");
114
    private GridView noScrollgridview;
116
    private GridView noScrollgridview;
115
    private PopupWindow pop = null;
116
    private LinearLayout ll_popup;
117
    private File tempFile;
117
118
118
    Bitmap bm = null;
119
    Bitmap bm = null;
119
    private static final int PHOTO_REQUEST_CAMERA = 1;
120
    private static final int PHOTO_REQUEST_CAMERA = 1;
120
    private static final int PHOTO_REQUEST_GALLERY = 2;
121
    private static final int PHOTO_REQUEST_GALLERY = 2;
153
154
154
    public static final int REQUEST_CODE_CHOOSE = 342;
155
    public static final int REQUEST_CODE_CHOOSE = 342;
155
156
156
157
    private List<LocalMedia> mSelectionData =new ArrayList<LocalMedia>();
157
    @Override
158
    @Override
158
    protected void onCreate(Bundle savedInstanceState) {
159
    protected void onCreate(Bundle savedInstanceState) {
159
        super.onCreate(savedInstanceState);
160
        super.onCreate(savedInstanceState);
163
        initView();
164
        initView();
164
        Res.init(this);
165
        Res.init(this);
165
        PublicWay.activityList.add(this);
166
        PublicWay.activityList.add(this);
166
        long appTime1 = System.currentTimeMillis() / 1000;
167
        PHOTO_FILE_NAME = "android" + appTime1 + ".jpg";
168
        tempFile = getFile(PHOTO_FILE_PATH + "/" + PHOTO_FILE_NAME);
169
        dialog = new LoadingDialog(this);
167
        dialog = new LoadingDialog(this);
170
        dialog.setCanceledOnTouchOutside(false);
168
        dialog.setCanceledOnTouchOutside(false);
171
        Init();
169
        Init();
386
        return f;
384
        return f;
387
    }
385
    }
388
386
389
    private static String getPath(String path) {
390
        File f = new File(path);
391
        if (!f.exists()) {
392
            f.mkdirs();
393
        }
394
        return f.getAbsolutePath();
395
    }
396
397
    private boolean hasSdcard() {
398
        if (Environment.getExternalStorageState().equals(
399
                Environment.MEDIA_MOUNTED)) {
400
            return true;
401
        } else {
402
            return false;
403
        }
404
    }
405
387
406
    public void Init() {
388
    public void Init() {
407
        pop = new PopupWindow(PublishPicTopicActivity.this);
408
        View view = getLayoutInflater().inflate(R.layout.item_popupwindows, null);
409
        ll_popup = (LinearLayout) view.findViewById(R.id.ll_popup);
410
411
        pop.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
412
        pop.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
413
        pop.setBackgroundDrawable(new BitmapDrawable());
414
        pop.setFocusable(true);
415
        pop.setOutsideTouchable(true);
416
        pop.setContentView(view);
417
418
419
        final RelativeLayout parent = (RelativeLayout) view.findViewById(R.id.parent);
420
        Button bt1 = (Button) view.findViewById(R.id.item_popupwindows_camera);
421
        Button bt2 = (Button) view.findViewById(R.id.item_popupwindows_Photo);
422
        Button bt3 = (Button) view.findViewById(R.id.item_popupwindows_cancel);
423
        parent.setOnClickListener(new OnClickListener() {
424
425
            @Override
426
            public void onClick(View v) {
427
                // TODO Auto-generated method stub
428
                pop.dismiss();
429
                ll_popup.clearAnimation();
430
            }
431
        });
432
        bt1.setOnClickListener(new OnClickListener() {
433
            public void onClick(View v) {
434
                pop.dismiss();
435
                ll_popup.clearAnimation();
436
                if (MainScanActivity.isCameraUseable()) {
437
                    photo();
438
                } else {
439
                    ToastUtil.showToast(getApplicationContext(), "您当前关闭了调用摄像头权限", Toast.LENGTH_SHORT);
440
                }
441
            }
442
        });
443
        bt2.setOnClickListener(new OnClickListener() {
444
            public void onClick(View v) {
445
                Intent intent = new Intent(PublishPicTopicActivity.this,
446
                        AlbumActivityFeedback.class);
447
                startActivity(intent);
448
                overridePendingTransition(R.anim.activity_translate_in, R.anim.activity_translate_out);
449
                pop.dismiss();
450
                ll_popup.clearAnimation();
451
            }
452
        });
453
        bt3.setOnClickListener(new OnClickListener() {
454
            public void onClick(View v) {
455
                pop.dismiss();
456
                ll_popup.clearAnimation();
457
            }
458
        });
459
460
        noScrollgridview = (GridView) findViewById(R.id.noScrollgridview);
389
        noScrollgridview = (GridView) findViewById(R.id.noScrollgridview);
461
        noScrollgridview.setSelector(new ColorDrawable(Color.TRANSPARENT));
390
        noScrollgridview.setSelector(new ColorDrawable(Color.TRANSPARENT));
462
        adapter = new GridAdapter(this);
391
        adapter = new GridAdapter(this);
487
     */
416
     */
488
    private void callGallery() {
417
    private void callGallery() {
489
        MobclickAgent.onEvent(getApplicationContext(), "1024");
418
        MobclickAgent.onEvent(getApplicationContext(), "1024");
490
        Matisse.from(PublishPicTopicActivity.this)
491
                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
492
                .showSingleMediaType(true)
493
                .countable(true)
494
                .maxSelectable(PIC_NUM - Bimp.tempSelectBitmap.size())
495
                .capture(true)
496
                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
497
                .imageEngine(new GlideEngine())
419
//        Matisse.from(PublishPicTopicActivity.this)
420
//                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
421
//                .showSingleMediaType(true)
422
//                .countable(true)
423
//                .maxSelectable(PIC_NUM - Bimp.tempSelectBitmap.size())
424
//                .capture(true)
425
//                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
426
//                .imageEngine(new GlideEngine())
427
//                .forResult(REQUEST_CODE_CHOOSE);
428
        PictureSelector.create(this)
429
                .openGallery(PictureMimeType.ofImage())
430
                .maxSelectNum(PIC_NUM)
431
                .selectionData(mSelectionData)//是否传入已选图片
432
                .selectionMode(PictureConfig.MULTIPLE)
433
                .isCompress(true)//是否压缩
434
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
435
                .isGif(true)//是否显示gif
436
                .isAndroidQTransform(true)
437
                .imageEngine(GlideEngine.createGlideEngine())
438
                .isWeChatStyle(false)// 是否开启微信图片选择风格
439
                .isUseCustomCamera(false)// 是否使用自定义相机
440
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
441
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
442
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
443
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
444
                .imageSpanCount(4)// 每行显示个数
445
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
446
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
498
                .forResult(REQUEST_CODE_CHOOSE);
447
                .forResult(REQUEST_CODE_CHOOSE);
448
499
    }
449
    }
500
450
501
    @Override
451
    @Override
533
            @Override
483
            @Override
534
            public void subscribe(ObservableEmitter<String> subscriber) throws Exception {
484
            public void subscribe(ObservableEmitter<String> subscriber) throws Exception {
535
                try {
485
                try {
536
                    List<Uri> uriList = Matisse.obtainResult(data);
486
//                    List<Uri> uriList = Matisse.obtainResult(data);
487
                    mSelectionData= PictureSelector.obtainMultipleResult(data);
488
537
                    int i = 0;
489
                    int i = 0;
538
                    for (Uri uri : uriList) {
490
                    for (LocalMedia localMedia : mSelectionData) {
539
                        i++;
491
                        i++;
540
                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
541
                        File file = FileUtils.from(PublishPicTopicActivity.this, uri);
542
543
                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
544
                        bitmap = imageZoom(bitmap);
492
//                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
493
//                        File file = FileUtils.from(PublishPicTopicActivity.this, uri);
494
//
495
//                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
496
//                        bitmap = imageZoom(bitmap);
545
                        ImageItem takePhoto = new ImageItem();
497
                        ImageItem takePhoto = new ImageItem();
546
                        String deviceId = JPushInterface.getUdid(MainApplication.context);
547
                        takePhoto.fName = DateUtils.getSimpleCurrentDate();
548
                        if (TextUtils.isEmpty(deviceId)) {
549
                            takePhoto.fName += "_" + Util.getRandom(15);
550
                        } else {
551
                            takePhoto.fName += "_" + deviceId;
498
//                        String deviceId = JPushInterface.getUdid(MainApplication.context);
499
//                        takePhoto.fName = DateUtils.getSimpleCurrentDate();
500
//                        if (TextUtils.isEmpty(deviceId)) {
501
//                            takePhoto.fName += "_" + Util.getRandom(15);
502
//                        } else {
503
//                            takePhoto.fName += "_" + deviceId;
504
//                        }
505
//                        takePhoto.fName += "_00" + i;
506
//
507
//                        String filePath = file.getAbsolutePath();
508
//                        String suffix = filePath.substring(filePath.lastIndexOf(".") + 1);
509
//                        takePhoto.fName += "." + suffix;
510
                        String path="";
511
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
512
                            path= localMedia.getAndroidQToPath();
513
                        }else{
514
                            path=localMedia.getPath();
552
                        }
515
                        }
553
                        takePhoto.fName += "_00" + i;
554
555
                        String filePath = file.getAbsolutePath();
556
                        String suffix = filePath.substring(filePath.lastIndexOf(".") + 1);
557
                        takePhoto.fName += "." + suffix;
558
                        takePhoto.setBitmap(bitmap);
559
                        takePhoto.setFile(file);
516
                        takePhoto.setBitmap(imageZoom(BitmapFactory.decodeFile(path)));
517
                        takePhoto.setFile(new File(path));
560
                        Bimp.tempSelectBitmap.add(takePhoto);
518
                        Bimp.tempSelectBitmap.add(takePhoto);
561
                        subscriber.onNext("");
519
                        subscriber.onNext("");
562
                    }
520
                    }
738
        }
696
        }
739
    }
697
    }
740
698
741
    public void photo() {
742
        if (hasSdcard()) {
743
            int currentapiVersion = Build.VERSION.SDK_INT;
744
            Log.e("currentapiVersion", "currentapiVersion====>" + currentapiVersion);
745
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
746
            intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
747
            startActivityForResult(intent, PHOTO_REQUEST_CAMERA);
748
        }
749
    }
750
699
751
    @Override
700
    @Override
752
    protected void onRestart() {
701
    protected void onRestart() {

+ 5 - 5
app/src/main/java/com/electric/chargingpile/activity/PublishVideoTopicActivity.java

11
import android.graphics.Color;
11
import android.graphics.Color;
12
import android.net.Uri;
12
import android.net.Uri;
13
import android.os.Bundle;
13
import android.os.Bundle;
14
import android.os.Environment;
15
import android.text.Editable;
14
import android.text.Editable;
16
import android.text.Html;
15
import android.text.Html;
17
import android.text.TextUtils;
16
import android.text.TextUtils;
43
import com.electric.chargingpile.util.CommonParams;
42
import com.electric.chargingpile.util.CommonParams;
44
import com.electric.chargingpile.util.DateUtils;
43
import com.electric.chargingpile.util.DateUtils;
45
import com.electric.chargingpile.util.JsonUtils;
44
import com.electric.chargingpile.util.JsonUtils;
45
import com.electric.chargingpile.util.PhotoUtils;
46
import com.electric.chargingpile.util.ToastUtil;
46
import com.electric.chargingpile.util.ToastUtil;
47
import com.electric.chargingpile.util.Util;
47
import com.electric.chargingpile.util.Util;
48
import com.luck.picture.lib.PictureSelector;
48
import com.luck.picture.lib.PictureSelector;
66
66
67
import cn.jpush.android.api.JPushInterface;
67
import cn.jpush.android.api.JPushInterface;
68
import okhttp3.Call;
68
import okhttp3.Call;
69
69
@Deprecated
70
public class PublishVideoTopicActivity extends Activity implements OnClickListener {
70
public class PublishVideoTopicActivity extends Activity implements OnClickListener {
71
    private static final String TAG = "PublishVideoTopicActivity";
71
    private static final String TAG = "PublishVideoTopicActivity";
72
    Context mContext;
72
    Context mContext;
85
    private String fileName;
85
    private String fileName;
86
86
87
87
88
    public static final String CACHE_DIR = Environment.getExternalStorageDirectory().getAbsolutePath() + "/cdz";
88
    public static final String CACHE_DIR = PhotoUtils.CACHE_DIR;
89
89
90
90
91
    public static final String IMAGE_CACHE = CACHE_DIR + "/cache/image/";
91
    public static final String IMAGE_CACHE = CACHE_DIR + "/cache/image/";
241
                        .imageEngine(GlideEngine.createGlideEngine())
241
                        .imageEngine(GlideEngine.createGlideEngine())
242
                        .theme(R.style.picture_white_style)// 主题样式设置 具体参考 values/styles   用法:R.style.picture.white.style v2.3.3后 建议使用setPictureStyle()动态方式
242
                        .theme(R.style.picture_white_style)// 主题样式设置 具体参考 values/styles   用法:R.style.picture.white.style v2.3.3后 建议使用setPictureStyle()动态方式
243
                        .isWeChatStyle(false)// 是否开启微信图片选择风格
243
                        .isWeChatStyle(false)// 是否开启微信图片选择风格
244
                        .isUseCustomCamera(true)// 是否使用自定义相机
244
                        .isUseCustomCamera(false)// 是否使用自定义相机
245
                        .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
245
                        .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
246
                        .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
246
                        .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
247
//                        .setPictureWindowAnimationStyle(mWindowAnimationStyle)// 自定义相册启动退出动画
247
//                        .setPictureWindowAnimationStyle(mWindowAnimationStyle)// 自定义相册启动退出动画
454
                }
454
                }
455
455
456
                Glide.with(this)
456
                Glide.with(this)
457
                        .load(Uri.fromFile(new File(videoPath)))
457
                        .load(videoPath)
458
                        .apply(new RequestOptions().centerCrop())
458
                        .apply(new RequestOptions().centerCrop())
459
                        .into(mItemVideo);
459
                        .into(mItemVideo);
460
                mItemVideoLl.setVisibility(View.VISIBLE);
460
                mItemVideoLl.setVisibility(View.VISIBLE);

+ 0 - 135
app/src/main/java/com/electric/chargingpile/activity/QRChargingActivity.java

1
package com.electric.chargingpile.activity;
2
3
import android.content.Intent;
4
import android.os.Bundle;
5
import androidx.fragment.app.FragmentActivity;
6
import androidx.viewpager.widget.ViewPager;
7
import android.view.View;
8
import android.widget.ImageView;
9
import android.widget.TextView;
10
11
import com.electric.chargingpile.R;
12
import com.electric.chargingpile.adapter.ViewPagerFragmentAdapter;
13
import com.electric.chargingpile.fragment.AnCiFragment;
14
import com.electric.chargingpile.fragment.YueFragment;
15
import com.electric.chargingpile.util.BarColorUtil;
16
import com.zhy.autolayout.AutoLayout;
17
18
public class QRChargingActivity extends FragmentActivity implements View.OnClickListener {
19
    private ImageView iv_back;
20
    private TextView tv_sure, tv_yue, tv_anci;
21
    private ViewPager viewPager;
22
    private AnCiFragment anCiFragment;
23
    private YueFragment yueFragment;
24
    private ViewPagerFragmentAdapter adapter;
25
    private MyListener listener = new MyListener();
26
27
    @Override
28
    protected void onCreate(Bundle savedInstanceState) {
29
        super.onCreate(savedInstanceState);
30
        AutoLayout.getInstance().auto(this);
31
        setContentView(R.layout.activity_qrcharging);
32
        BarColorUtil.initStatusBarColor(QRChargingActivity.this);
33
34
        initViews();
35
    }
36
37
    private void initViews() {
38
        iv_back = (ImageView) findViewById(R.id.iv_back);
39
        iv_back.setOnClickListener(this);
40
        tv_sure = (TextView) findViewById(R.id.tv_sure);
41
        tv_sure.setOnClickListener(this);
42
        tv_yue = (TextView) findViewById(R.id.tv_yue);
43
        tv_yue.setOnClickListener(this);
44
        tv_anci = (TextView) findViewById(R.id.tv_anci);
45
        tv_anci.setOnClickListener(this);
46
        viewPager = (ViewPager) findViewById(R.id.viewPager);
47
        yueFragment = new YueFragment();
48
        anCiFragment = new AnCiFragment();
49
        adapter = new ViewPagerFragmentAdapter(getSupportFragmentManager());
50
51
        adapter.addFragment(yueFragment);
52
        adapter.addFragment(anCiFragment);
53
54
        viewPager.setOffscreenPageLimit(2);
55
        viewPager.setOnPageChangeListener(listener);
56
        viewPager.setAdapter(adapter);
57
    }
58
59
    @Override
60
    public void onClick(View v) {
61
        switch (v.getId()) {
62
            case R.id.iv_back:
63
                finish();
64
                break;
65
            case R.id.tv_sure:
66
                startActivity(new Intent(getApplication(), ChargingStatusActivity.class));
67
                break;
68
            case R.id.tv_yue:
69
                viewPager.setCurrentItem(0);
70
//                AnCiFragment.cost_way = "";
71
//                AnCiFragment.cost_num = "";
72
//                AnCiFragment.tv_10.setTextColor(getResources().getColor(R.color.ui_65));
73
//                AnCiFragment.tv_20.setTextColor(getResources().getColor(R.color.ui_65));
74
//                AnCiFragment.tv_30.setTextColor(getResources().getColor(R.color.ui_65));
75
//                AnCiFragment.tv_10.setBackgroundResource(R.drawable.bg_huikuang);
76
//                AnCiFragment.tv_20.setBackgroundResource(R.drawable.bg_huikuang);
77
//                AnCiFragment.tv_30.setBackgroundResource(R.drawable.bg_huikuang);
78
//                AnCiFragment.iv_weixin.setImageResource(R.drawable.icon_wugou);
79
//                AnCiFragment.iv_zhifubao.setImageResource(R.drawable.icon_wugou);
80
//                AnCiFragment.et_costnum.setText("");
81
                break;
82
            case R.id.tv_anci:
83
                viewPager.setCurrentItem(1);
84
                break;
85
            default:
86
                break;
87
        }
88
    }
89
90
    public class MyListener implements ViewPager.OnPageChangeListener {
91
92
        @Override
93
        public void onPageScrollStateChanged(int arg0) {
94
95
        }
96
97
        @Override
98
        public void onPageScrolled(int position, float positionOffset,
99
                                   int positionOffsetPixels) {
100
//            resetViewPagerHeight(position);
101
        }
102
103
        @Override
104
        public void onPageSelected(int position) {
105
            // 页面切换后重置ViewPager高度
106
//            resetViewPagerHeight(position);
107
            setBackground(position);
108
        }
109
    }
110
111
    private void setBackground(int left) {
112
        if (left == 0) {
113
            tv_yue.setBackgroundResource(R.drawable.bg_lv);
114
            tv_anci.setBackgroundResource(R.drawable.bg_hui);
115
            tv_yue.setTextColor(getResources().getColor(R.color.lvse));
116
            tv_anci.setTextColor(getResources().getColor(R.color.ui_62));
117
        } else if (left == 1) {
118
            tv_anci.setBackgroundResource(R.drawable.bg_lv);
119
            tv_yue.setBackgroundResource(R.drawable.bg_hui);
120
            tv_yue.setTextColor(getResources().getColor(R.color.ui_62));
121
            tv_anci.setTextColor(getResources().getColor(R.color.lvse));
122
        }
123
124
    }
125
126
    @Override
127
    protected void onResume() {
128
        super.onResume();
129
    }
130
131
    @Override
132
    protected void onPause() {
133
        super.onPause();
134
    }
135
}

+ 31 - 10
app/src/main/java/com/electric/chargingpile/activity/RoutePlanMapActivity.java

2
2
3
import android.animation.ValueAnimator;
3
import android.animation.ValueAnimator;
4
import android.app.Activity;
4
import android.app.Activity;
5
import android.content.ContentResolver;
6
import android.content.ContentValues;
5
import android.content.Context;
7
import android.content.Context;
6
import android.content.DialogInterface;
8
import android.content.DialogInterface;
7
import android.content.Intent;
9
import android.content.Intent;
18
import android.graphics.drawable.BitmapDrawable;
20
import android.graphics.drawable.BitmapDrawable;
19
import android.graphics.drawable.Drawable;
21
import android.graphics.drawable.Drawable;
20
import android.net.Uri;
22
import android.net.Uri;
23
import android.os.Build;
21
import android.os.Bundle;
24
import android.os.Bundle;
22
import android.os.Environment;
23
import android.os.Handler;
25
import android.os.Handler;
24
import android.provider.MediaStore;
26
import android.provider.MediaStore;
25
27
51
import com.amap.api.maps.CameraUpdateFactory;
53
import com.amap.api.maps.CameraUpdateFactory;
52
import com.amap.api.maps.LocationSource;
54
import com.amap.api.maps.LocationSource;
53
import com.amap.api.maps.MapView;
55
import com.amap.api.maps.MapView;
54
import com.amap.api.maps.UiSettings;
56
55
import com.amap.api.maps.model.BitmapDescriptorFactory;
57
import com.amap.api.maps.model.BitmapDescriptorFactory;
56
import com.amap.api.maps.model.CameraPosition;
58
import com.amap.api.maps.model.CameraPosition;
57
import com.amap.api.maps.model.LatLng;
59
import com.amap.api.maps.model.LatLng;
109
import com.electric.chargingpile.util.DensityUtil;
111
import com.electric.chargingpile.util.DensityUtil;
110
import com.electric.chargingpile.util.JsonUtils;
112
import com.electric.chargingpile.util.JsonUtils;
111
import com.electric.chargingpile.util.LoadingDialog;
113
import com.electric.chargingpile.util.LoadingDialog;
114
import com.electric.chargingpile.util.PhotoUtils;
112
import com.electric.chargingpile.util.ToastUtil;
115
import com.electric.chargingpile.util.ToastUtil;
113
import com.electric.chargingpile.util.Util;
116
import com.electric.chargingpile.util.Util;
114
import com.electric.chargingpile.view.MyAutoLayout;
117
import com.electric.chargingpile.view.MyAutoLayout;
127
import java.io.FileNotFoundException;
130
import java.io.FileNotFoundException;
128
import java.io.FileOutputStream;
131
import java.io.FileOutputStream;
129
import java.io.IOException;
132
import java.io.IOException;
133
import java.io.OutputStream;
130
import java.net.URLEncoder;
134
import java.net.URLEncoder;
131
import java.text.SimpleDateFormat;
135
import java.text.SimpleDateFormat;
132
import java.util.ArrayList;
136
import java.util.ArrayList;
2578
                    return;
2582
                    return;
2579
                }
2583
                }
2580
                try {
2584
                try {
2581
                    FileOutputStream fos = new FileOutputStream(Environment.getExternalStorageDirectory() + "/test_" + sdf.format(new Date()) + ".png");
2585
                    FileOutputStream fos = new FileOutputStream(PhotoUtils.CACHE_DIR + "/test_" + sdf.format(new Date()) + ".png");
2582
                    try {
2586
                    try {
2583
                        fos.flush();
2587
                        fos.flush();
2584
                    } catch (IOException e) {
2588
                    } catch (IOException e) {
2605
        paramsToShare.setTitle(null);
2609
        paramsToShare.setTitle(null);
2606
        paramsToShare.setTitleUrl(null);
2610
        paramsToShare.setTitleUrl(null);
2607
        paramsToShare.setUrl("http://a.app.qq.com/o/simple.jsp?pkgname=com.electric.chargingpile");
2611
        paramsToShare.setUrl("http://a.app.qq.com/o/simple.jsp?pkgname=com.electric.chargingpile");
2608
        paramsToShare.setImagePath(Environment.getExternalStorageDirectory() + File.separator + "d1ev/share.png");
2612
        paramsToShare.setImagePath(PhotoUtils.CACHE_DIR + File.separator + "d1ev/share.png");
2609
        paramsToShare.setShareType(Platform.SHARE_IMAGE);
2613
        paramsToShare.setShareType(Platform.SHARE_IMAGE);
2610
        Platform platform = ShareSDK.getPlatform(name);
2614
        Platform platform = ShareSDK.getPlatform(name);
2611
        platform.setPlatformActionListener(new PlatformActionListener() {
2615
        platform.setPlatformActionListener(new PlatformActionListener() {
2738
    }
2742
    }
2739
2743
2740
    public void saveBitmap(Bitmap mBitmap) {
2744
    public void saveBitmap(Bitmap mBitmap) {
2745
2741
        LogUtils.e(mBitmap.getByteCount());
2746
        LogUtils.e(mBitmap.getByteCount());
2742
        String dir_path = Environment.getExternalStorageDirectory() + File.separator + "d1ev/";
2747
        String dir_path = PhotoUtils.CACHE_DIR+ "d1ev/";
2743
        File directory = new File(dir_path);
2748
        File directory = new File(dir_path);
2744
        File f = new File(directory, "share.png");
2749
        File f = new File(directory, "share.png");
2745
        try {
2750
        try {
2767
        } catch (IOException e) {
2772
        } catch (IOException e) {
2768
            e.printStackTrace();
2773
            e.printStackTrace();
2769
        }
2774
        }
2770
        MediaStore.Images.Media.insertImage(getContentResolver(), mBitmap, "", "");
2771
        Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
2772
        Uri uri = Uri.fromFile(new File(dir_path));
2773
        intent.setData(uri);
2774
        getApplicationContext().sendBroadcast(intent);
2775
2776
        ContentResolver contentResolver = MainApplication.context.getContentResolver();
2777
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
2778
            Uri insert = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new ContentValues());
2779
            try {
2780
                OutputStream outputStream =  contentResolver.openOutputStream(insert);
2781
                if (outputStream!=null){
2782
                    mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
2783
                }
2784
            } catch (FileNotFoundException e) {
2785
                e.printStackTrace();
2786
            }
2787
2788
        }else{
2789
            MediaStore.Images.Media.insertImage(contentResolver, mBitmap, "", "");
2790
            Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
2791
            Uri uri = PhotoUtils.parseUri(new File(dir_path));
2792
            intent.setData(uri);
2793
            getApplicationContext().sendBroadcast(intent);
2794
        }
2795
2775
    }
2796
    }
2776
2797
2777
2798

+ 58 - 160
app/src/main/java/com/electric/chargingpile/activity/ShareTwoActivity.java

12
import android.graphics.BitmapFactory;
12
import android.graphics.BitmapFactory;
13
import android.graphics.Color;
13
import android.graphics.Color;
14
import android.graphics.Matrix;
14
import android.graphics.Matrix;
15
import android.graphics.drawable.BitmapDrawable;
16
import android.graphics.drawable.ColorDrawable;
15
import android.graphics.drawable.ColorDrawable;
17
import android.net.Uri;
16
import android.os.Build;
18
import android.os.Bundle;
17
import android.os.Bundle;
19
import android.os.Environment;
20
import android.os.Handler;
18
import android.os.Handler;
21
import android.os.Message;
19
import android.os.Message;
22
import android.provider.MediaStore;
23
24
import androidx.annotation.NonNull;
25
import androidx.constraintlayout.widget.ConstraintLayout;
26
import androidx.core.content.FileProvider;
27
28
import android.util.Base64;
20
import android.util.Base64;
29
import android.util.Log;
21
import android.util.Log;
30
import android.view.KeyEvent;
22
import android.view.KeyEvent;
49
import android.widget.Toast;
41
import android.widget.Toast;
50
import android.widget.ToggleButton;
42
import android.widget.ToggleButton;
51
43
44
import androidx.annotation.NonNull;
45
import androidx.constraintlayout.widget.ConstraintLayout;
46
52
import com.electric.chargingpile.R;
47
import com.electric.chargingpile.R;
53
import com.electric.chargingpile.application.MainApplication;
48
import com.electric.chargingpile.application.MainApplication;
54
import com.electric.chargingpile.data.OperatorData;
49
import com.electric.chargingpile.data.OperatorData;
55
import com.electric.chargingpile.data.Zhan;
50
import com.electric.chargingpile.data.Zhan;
51
import com.electric.chargingpile.engine.GlideEngine;
56
import com.electric.chargingpile.manager.ProfileManager;
52
import com.electric.chargingpile.manager.ProfileManager;
57
import com.electric.chargingpile.util.BarColorUtil;
53
import com.electric.chargingpile.util.BarColorUtil;
58
import com.electric.chargingpile.util.Bimp;
54
import com.electric.chargingpile.util.Bimp;
59
import com.electric.chargingpile.util.DES3;
55
import com.electric.chargingpile.util.DES3;
60
import com.electric.chargingpile.util.DensityUtil;
56
import com.electric.chargingpile.util.DensityUtil;
61
import com.electric.chargingpile.util.FileUtils;
62
import com.electric.chargingpile.util.ImageItem;
57
import com.electric.chargingpile.util.ImageItem;
63
import com.electric.chargingpile.util.ImageUtils;
64
import com.electric.chargingpile.util.JsonUtils;
58
import com.electric.chargingpile.util.JsonUtils;
65
import com.electric.chargingpile.util.OkHttpUtil;
59
import com.electric.chargingpile.util.OkHttpUtil;
66
import com.electric.chargingpile.util.PublicWayFour;
60
import com.electric.chargingpile.util.PublicWayFour;
68
import com.electric.chargingpile.util.SharedPreferencesUtil;
62
import com.electric.chargingpile.util.SharedPreferencesUtil;
69
import com.electric.chargingpile.util.ToastUtil;
63
import com.electric.chargingpile.util.ToastUtil;
70
import com.electric.chargingpile.util.UploadUtil;
64
import com.electric.chargingpile.util.UploadUtil;
65
import com.electric.chargingpile.util.Util;
71
import com.electric.chargingpile.view.CustomProgressDialog;
66
import com.electric.chargingpile.view.CustomProgressDialog;
72
import com.electric.chargingpile.view.ShareDialog;
67
import com.electric.chargingpile.view.ShareDialog;
73
import com.google.gson.Gson;
68
import com.google.gson.Gson;
74
import com.google.gson.reflect.TypeToken;
69
import com.google.gson.reflect.TypeToken;
70
import com.luck.picture.lib.PictureSelector;
71
import com.luck.picture.lib.animators.AnimationType;
72
import com.luck.picture.lib.config.PictureConfig;
73
import com.luck.picture.lib.config.PictureMimeType;
74
import com.luck.picture.lib.entity.LocalMedia;
75
import com.squareup.okhttp.Request;
75
import com.squareup.okhttp.Request;
76
import com.squareup.okhttp.Response;
76
import com.squareup.okhttp.Response;
77
import com.zhihu.matisse.Matisse;
78
import com.zhihu.matisse.MimeType;
79
import com.zhihu.matisse.engine.impl.GlideEngine;
80
import com.zhihu.matisse.internal.entity.CaptureStrategy;
81
import com.zhy.http.okhttp.OkHttpUtils;
77
import com.zhy.http.okhttp.OkHttpUtils;
82
import com.zhy.http.okhttp.callback.StringCallback;
78
import com.zhy.http.okhttp.callback.StringCallback;
83
79
86
82
87
import java.io.ByteArrayInputStream;
83
import java.io.ByteArrayInputStream;
88
import java.io.ByteArrayOutputStream;
84
import java.io.ByteArrayOutputStream;
89
import java.io.File;
90
import java.io.IOException;
85
import java.io.IOException;
91
import java.text.DecimalFormat;
86
import java.text.DecimalFormat;
92
import java.util.ArrayList;
87
import java.util.ArrayList;
118
    private TimePickerDialog tpd_close = null;
113
    private TimePickerDialog tpd_close = null;
119
    private String camePath;//拍照路径
114
    private String camePath;//拍照路径
120
115
121
    private static final String PHOTO_FILE_NAME = "android.jpg";
122
    private static final String PHOTO_FILE_PATH = getPath(Environment.getExternalStorageDirectory() + "/" + "cdz");
123
    private File tempFile;
116
117
124
    private static final int PHOTO_REQUEST_CAMERA = 1;
118
    private static final int PHOTO_REQUEST_CAMERA = 1;
125
    private static final int PHOTO_REQUEST_GALLERY = 2;
119
    private static final int PHOTO_REQUEST_GALLERY = 2;
126
    private static final int PHOTO_REQUEST_CUT = 3;
120
    private static final int PHOTO_REQUEST_CUT = 3;
169
    private GridView noScrollgridview;
163
    private GridView noScrollgridview;
170
    private GridAdapter adapter;
164
    private GridAdapter adapter;
171
    private View parentView;
165
    private View parentView;
172
    private PopupWindow pop = null;
173
    private LinearLayout ll_popup;
166
174
    private TextView open_time, close_time, share_list;
167
    private TextView open_time, close_time, share_list;
175
    private RelativeLayout rl_address;
168
    private RelativeLayout rl_address;
176
    private ProgressDialog insertDialog;
169
    private ProgressDialog insertDialog;
265
    @Override
258
    @Override
266
    protected void onCreate(Bundle savedInstanceState) {
259
    protected void onCreate(Bundle savedInstanceState) {
267
        super.onCreate(savedInstanceState);
260
        super.onCreate(savedInstanceState);
268
        tempFile = getFile(PHOTO_FILE_PATH + "/" + PHOTO_FILE_NAME);
269
        Res.init(this);
261
        Res.init(this);
270
        bimap = BitmapFactory.decodeResource(
262
        bimap = BitmapFactory.decodeResource(
271
                getResources(),
263
                getResources(),
323
        selectBitmap[2] = null;
315
        selectBitmap[2] = null;
324
        selectBitmap[3] = null;
316
        selectBitmap[3] = null;
325
317
326
        pop = new PopupWindow(ShareTwoActivity.this);
327
328
        View view = getLayoutInflater().inflate(R.layout.item_popupwindows, null);
329
330
        ll_popup = (LinearLayout) view.findViewById(R.id.ll_popup);
331
332
        pop.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
333
        pop.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
334
        pop.setBackgroundDrawable(new BitmapDrawable());
335
        pop.setFocusable(true);
336
        pop.setOutsideTouchable(true);
337
        pop.setContentView(view);
338
339
        final RelativeLayout parent = (RelativeLayout) view.findViewById(R.id.parent);
340
        Button bt1 = (Button) view
341
                .findViewById(R.id.item_popupwindows_camera);
342
        Button bt2 = (Button) view
343
                .findViewById(R.id.item_popupwindows_Photo);
344
        Button bt3 = (Button) view
345
                .findViewById(R.id.item_popupwindows_cancel);
346
        parent.setOnClickListener(new View.OnClickListener() {
347
348
            @Override
349
            public void onClick(View v) {
350
                // TODO Auto-generated method stub
351
                pop.dismiss();
352
                ll_popup.clearAnimation();
353
            }
354
        });
355
        bt1.setOnClickListener(new View.OnClickListener() {
356
            public void onClick(View v) {
357
                pop.dismiss();
358
                ll_popup.clearAnimation();
359
360
                if (MainScanActivity.isCameraUseable()) {
361
                    photo();
362
                } else {
363
                    ToastUtil.showToast(getApplicationContext(), "您当前关闭了调用摄像头权限,可前往设置开启权限", Toast.LENGTH_SHORT);
364
                }
365
366
            }
367
        });
368
        bt2.setOnClickListener(new View.OnClickListener() {
369
            public void onClick(View v) {
370
                Intent intent = new Intent(ShareTwoActivity.this,
371
                        AlbumActivity.class);
372
                startActivity(intent);
373
                overridePendingTransition(R.anim.activity_translate_in, R.anim.activity_translate_out);
374
//                startActivityForResult(intent, 1);
375
                pop.dismiss();
376
                ll_popup.clearAnimation();
377
            }
378
        });
379
        bt3.setOnClickListener(new View.OnClickListener() {
380
            public void onClick(View v) {
381
                pop.dismiss();
382
                ll_popup.clearAnimation();
383
            }
384
        });
385
318
386
        noScrollgridview = (GridView) findViewById(R.id.noScrollgridview);
319
        noScrollgridview = (GridView) findViewById(R.id.noScrollgridview);
387
        noScrollgridview.setSelector(new ColorDrawable(Color.TRANSPARENT));
320
        noScrollgridview.setSelector(new ColorDrawable(Color.TRANSPARENT));
411
     * 调用图库选择
344
     * 调用图库选择
412
     */
345
     */
413
    private void callGallery() {
346
    private void callGallery() {
347
/*
414
        Matisse.from(ShareTwoActivity.this)
348
        Matisse.from(ShareTwoActivity.this)
415
                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
349
                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
416
                .showSingleMediaType(true)
350
                .showSingleMediaType(true)
420
                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
354
                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
421
                .imageEngine(new GlideEngine())
355
                .imageEngine(new GlideEngine())
422
                .forResult(REQUEST_CODE_CHOOSE);
356
                .forResult(REQUEST_CODE_CHOOSE);
357
*/
358
        PictureSelector.create(this)
359
                .openGallery(PictureMimeType.ofImage())
360
                .selectionMode(PictureConfig.SINGLE)
361
                .isCompress(true)//是否压缩
362
                .isSingleDirectReturn(true)
363
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
364
                .isGif(true)//是否显示gif
365
                .isAndroidQTransform(true)
366
                .imageEngine(GlideEngine.createGlideEngine())
367
                .isWeChatStyle(false)// 是否开启微信图片选择风格
368
                .isUseCustomCamera(false)// 是否使用自定义相机
369
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
370
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
371
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
372
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
373
                .imageSpanCount(4)// 每行显示个数
374
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
375
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
376
                .forResult(REQUEST_CODE_CHOOSE);
423
    }
377
    }
424
378
425
    @Override
379
    @Override
449
            public void subscribe(ObservableEmitter<String> subscriber) throws Exception {
403
            public void subscribe(ObservableEmitter<String> subscriber) throws Exception {
450
404
451
                try {
405
                try {
452
                    List<Uri> uriList = Matisse.obtainResult(data);
453
                    Uri uri = uriList.get(0);
454
                    Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
455
                    File file = FileUtils.from(ShareTwoActivity.this, uri);
456
457
                    bitmap = FileUtils.rotateIfRequired(file, bitmap);
458
                    bitmap = imageZoom(bitmap);
406
                    List<LocalMedia> mediaList = PictureSelector.obtainMultipleResult(data);
407
                    if (mediaList!=null && mediaList.size()>0){
408
                       /* List<Uri> uriList = Matisse.obtainResult(data);
409
                        Uri uri = uriList.get(0);
410
                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
411
                        File file = FileUtils.from(ShareTwoActivity.this, uri);
412
413
                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
414
                        bitmap = imageZoom(bitmap);
415
*/
416
                        String path="";
417
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
418
                            path= mediaList.get(0).getAndroidQToPath();
419
                        }else{
420
                            path=mediaList.get(0).getPath();
421
                        }
422
                        ImageItem takePhoto = new ImageItem();
423
                        takePhoto.setBitmap(imageZoom(BitmapFactory.decodeFile(path)));
424
                        selectBitmap[selectIndex] = takePhoto;
459
425
460
                    ImageItem takePhoto = new ImageItem();
461
                    takePhoto.setBitmap(bitmap);
462
                    selectBitmap[selectIndex] = takePhoto;
426
                        subscriber.onNext("");
427
                        subscriber.onComplete();
428
                    }
463
429
464
                    subscriber.onNext("");
465
                    subscriber.onComplete();
466
                } catch (Exception e) {
430
                } catch (Exception e) {
467
                    e.printStackTrace();
431
                    e.printStackTrace();
468
                    subscriber.onError(e);
432
                    subscriber.onError(e);
1156
1120
1157
    private static final int TAKE_PICTURE = 0x000001;
1121
    private static final int TAKE_PICTURE = 0x000001;
1158
1122
1159
    public void photo() {
1160
        if (hasSdcard()) {
1161
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
1162
            Uri photoURI = FileProvider.getUriForFile(getApplicationContext(), getApplicationContext().getPackageName() + ".provider", tempFile);
1163
            intent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
1164
            startActivityForResult(intent, PHOTO_REQUEST_CAMERA);
1165
        }
1166
    }
1167
1168
1123
1169
    @Override
1124
    @Override
1170
    protected void onDestroy() {
1125
    protected void onDestroy() {
1172
        Bimp.max = 0;
1127
        Bimp.max = 0;
1173
        super.onDestroy();
1128
        super.onDestroy();
1174
    }
1129
    }
1175
1176
1177
    private Bitmap compressBmpFromBmp(Bitmap image) {
1178
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
1179
        int options = 100;
1180
        image.compress(Bitmap.CompressFormat.JPEG, 60, baos);
1181
        while (baos.toByteArray().length / 1024 > 200) {
1182
            baos.reset();
1183
            options -= 10;
1184
            image.compress(Bitmap.CompressFormat.JPEG, options, baos);
1185
        }
1186
        ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());
1187
        Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);
1188
        return bitmap;
1189
    }
1190
1191
1192
    private void crop(Uri uri, Uri cutImgUri) {
1193
        Intent intent = new Intent("com.android.camera.action.CROP");
1194
        intent.setDataAndType(uri, "image/*");
1195
        intent.putExtra("crop", "true");
1196
        intent.putExtra("outputFormat", "JPEG");
1197
        intent.putExtra("noFaceDetection", true);
1198
        intent.putExtra("return-data", false);
1199
        intent.putExtra(MediaStore.EXTRA_OUTPUT, cutImgUri);
1200
        startActivityForResult(intent, PHOTO_REQUEST_CUT);
1201
    }
1202
1203
    private boolean hasSdcard() {
1204
        if (Environment.getExternalStorageState().equals(
1205
                Environment.MEDIA_MOUNTED)) {
1206
            return true;
1207
        } else {
1208
            return false;
1209
        }
1210
    }
1211
1212
    private static String getPath(String path) {
1213
        File f = new File(path);
1214
        if (!f.exists()) {
1215
            f.mkdirs();
1216
        }
1217
        return f.getAbsolutePath();
1218
    }
1219
1220
    private File getFile(String path) {
1221
        File f = new File(path);
1222
        if (!f.exists()) {
1223
            try {
1224
                f.createNewFile();
1225
            } catch (IOException e) {
1226
                e.printStackTrace();
1227
            }
1228
        }
1229
        return f;
1230
    }
1231
1232
1130
    
1233
    private Bitmap compressImage(Bitmap image) {
1131
    private Bitmap compressImage(Bitmap image) {
1234
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
1132
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
1235
        image.compress(Bitmap.CompressFormat.JPEG, 80, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
1133
        image.compress(Bitmap.CompressFormat.JPEG, 80, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中

+ 63 - 133
app/src/main/java/com/electric/chargingpile/activity/ShareTwoEditActivity.java

13
import android.graphics.drawable.BitmapDrawable;
13
import android.graphics.drawable.BitmapDrawable;
14
import android.graphics.drawable.Drawable;
14
import android.graphics.drawable.Drawable;
15
import android.net.Uri;
15
import android.net.Uri;
16
import android.os.Build;
16
import android.os.Bundle;
17
import android.os.Bundle;
17
import android.os.Environment;
18
import android.os.Handler;
18
import android.os.Handler;
19
import android.os.Message;
19
import android.os.Message;
20
import android.provider.MediaStore;
20
import android.provider.MediaStore;
21
22
import androidx.annotation.NonNull;
23
import androidx.annotation.Nullable;
24
import androidx.constraintlayout.widget.ConstraintLayout;
25
import androidx.core.content.FileProvider;
26
27
import android.util.Base64;
21
import android.util.Base64;
28
import android.util.Log;
22
import android.util.Log;
29
import android.view.KeyEvent;
23
import android.view.KeyEvent;
33
import android.widget.EditText;
27
import android.widget.EditText;
34
import android.widget.ImageView;
28
import android.widget.ImageView;
35
import android.widget.LinearLayout;
29
import android.widget.LinearLayout;
36
import android.widget.PopupWindow;
37
import android.widget.RadioButton;
30
import android.widget.RadioButton;
38
import android.widget.RadioGroup;
31
import android.widget.RadioGroup;
39
import android.widget.RelativeLayout;
32
import android.widget.RelativeLayout;
43
import android.widget.Toast;
36
import android.widget.Toast;
44
import android.widget.ToggleButton;
37
import android.widget.ToggleButton;
45
38
39
import androidx.annotation.NonNull;
40
import androidx.annotation.Nullable;
41
import androidx.constraintlayout.widget.ConstraintLayout;
42
46
import com.bumptech.glide.Glide;
43
import com.bumptech.glide.Glide;
47
import com.bumptech.glide.load.DataSource;
44
import com.bumptech.glide.load.DataSource;
48
import com.bumptech.glide.load.engine.GlideException;
45
import com.bumptech.glide.load.engine.GlideException;
50
import com.bumptech.glide.request.target.Target;
47
import com.bumptech.glide.request.target.Target;
51
import com.electric.chargingpile.R;
48
import com.electric.chargingpile.R;
52
import com.electric.chargingpile.application.MainApplication;
49
import com.electric.chargingpile.application.MainApplication;
53
import com.electric.chargingpile.data.OperatorData;
54
import com.electric.chargingpile.data.Zhan;
50
import com.electric.chargingpile.data.Zhan;
55
import com.electric.chargingpile.manager.ProfileManager;
51
import com.electric.chargingpile.engine.GlideEngine;
56
import com.electric.chargingpile.util.BarColorUtil;
52
import com.electric.chargingpile.util.BarColorUtil;
57
import com.electric.chargingpile.util.DES3;
53
import com.electric.chargingpile.util.DES3;
58
import com.electric.chargingpile.util.DensityUtil;
54
import com.electric.chargingpile.util.DensityUtil;
59
import com.electric.chargingpile.util.FileUtils;
60
import com.electric.chargingpile.util.ImageItem;
55
import com.electric.chargingpile.util.ImageItem;
61
import com.electric.chargingpile.util.ImageUtils;
62
import com.electric.chargingpile.util.JsonUtils;
56
import com.electric.chargingpile.util.JsonUtils;
63
import com.electric.chargingpile.util.OkHttpUtil;
57
import com.electric.chargingpile.util.OkHttpUtil;
64
import com.electric.chargingpile.util.PublicWayFour;
58
import com.electric.chargingpile.util.PublicWayFour;
66
import com.electric.chargingpile.util.SharedPreferencesUtil;
60
import com.electric.chargingpile.util.SharedPreferencesUtil;
67
import com.electric.chargingpile.util.ToastUtil;
61
import com.electric.chargingpile.util.ToastUtil;
68
import com.electric.chargingpile.util.UploadUtil;
62
import com.electric.chargingpile.util.UploadUtil;
63
import com.electric.chargingpile.util.Util;
69
import com.electric.chargingpile.view.CustomProgressDialog;
64
import com.electric.chargingpile.view.CustomProgressDialog;
70
import com.electric.chargingpile.view.ShareDialog;
65
import com.electric.chargingpile.view.ShareDialog;
71
import com.google.gson.Gson;
72
import com.google.gson.reflect.TypeToken;
66
import com.luck.picture.lib.PictureSelector;
67
import com.luck.picture.lib.animators.AnimationType;
68
import com.luck.picture.lib.config.PictureConfig;
69
import com.luck.picture.lib.config.PictureMimeType;
70
import com.luck.picture.lib.entity.LocalMedia;
73
import com.squareup.okhttp.Request;
71
import com.squareup.okhttp.Request;
74
import com.squareup.okhttp.Response;
72
import com.squareup.okhttp.Response;
75
import com.tencent.bugly.crashreport.CrashReport;
73
import com.tencent.bugly.crashreport.CrashReport;
76
import com.zhihu.matisse.Matisse;
77
import com.zhihu.matisse.MimeType;
78
import com.zhihu.matisse.engine.impl.GlideEngine;
79
import com.zhihu.matisse.internal.entity.CaptureStrategy;
80
import com.zhy.http.okhttp.OkHttpUtils;
74
import com.zhy.http.okhttp.OkHttpUtils;
81
import com.zhy.http.okhttp.callback.StringCallback;
75
import com.zhy.http.okhttp.callback.StringCallback;
82
76
86
80
87
import java.io.ByteArrayInputStream;
81
import java.io.ByteArrayInputStream;
88
import java.io.ByteArrayOutputStream;
82
import java.io.ByteArrayOutputStream;
89
import java.io.File;
90
import java.io.IOException;
83
import java.io.IOException;
91
import java.net.URLEncoder;
84
import java.net.URLEncoder;
92
import java.text.DecimalFormat;
85
import java.text.DecimalFormat;
119
    private TimePickerDialog tpd_close = null;
112
    private TimePickerDialog tpd_close = null;
120
    private String camePath;//拍照路径
113
    private String camePath;//拍照路径
121
114
122
    private static final String PHOTO_FILE_NAME = "android.jpg";
123
    private static final String PHOTO_FILE_PATH = getPath(Environment.getExternalStorageDirectory() + "/" + "cdz");
124
    private File tempFile;
115
125
    private static final int PHOTO_REQUEST_CAMERA = 1;
116
    private static final int PHOTO_REQUEST_CAMERA = 1;
126
    private static final int PHOTO_REQUEST_GALLERY = 2;
117
    private static final int PHOTO_REQUEST_GALLERY = 2;
127
    private static final int PHOTO_REQUEST_CUT = 3;
118
    private static final int PHOTO_REQUEST_CUT = 3;
156
    private RadioGroup rg_claimtype, rg_park;
147
    private RadioGroup rg_claimtype, rg_park;
157
    public static Bitmap bimap;
148
    public static Bitmap bimap;
158
    private View parentView;
149
    private View parentView;
159
    private PopupWindow pop = null;
160
    private LinearLayout ll_popup;
150
161
    private TextView open_time, close_time;
151
    private TextView open_time, close_time;
162
    private RelativeLayout rl_address;
152
    private RelativeLayout rl_address;
163
    private ProgressDialog insertDialog;
153
    private ProgressDialog insertDialog;
252
    @Override
242
    @Override
253
    protected void onCreate(Bundle savedInstanceState) {
243
    protected void onCreate(Bundle savedInstanceState) {
254
        super.onCreate(savedInstanceState);
244
        super.onCreate(savedInstanceState);
255
        tempFile = getFile(PHOTO_FILE_PATH + "/" + PHOTO_FILE_NAME);
245
256
        Res.init(this);
246
        Res.init(this);
257
        bimap = BitmapFactory.decodeResource(
247
        bimap = BitmapFactory.decodeResource(
258
                getResources(),
248
                getResources(),
303
        selectBitmap[2] = null;
293
        selectBitmap[2] = null;
304
        selectBitmap[3] = null;
294
        selectBitmap[3] = null;
305
295
306
        pop = new PopupWindow(ShareTwoEditActivity.this);
307
308
        View view = getLayoutInflater().inflate(R.layout.item_popupwindows, null);
309
310
        ll_popup = (LinearLayout) view.findViewById(R.id.ll_popup);
311
312
        pop.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
313
        pop.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
314
        pop.setBackgroundDrawable(new BitmapDrawable());
315
        pop.setFocusable(true);
316
        pop.setOutsideTouchable(true);
317
        pop.setContentView(view);
318
319
        final RelativeLayout parent = (RelativeLayout) view.findViewById(R.id.parent);
320
        Button bt1 = (Button) view
321
                .findViewById(R.id.item_popupwindows_camera);
322
        Button bt2 = (Button) view
323
                .findViewById(R.id.item_popupwindows_Photo);
324
        Button bt3 = (Button) view
325
                .findViewById(R.id.item_popupwindows_cancel);
326
        parent.setOnClickListener(new View.OnClickListener() {
327
328
            @Override
329
            public void onClick(View v) {
330
                // TODO Auto-generated method stub
331
                pop.dismiss();
332
                ll_popup.clearAnimation();
333
            }
334
        });
335
        bt1.setOnClickListener(new View.OnClickListener() {
336
            public void onClick(View v) {
337
                pop.dismiss();
338
                ll_popup.clearAnimation();
339
340
                if (MainScanActivity.isCameraUseable()) {
341
                    photo();
342
                } else {
343
                    ToastUtil.showToast(getApplicationContext(), "您当前关闭了调用摄像头权限,可前往设置开启权限", Toast.LENGTH_SHORT);
344
                }
345
346
            }
347
        });
348
        bt2.setOnClickListener(new View.OnClickListener() {
349
            public void onClick(View v) {
350
                Intent intent = new Intent(ShareTwoEditActivity.this,
351
                        AlbumActivity.class);
352
                startActivity(intent);
353
                overridePendingTransition(R.anim.activity_translate_in, R.anim.activity_translate_out);
354
                pop.dismiss();
355
                ll_popup.clearAnimation();
356
            }
357
        });
358
        bt3.setOnClickListener(new View.OnClickListener() {
359
            public void onClick(View v) {
360
                pop.dismiss();
361
                ll_popup.clearAnimation();
362
            }
363
        });
364
    }
296
    }
365
297
366
    /**
298
    /**
367
     * 调用图库选择
299
     * 调用图库选择
368
     */
300
     */
369
    private void callGallery() {
301
    private void callGallery() {
302
/*
370
        Matisse.from(ShareTwoEditActivity.this)
303
        Matisse.from(ShareTwoEditActivity.this)
371
                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
304
                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
372
                .showSingleMediaType(true)
305
                .showSingleMediaType(true)
376
                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
309
                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
377
                .imageEngine(new GlideEngine())
310
                .imageEngine(new GlideEngine())
378
                .forResult(REQUEST_CODE_CHOOSE);
311
                .forResult(REQUEST_CODE_CHOOSE);
312
*/
313
        PictureSelector.create(this)
314
                .openGallery(PictureMimeType.ofImage())
315
                .selectionMode(PictureConfig.SINGLE)
316
                .isSingleDirectReturn(true)
317
                .isCompress(true)//是否压缩
318
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
319
                .isGif(true)//是否显示gif
320
                .isAndroidQTransform(true)
321
                .imageEngine(GlideEngine.createGlideEngine())
322
                .isWeChatStyle(false)// 是否开启微信图片选择风格
323
                .isUseCustomCamera(false)// 是否使用自定义相机
324
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
325
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
326
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
327
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
328
                .imageSpanCount(4)// 每行显示个数
329
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
330
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
331
                .forResult(REQUEST_CODE_CHOOSE);
332
379
    }
333
    }
380
334
381
    @Override
335
    @Override
404
            @Override
358
            @Override
405
            public void subscribe(ObservableEmitter<String> subscriber) throws Exception {
359
            public void subscribe(ObservableEmitter<String> subscriber) throws Exception {
406
                try {
360
                try {
407
                    List<Uri> uriList = Matisse.obtainResult(data);
408
                    Uri uri = uriList.get(0);
409
                    Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
410
                    File file = FileUtils.from(ShareTwoEditActivity.this, uri);
411
412
                    bitmap = FileUtils.rotateIfRequired(file, bitmap);
413
                    bitmap = imageZoom(bitmap);
414
415
                    ImageItem takePhoto = new ImageItem();
416
                    takePhoto.setBitmap(bitmap);
417
                    selectBitmap[selectIndex] = takePhoto;
418
                    isTakePhoto = true;
361
                    List<LocalMedia> mediaList = PictureSelector.obtainMultipleResult(data);
362
                    if (mediaList!=null && mediaList.size()>0){
363
                      /*  List<Uri> uriList = Matisse.obtainResult(data);
364
                        Uri uri = uriList.get(0);
365
                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
366
                        File file = FileUtils.from(ShareTwoEditActivity.this, uri);
367
368
                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
369
                        bitmap = imageZoom(bitmap);
370
*/
371
                        String path="";
372
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
373
                            path= mediaList.get(0).getAndroidQToPath();
374
                        }else{
375
                            path=mediaList.get(0).getPath();
376
                        }
377
                        ImageItem takePhoto = new ImageItem();
378
                        takePhoto.setBitmap(imageZoom(BitmapFactory.decodeFile(path)));
379
                        selectBitmap[selectIndex] = takePhoto;
380
                        isTakePhoto = true;
381
382
                        subscriber.onNext("");
383
                        subscriber.onComplete();
384
                    }else{
385
                        subscriber.onError(new Exception(""));
386
                    }
419
387
420
                    subscriber.onNext("");
421
                    subscriber.onComplete();
422
                } catch (Exception e) {
388
                } catch (Exception e) {
423
                    e.printStackTrace();
389
                    e.printStackTrace();
424
                    subscriber.onError(e);
390
                    subscriber.onError(e);
1016
982
1017
    private static final int TAKE_PICTURE = 0x000001;
983
    private static final int TAKE_PICTURE = 0x000001;
1018
984
1019
    public void photo() {
1020
        if (hasSdcard()) {
1021
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
1022
            Uri photoURI = FileProvider.getUriForFile(getApplicationContext(), getApplicationContext().getPackageName() + ".provider", tempFile);
1023
            intent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
1024
            startActivityForResult(intent, PHOTO_REQUEST_CAMERA);
1025
        }
1026
    }
1027
1028
985
1029
    @Override
986
    @Override
1030
    protected void onDestroy() {
987
    protected void onDestroy() {
1058
        startActivityForResult(intent, PHOTO_REQUEST_CUT);
1015
        startActivityForResult(intent, PHOTO_REQUEST_CUT);
1059
    }
1016
    }
1060
1017
1061
    private boolean hasSdcard() {
1062
        if (Environment.getExternalStorageState().equals(
1063
                Environment.MEDIA_MOUNTED)) {
1064
            return true;
1065
        } else {
1066
            return false;
1067
        }
1068
    }
1069
1070
    private static String getPath(String path) {
1071
        File f = new File(path);
1072
        if (!f.exists()) {
1073
            f.mkdirs();
1074
        }
1075
        return f.getAbsolutePath();
1076
    }
1077
1018
1078
    private File getFile(String path) {
1079
        File f = new File(path);
1080
        if (!f.exists()) {
1081
            try {
1082
                f.createNewFile();
1083
            } catch (IOException e) {
1084
                e.printStackTrace();
1085
            }
1086
        }
1087
        return f;
1088
    }
1089
1019
1090
1020
1091
    private Bitmap compressImage(Bitmap image) {
1021
    private Bitmap compressImage(Bitmap image) {

+ 96 - 45
app/src/main/java/com/electric/chargingpile/activity/SkipUserInfoActivity.java

45
import com.electric.chargingpile.data.CarOwnerCertificateBean;
45
import com.electric.chargingpile.data.CarOwnerCertificateBean;
46
import com.electric.chargingpile.data.Cars;
46
import com.electric.chargingpile.data.Cars;
47
import com.electric.chargingpile.data.Province;
47
import com.electric.chargingpile.data.Province;
48
import com.electric.chargingpile.engine.GlideEngine;
48
import com.electric.chargingpile.entity.CarModelEntity;
49
import com.electric.chargingpile.entity.CarModelEntity;
49
import com.electric.chargingpile.entity.CarSeriesEntity;
50
import com.electric.chargingpile.entity.CarSeriesEntity;
50
import com.electric.chargingpile.event.CarIntentModelEvent;
51
import com.electric.chargingpile.event.CarIntentModelEvent;
62
import com.electric.chargingpile.util.StatusConstants;
63
import com.electric.chargingpile.util.StatusConstants;
63
import com.electric.chargingpile.util.ToastUtil;
64
import com.electric.chargingpile.util.ToastUtil;
64
import com.electric.chargingpile.util.UploadUtil;
65
import com.electric.chargingpile.util.UploadUtil;
66
import com.electric.chargingpile.util.Util;
65
import com.electric.chargingpile.view.CustomProgressDialog;
67
import com.electric.chargingpile.view.CustomProgressDialog;
66
import com.electric.chargingpile.view.RoundImageView;
68
import com.electric.chargingpile.view.RoundImageView;
67
import com.electric.chargingpile.view.xrichtext.SDCardUtil;
69
import com.electric.chargingpile.view.xrichtext.SDCardUtil;
68
import com.google.gson.Gson;
70
import com.google.gson.Gson;
71
import com.luck.picture.lib.PictureSelector;
72
import com.luck.picture.lib.animators.AnimationType;
73
import com.luck.picture.lib.config.PictureConfig;
74
import com.luck.picture.lib.config.PictureMimeType;
75
import com.luck.picture.lib.entity.LocalMedia;
69
import com.squareup.okhttp.Request;
76
import com.squareup.okhttp.Request;
70
import com.squareup.okhttp.Response;
77
import com.squareup.okhttp.Response;
78
import com.yalantis.ucrop.view.OverlayView;
71
import com.zhy.http.okhttp.OkHttpUtils;
79
import com.zhy.http.okhttp.OkHttpUtils;
72
import com.zhy.http.okhttp.callback.StringCallback;
80
import com.zhy.http.okhttp.callback.StringCallback;
73
81
81
89
82
import java.io.ByteArrayOutputStream;
90
import java.io.ByteArrayOutputStream;
83
import java.io.File;
91
import java.io.File;
92
import java.io.FileOutputStream;
84
import java.io.IOException;
93
import java.io.IOException;
85
import java.net.URLEncoder;
94
import java.net.URLEncoder;
86
import java.util.ArrayList;
95
import java.util.ArrayList;
129
    private TextView tv_point;
138
    private TextView tv_point;
130
    private RelativeLayout rl_point;
139
    private RelativeLayout rl_point;
131
    private Bitmap download_bmp;
140
    private Bitmap download_bmp;
132
    private File fileUri = new File(Environment.getExternalStorageDirectory().getPath() + "/photo.jpg");
133
    private File fileCropUri = new File(Environment.getExternalStorageDirectory().getPath() + "/crop_photo.jpg");
134
    private Uri imageUri;
135
    private Uri cropImageUri;
141
136
    private static final int RC_CAMERA_PERM = 123;
142
    private static final int RC_CAMERA_PERM = 123;
137
    private SkipUserInfoActivity activity;
143
    private SkipUserInfoActivity activity;
138
144
355
        btn_two.setOnClickListener(new View.OnClickListener() {
361
        btn_two.setOnClickListener(new View.OnClickListener() {
356
            @Override
362
            @Override
357
            public void onClick(View view) {
363
            public void onClick(View view) {
358
                Intent intent = new Intent(Intent.ACTION_PICK, null);
359
                intent.setDataAndType(
360
                        MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
361
                        "image/*");
362
                startActivityForResult(intent, 1);
364
                openPhotoAlbum();
363
                popupWindow.dismiss();
365
                popupWindow.dismiss();
364
            }
366
            }
365
        });
367
        });
466
            case R.id.iv_right:
468
            case R.id.iv_right:
467
//                startActivity(new Intent(SkipUserInfoActivity.this,LoginActivity.class));
469
//                startActivity(new Intent(SkipUserInfoActivity.this,LoginActivity.class));
468
                Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.icon_user1118);
470
                Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.icon_user1118);
469
                ImageTools.saveImageToGallery(getApplicationContext(), bmp, "user_icon");
471
//                ImageTools.saveImageToGallery(getApplicationContext(), bmp, "user_icon.jpg");
472
                String storePath = PhotoUtils.CACHE_DIR + File.separator + "cdz_android";
473
                PhotoUtils.saveBitmap(this,bmp,storePath,"user_icon.jpeg");
470
                ProfileManager.getInstance().setFirstPoint(SkipUserInfoActivity.this, "1");
474
                ProfileManager.getInstance().setFirstPoint(SkipUserInfoActivity.this, "1");
471
                ActivityManagerApplication.destoryActivity("login");
475
                ActivityManagerApplication.destoryActivity("login");
472
                CreditActivity.canFresh = true;
476
                CreditActivity.canFresh = true;
485
                            shite("");
489
                            shite("");
486
                        }
490
                        }
487
                    }).start();
491
                    }).start();
488
                    if (mCarModelEntity!=null){
492
                    if (mCarModelEntity != null) {
489
                        requestCarIntentModel();
493
                        requestCarIntentModel();
490
                    }
494
                    }
491
                    createDialog();
495
                    createDialog();
510
     * @param view
514
     * @param view
511
     */
515
     */
512
    public void takePhoto(View view) {
516
    public void takePhoto(View view) {
513
        if (SDCardUtil.hasSdcard()) {
514
            imageUri = Uri.fromFile(fileUri);
515
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
516
                //通过FileProvider创建一个content类型的Uri
517
                imageUri = FileProvider.getUriForFile(SkipUserInfoActivity.this, "com.electric.chargingpile.provider", fileUri);
518
            PhotoUtils.takePicture(SkipUserInfoActivity.this, imageUri, 2);
519
        } else {
520
            Toast.makeText(SkipUserInfoActivity.this, "设备没有SD卡!", Toast.LENGTH_SHORT).show();
521
            Log.e("asd", "设备没有SD卡");
522
        }
517
        PictureSelector.create(this)
518
                .openCamera(PictureMimeType.ofImage())
519
                .selectionMode(PictureConfig.SINGLE)
520
                .isSingleDirectReturn(true)
521
                .isCompress(true)//是否压缩
522
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
523
                .isGif(false)//是否显示gif
524
                .isAndroidQTransform(true)
525
                .imageEngine(GlideEngine.createGlideEngine())
526
                .isWeChatStyle(false)// 是否开启微信图片选择风格
527
                .isUseCustomCamera(false)// 是否使用自定义相机
528
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
529
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
530
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
531
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
532
                .imageSpanCount(4)// 每行显示个数
533
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
534
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
535
                .isEnableCrop(true)
536
                .rotateEnabled(false)//裁剪是否可旋转图片
537
                .setCircleStrokeWidth(8)//设置圆形裁剪边框粗细
538
                .freeStyleCropMode(OverlayView.DEFAULT_FREESTYLE_CROP_MODE)// 裁剪框拖动模式
539
                .isCropDragSmoothToCenter(true)// 裁剪框拖动时图片自动跟随居中
540
                .circleDimmedLayer(true)// 是否开启圆形裁剪
541
                .isDragFrame(true)//是否可拖动裁剪框(固定)
542
                .showCropFrame(false)// 是否显示裁剪矩形边框 圆形裁剪时建议设为false
543
                .showCropGrid(false)//是否显示裁剪矩形网格 圆形裁剪时建议设为false
544
                .forResult(2);
545
546
    }
547
    private void openPhotoAlbum() {
548
        PictureSelector.create(this)
549
                .openGallery(PictureMimeType.ofImage())
550
                .isCamera(false)//列表是否显示拍照按钮
551
                .selectionMode(PictureConfig.SINGLE)
552
                .isSingleDirectReturn(true)//PictureConfig.SINGLE模式下是否直接返回
553
                .isCompress(true)//是否压缩
554
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
555
                .isGif(false)//是否显示gif
556
                .isAndroidQTransform(true)
557
                .imageEngine(GlideEngine.createGlideEngine())
558
                .isWeChatStyle(false)// 是否开启微信图片选择风格
559
                .isUseCustomCamera(false)// 是否使用自定义相机
560
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
561
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
562
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
563
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
564
                .imageSpanCount(4)// 每行显示个数
565
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
566
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
567
                .rotateEnabled(false)//裁剪是否可旋转图片
568
                .isEnableCrop(true)
569
                .rotateEnabled(false)//裁剪是否可旋转图片
570
                .setCircleStrokeWidth(8)//设置圆形裁剪边框粗细
571
                .freeStyleCropMode(OverlayView.DEFAULT_FREESTYLE_CROP_MODE)// 裁剪框拖动模式
572
                .isCropDragSmoothToCenter(true)// 裁剪框拖动时图片自动跟随居中
573
                .circleDimmedLayer(true)// 是否开启圆形裁剪
574
                .isDragFrame(true)//是否可拖动裁剪框(固定)
575
                .showCropFrame(false)// 是否显示裁剪矩形边框 圆形裁剪时建议设为false
576
                .showCropGrid(false)//是否显示裁剪矩形网格 圆形裁剪时建议设为false
577
                .forResult(1);
523
    }
578
    }
524
579
525
    private boolean checkText() {
580
    private boolean checkText() {
671
                car_type = select_chexing;
726
                car_type = select_chexing;
672
                break;
727
                break;
673
            case 1:
728
            case 1:
674
                if (SDCardUtil.hasSdcard()) {
675
                    cropImageUri = Uri.fromFile(fileCropUri);
676
                    Uri newUri = Uri.parse(PhotoUtils.getPath(this, data.getData()));
677
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
678
                        newUri = FileProvider.getUriForFile(this, "com.electric.chargingpile.provider", new File(newUri.getPath()));
679
                    PhotoUtils.cropImageUri(this, newUri, cropImageUri, 1, 1, output_X, output_Y, 3);
680
                } else {
681
                    Toast.makeText(SkipUserInfoActivity.this, "设备没有SD卡!", Toast.LENGTH_SHORT).show();
682
                }
683
                break;
684
            // 如果是调用相机拍照时
685
            case 2:
729
            case 2:
686
                cropImageUri = Uri.fromFile(fileCropUri);
687
                PhotoUtils.cropImageUri(this, imageUri, cropImageUri, 1, 1, output_X, output_Y, 3);
688
                break;
689
690
            // 取得裁剪后的图片
691
            case 3:
692
                photo = imageZoom(PhotoUtils.getBitmapFromUri(cropImageUri, this));
693
                if (photo != null) {
694
                    iconPic.setImageBitmap(photo);
695
                }
730
                activityResult(data);
696
                break;
731
                break;
697
            default:
732
            default:
698
                break;
733
                break;
699
        }
734
        }
700
        ;
735
        ;
701
    }
736
    }
737
    private void activityResult(Intent data) {
738
        List<LocalMedia> medias = PictureSelector.obtainMultipleResult(data);
739
        if (medias != null && medias.size() > 0) {
740
            String path = "";
741
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
742
                path = medias.get(0).getAndroidQToPath();
743
            } else {
744
                path = medias.get(0).getPath();
745
            }
746
            photo = imageZoom(BitmapFactory.decodeFile(path));
747
            if (photo != null) {
748
                iconPic.setImageBitmap(photo);
749
            }
750
751
        }
752
    }
702
753
703
    private Bitmap imageZoom(Bitmap bm) {
754
    private Bitmap imageZoom(Bitmap bm) {
704
        // 图片允许最大空间 单位:KB
755
        // 图片允许最大空间 单位:KB
1000
                            //获取意向车型
1051
                            //获取意向车型
1001
                            if (bean.getStatus() == 2 && isCarIntendedModel) {
1052
                            if (bean.getStatus() == 2 && isCarIntendedModel) {
1002
                                CarSeriesEntity entity = gson.fromJson(bean.getChexing(), CarSeriesEntity.class);
1053
                                CarSeriesEntity entity = gson.fromJson(bean.getChexing(), CarSeriesEntity.class);
1003
                                if (mCarModelEntity == null){
1054
                                if (mCarModelEntity == null) {
1004
                                    carModel.setText(entity.getSeriesName());
1055
                                    carModel.setText(entity.getSeriesName());
1005
                                }
1056
                                }
1006
                                isCarIntendedModel = false;
1057
                                isCarIntendedModel = false;
1055
    /**
1106
    /**
1056
     * 意向车型Event
1107
     * 意向车型Event
1057
     */
1108
     */
1058
    @Subscribe(threadMode = ThreadMode.MAIN,sticky = true)
1109
    @Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
1059
    public void onCarModelEvent(CarIntentModelEvent event) {
1110
    public void onCarModelEvent(CarIntentModelEvent event) {
1060
        if (event != null) {
1111
        if (event != null) {
1061
            mCarModelEntity = event.getCarModelEntity();
1112
            mCarModelEntity = event.getCarModelEntity();
1084
        map.put("token", token);
1135
        map.put("token", token);
1085
1136
1086
        Gson gson = new Gson();
1137
        Gson gson = new Gson();
1087
        if (mCarModelEntity == null){
1138
        if (mCarModelEntity == null) {
1088
            return;
1139
            return;
1089
        }
1140
        }
1090
        String chexing = gson.toJson(mCarModelEntity);
1141
        String chexing = gson.toJson(mCarModelEntity);

+ 0 - 72
app/src/main/java/com/electric/chargingpile/activity/TestProgressActivity.java

1
package com.electric.chargingpile.activity;
2
3
import android.app.Activity;
4
import android.graphics.Rect;
5
import android.graphics.drawable.Drawable;
6
import android.os.Bundle;
7
import android.os.Handler;
8
import android.os.Message;
9
import android.view.View;
10
11
import com.electric.chargingpile.R;
12
import com.electric.chargingpile.view.SaundProgressBar;
13
14
public class TestProgressActivity extends Activity {
15
16
    private SaundProgressBar mPbar;
17
    private int progress = 0;
18
    private Message message;
19
    private Handler handler = new Handler() {
20
21
        @Override
22
        public void handleMessage(Message msg) {
23
            // TODO Auto-generated method stub
24
            super.handleMessage(msg);
25
            int p = msg.what;
26
            mPbar.setProgress(p);
27
        }
28
29
    };
30
31
    @Override
32
    protected void onCreate(Bundle savedInstanceState) {
33
        super.onCreate(savedInstanceState);
34
        setContentView(R.layout.activity_test_progress);
35
36
        mPbar = (SaundProgressBar) this.findViewById(R.id.regularprogressbar);
37
        mPbar.setMax(100);
38
39
        Drawable indicator = getResources().getDrawable(
40
                R.drawable.progress_indicator);
41
        Rect bounds = new Rect(0, 0, indicator.getIntrinsicWidth() + 5,
42
                indicator.getIntrinsicHeight());
43
        indicator.setBounds(bounds);
44
45
        mPbar.setProgressIndicator(indicator);
46
        mPbar.setProgress(0);
47
        mPbar.setVisibility(View.VISIBLE);
48
49
        new Thread(runnable).start();
50
    }
51
52
    Runnable runnable = new Runnable() {
53
54
        @Override
55
        public void run() {
56
            message = handler.obtainMessage();
57
            // TODO Auto-generated method stub
58
            try {
59
                for (int i = 1; i <= 100; i++) {
60
                    int x = progress++;
61
                    message.what = x;
62
                    handler.sendEmptyMessage(message.what);
63
                    Thread.sleep(1000);
64
                }
65
66
            } catch (InterruptedException e) {
67
                // TODO Auto-generated catch block
68
                e.printStackTrace();
69
            }
70
        }
71
    };
72
}

+ 0 - 18
app/src/main/java/com/electric/chargingpile/activity/TesttActivity.java

1
package com.electric.chargingpile.activity;
2
3
import android.os.Bundle;
4
5
import com.electric.chargingpile.R;
6
import com.zhy.autolayout.AutoLayout;
7
import com.zhy.autolayout.AutoLayoutActivity;
8
9
public class TesttActivity extends AutoLayoutActivity {
10
11
    @Override
12
    protected void onCreate(Bundle savedInstanceState) {
13
        super.onCreate(savedInstanceState);
14
        setContentView(R.layout.activity_testt);
15
        AutoLayout.getInstance().auto(this, true);
16
    }
17
18
}

+ 5 - 7
app/src/main/java/com/electric/chargingpile/activity/UserCenterActivity.java

17
import android.net.NetworkInfo;
17
import android.net.NetworkInfo;
18
import android.net.Uri;
18
import android.net.Uri;
19
import android.os.Bundle;
19
import android.os.Bundle;
20
import android.os.Environment;
21
import android.os.Handler;
20
import android.os.Handler;
22
import android.os.Message;
21
import android.os.Message;
23
import android.os.Process;
22
import android.os.Process;
24
25
import androidx.annotation.NonNull;
26
27
import android.text.TextUtils;
28
import android.util.Log;
23
import android.util.Log;
29
import android.view.KeyEvent;
24
import android.view.KeyEvent;
30
import android.view.View;
25
import android.view.View;
37
import android.widget.Toast;
32
import android.widget.Toast;
38
import android.widget.ToggleButton;
33
import android.widget.ToggleButton;
39
34
35
import androidx.annotation.NonNull;
36
40
import com.amap.api.services.weather.LocalDayWeatherForecast;
37
import com.amap.api.services.weather.LocalDayWeatherForecast;
41
import com.amap.api.services.weather.LocalWeatherForecast;
38
import com.amap.api.services.weather.LocalWeatherForecast;
42
import com.amap.api.services.weather.LocalWeatherForecastResult;
39
import com.amap.api.services.weather.LocalWeatherForecastResult;
56
import com.electric.chargingpile.util.LoadingDialog;
53
import com.electric.chargingpile.util.LoadingDialog;
57
import com.electric.chargingpile.util.NetUtil;
54
import com.electric.chargingpile.util.NetUtil;
58
import com.electric.chargingpile.util.OkHttpUtil;
55
import com.electric.chargingpile.util.OkHttpUtil;
56
import com.electric.chargingpile.util.PhotoUtils;
59
import com.electric.chargingpile.util.PicassoUtil;
57
import com.electric.chargingpile.util.PicassoUtil;
60
import com.electric.chargingpile.util.ScreenUtils;
58
import com.electric.chargingpile.util.ScreenUtils;
61
import com.electric.chargingpile.util.Util;
59
import com.electric.chargingpile.util.Util;
527
//        }
525
//        }
528
        if (MainApplication.userIcon.equals("V")) {
526
        if (MainApplication.userIcon.equals("V")) {
529
//            Log.e("1111", "11111");
527
//            Log.e("1111", "11111");
530
            usericonbt = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory() + File.separator + "d1ev/usericon");
528
            usericonbt = BitmapFactory.decodeFile(PhotoUtils.CACHE_DIR + "d1ev/usericon");
531
            userIcon.setImageBitmap(usericonbt);
529
            userIcon.setImageBitmap(usericonbt);
532
        } else if (MainApplication.userIcon.equals("")) {
530
        } else if (MainApplication.userIcon.equals("")) {
533
//            Log.e("2222", "22222");
531
//            Log.e("2222", "22222");
548
    }
546
    }
549
547
550
    public void saveBitmap(Bitmap mBitmap) {
548
    public void saveBitmap(Bitmap mBitmap) {
551
        String dir_path = Environment.getExternalStorageDirectory() + File.separator + "d1ev/";
549
        String dir_path = PhotoUtils.CACHE_DIR + "d1ev/";
552
        File directory = new File(dir_path);
550
        File directory = new File(dir_path);
553
        File f = new File(dir_path, "usericon");
551
        File f = new File(dir_path, "usericon");
554
        try {
552
        try {

+ 91 - 82
app/src/main/java/com/electric/chargingpile/activity/UserInfoActivity.java

19
import android.net.Uri;
19
import android.net.Uri;
20
import android.os.Build;
20
import android.os.Build;
21
import android.os.Bundle;
21
import android.os.Bundle;
22
import android.os.Environment;
23
import android.os.Handler;
22
import android.os.Handler;
24
import android.os.Looper;
23
import android.os.Looper;
25
import android.os.Message;
24
import android.os.Message;
26
import android.provider.MediaStore;
27
28
import androidx.core.content.FileProvider;
29
30
import android.text.TextUtils;
25
import android.text.TextUtils;
31
import android.util.Log;
26
import android.util.Log;
32
import android.view.Gravity;
27
import android.view.Gravity;
55
import com.electric.chargingpile.data.CarOwnerCertificateBean;
50
import com.electric.chargingpile.data.CarOwnerCertificateBean;
56
import com.electric.chargingpile.data.Cars;
51
import com.electric.chargingpile.data.Cars;
57
import com.electric.chargingpile.data.Province;
52
import com.electric.chargingpile.data.Province;
53
import com.electric.chargingpile.engine.GlideEngine;
58
import com.electric.chargingpile.entity.CarModelEntity;
54
import com.electric.chargingpile.entity.CarModelEntity;
59
import com.electric.chargingpile.entity.CarSeriesEntity;
55
import com.electric.chargingpile.entity.CarSeriesEntity;
60
import com.electric.chargingpile.event.CarIntentModelEvent;
56
import com.electric.chargingpile.event.CarIntentModelEvent;
61
import com.electric.chargingpile.event.CarModelEvent;
62
import com.electric.chargingpile.manager.PreferenceManager;
63
import com.electric.chargingpile.manager.ProfileManager;
57
import com.electric.chargingpile.manager.ProfileManager;
64
import com.electric.chargingpile.util.BarColorUtil;
58
import com.electric.chargingpile.util.BarColorUtil;
65
import com.electric.chargingpile.util.DES3;
59
import com.electric.chargingpile.util.DES3;
71
import com.electric.chargingpile.util.StatusConstants;
65
import com.electric.chargingpile.util.StatusConstants;
72
import com.electric.chargingpile.util.ToastUtil;
66
import com.electric.chargingpile.util.ToastUtil;
73
import com.electric.chargingpile.util.UploadUtil;
67
import com.electric.chargingpile.util.UploadUtil;
74
import com.electric.chargingpile.view.AlertDialogTwo;
68
import com.electric.chargingpile.util.Util;
75
import com.electric.chargingpile.view.CustomProgressDialog;
69
import com.electric.chargingpile.view.CustomProgressDialog;
76
import com.electric.chargingpile.view.RoundImageView;
70
import com.electric.chargingpile.view.RoundImageView;
77
import com.electric.chargingpile.view.xrichtext.SDCardUtil;
78
import com.google.gson.Gson;
71
import com.google.gson.Gson;
72
import com.luck.picture.lib.PictureSelector;
73
import com.luck.picture.lib.animators.AnimationType;
74
import com.luck.picture.lib.config.PictureConfig;
75
import com.luck.picture.lib.config.PictureMimeType;
76
import com.luck.picture.lib.entity.LocalMedia;
79
import com.squareup.okhttp.Request;
77
import com.squareup.okhttp.Request;
80
import com.squareup.okhttp.Response;
78
import com.squareup.okhttp.Response;
81
import com.squareup.picasso.Picasso;
79
import com.squareup.picasso.Picasso;
82
import com.squareup.picasso.Target;
80
import com.squareup.picasso.Target;
83
import com.umeng.analytics.MobclickAgent;
81
import com.umeng.analytics.MobclickAgent;
82
import com.yalantis.ucrop.view.OverlayView;
84
import com.zhy.http.okhttp.OkHttpUtils;
83
import com.zhy.http.okhttp.OkHttpUtils;
85
import com.zhy.http.okhttp.callback.StringCallback;
84
import com.zhy.http.okhttp.callback.StringCallback;
86
85
93
92
94
import java.io.ByteArrayInputStream;
93
import java.io.ByteArrayInputStream;
95
import java.io.ByteArrayOutputStream;
94
import java.io.ByteArrayOutputStream;
96
import java.io.File;
97
import java.io.FileOutputStream;
98
import java.io.IOException;
95
import java.io.IOException;
99
import java.net.URLEncoder;
96
import java.net.URLEncoder;
100
import java.util.ArrayList;
97
import java.util.ArrayList;
145
    private TextView tv_point;
142
    private TextView tv_point;
146
    private RelativeLayout rl_point;
143
    private RelativeLayout rl_point;
147
    private android.view.animation.Animation animation;
144
    private android.view.animation.Animation animation;
148
    private File fileUri = new File(Environment.getExternalStorageDirectory().getPath() + "/photo.jpg");
149
    private File fileCropUri = new File(Environment.getExternalStorageDirectory().getPath() + "/crop_photo.jpg");
150
    private Uri imageUri;
151
    private Uri cropImageUri;
145
152
    private static final int RC_CAMERA_PERM = 123;
146
    private static final int RC_CAMERA_PERM = 123;
153
    private LoadingDialog loadDialog;
147
    private LoadingDialog loadDialog;
154
    // -2 -> 去认证, -1 -> 认证失败,0 -> 审核中,1 -> 表示通过审核,2 -> 表示意向车型。
148
    // -2 -> 去认证, -1 -> 认证失败,0 -> 审核中,1 -> 表示通过审核,2 -> 表示意向车型。
520
        btn_two.setOnClickListener(new View.OnClickListener() {
514
        btn_two.setOnClickListener(new View.OnClickListener() {
521
            @Override
515
            @Override
522
            public void onClick(View view) {
516
            public void onClick(View view) {
523
                Intent intent = new Intent(Intent.ACTION_PICK, null);
524
                intent.setDataAndType(
525
                        MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
526
                        "image/*");
527
                startActivityForResult(intent, 1);
517
                openPhotoAlbum();
518
528
                popupWindow.dismiss();
519
                popupWindow.dismiss();
529
            }
520
            }
530
        });
521
        });
533
    }
524
    }
534
525
535
526
527
536
    public void shite(String s) {
528
    public void shite(String s) {
537
529
538
        Map<String, String> par = new HashMap<String, String>();
530
        Map<String, String> par = new HashMap<String, String>();
587
     * @param view
579
     * @param view
588
     */
580
     */
589
    public void takePhoto(View view) {
581
    public void takePhoto(View view) {
590
        if (SDCardUtil.hasSdcard()) {
591
            imageUri = Uri.fromFile(fileUri);
592
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
593
                //通过FileProvider创建一个content类型的Uri
594
                imageUri = FileProvider.getUriForFile(UserInfoActivity.this, "com.electric.chargingpile.provider", fileUri);
595
            PhotoUtils.takePicture(UserInfoActivity.this, imageUri, 2);
596
        } else {
597
            Toast.makeText(UserInfoActivity.this, "设备没有SD卡!", Toast.LENGTH_SHORT).show();
598
            Log.e("asd", "设备没有SD卡");
599
        }
582
583
        PictureSelector.create(this)
584
                .openCamera(PictureMimeType.ofImage())
585
                .selectionMode(PictureConfig.SINGLE)
586
                .isSingleDirectReturn(true)
587
                .isCompress(true)//是否压缩
588
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
589
                .isGif(false)//是否显示gif
590
                .isAndroidQTransform(true)
591
                .imageEngine(GlideEngine.createGlideEngine())
592
                .isWeChatStyle(false)// 是否开启微信图片选择风格
593
                .isUseCustomCamera(false)// 是否使用自定义相机
594
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
595
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
596
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
597
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
598
                .imageSpanCount(4)// 每行显示个数
599
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
600
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
601
                .isEnableCrop(true)
602
                .rotateEnabled(false)//裁剪是否可旋转图片
603
                .setCircleStrokeWidth(8)//设置圆形裁剪边框粗细
604
                .freeStyleCropMode(OverlayView.DEFAULT_FREESTYLE_CROP_MODE)// 裁剪框拖动模式
605
                .isCropDragSmoothToCenter(true)// 裁剪框拖动时图片自动跟随居中
606
                .circleDimmedLayer(true)// 是否开启圆形裁剪
607
                .isDragFrame(true)//是否可拖动裁剪框(固定)
608
                .showCropFrame(false)// 是否显示裁剪矩形边框 圆形裁剪时建议设为false
609
                .showCropGrid(false)//是否显示裁剪矩形网格 圆形裁剪时建议设为false
610
                .forResult(2);
611
    }
612
    private void openPhotoAlbum() {
613
        PictureSelector.create(UserInfoActivity.this)
614
                .openGallery(PictureMimeType.ofImage())
615
                .isCamera(false)//列表是否显示拍照按钮
616
                .selectionMode(PictureConfig.SINGLE)
617
                .isSingleDirectReturn(true)//PictureConfig.SINGLE模式下是否直接返回
618
                .isCompress(true)//是否压缩
619
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
620
                .isGif(false)//是否显示gif
621
                .isAndroidQTransform(true)
622
                .imageEngine(GlideEngine.createGlideEngine())
623
                .isWeChatStyle(false)// 是否开启微信图片选择风格
624
                .isUseCustomCamera(false)// 是否使用自定义相机
625
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
626
                .setPictureStyle(Util.getWhiteStyle(UserInfoActivity.this))// 动态自定义相册主题
627
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
628
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
629
                .imageSpanCount(4)// 每行显示个数
630
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
631
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
632
                .rotateEnabled(false)//裁剪是否可旋转图片
633
                .isEnableCrop(true)
634
                .rotateEnabled(false)//裁剪是否可旋转图片
635
                .setCircleStrokeWidth(8)//设置圆形裁剪边框粗细
636
                .freeStyleCropMode(OverlayView.DEFAULT_FREESTYLE_CROP_MODE)// 裁剪框拖动模式
637
                .isCropDragSmoothToCenter(true)// 裁剪框拖动时图片自动跟随居中
638
                .circleDimmedLayer(true)// 是否开启圆形裁剪
639
                .isDragFrame(true)//是否可拖动裁剪框(固定)
640
                .showCropFrame(false)// 是否显示裁剪矩形边框 圆形裁剪时建议设为false
641
                .showCropGrid(false)//是否显示裁剪矩形网格 圆形裁剪时建议设为false
642
                .forResult(1);
600
    }
643
    }
601
644
602
    @AfterPermissionGranted(RC_CAMERA_PERM)
645
    @AfterPermissionGranted(RC_CAMERA_PERM)
714
757
715
758
716
        switch (requestCode) {
759
        switch (requestCode) {
717
            // 如果是直接从相册获取
718
            case 1:
760
            case 1:
719
                if (SDCardUtil.hasSdcard()) {
720
                    cropImageUri = Uri.fromFile(fileCropUri);
721
                    Uri newUri = Uri.parse(PhotoUtils.getPath(this, data.getData()));
722
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
723
                        newUri = FileProvider.getUriForFile(this, "com.electric.chargingpile.provider", new File(newUri.getPath()));
724
                    PhotoUtils.cropImageUri(this, newUri, cropImageUri, 1, 1, output_X, output_Y, 3);
725
                } else {
726
                    Toast.makeText(UserInfoActivity.this, "设备没有SD卡!", Toast.LENGTH_SHORT).show();
727
                }
728
                break;
729
            // 如果是调用相机拍照时
730
            case 2:
761
            case 2:
731
                cropImageUri = Uri.fromFile(fileCropUri);
732
                PhotoUtils.cropImageUri(this, imageUri, cropImageUri, 1, 1, output_X, output_Y, 3);
762
                activityResult(data);
733
                break;
763
                break;
734
764
735
            // 取得裁剪后的图片
736
            case 3:
737
                photo = imageZoom(PhotoUtils.getBitmapFromUri(cropImageUri, this));
738
                if (photo != null) {
739
                    iconPic.setImageBitmap(photo);
740
                }
741
                break;
742
            default:
765
            default:
743
                break;
766
                break;
744
        }
767
        }
745
        ;
768
        ;
746
    }
769
    }
747
770
771
    private void activityResult(Intent data) {
772
        List<LocalMedia> medias = PictureSelector.obtainMultipleResult(data);
773
        if (medias != null && medias.size() > 0) {
774
            String path = "";
775
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
776
                path = medias.get(0).getAndroidQToPath();
777
            } else {
778
                path = medias.get(0).getPath();
779
            }
780
            photo = imageZoom(BitmapFactory.decodeFile(path));
781
            if (photo != null) {
782
                iconPic.setImageBitmap(photo);
783
            }
784
785
        }
786
    }
787
748
    private Bitmap imageZoom(Bitmap bm) {
788
    private Bitmap imageZoom(Bitmap bm) {
749
        // 图片允许最大空间 单位:KB
789
        // 图片允许最大空间 单位:KB
750
        double maxSize = 40.00;
790
        double maxSize = 40.00;
871
        return output;
911
        return output;
872
    }
912
    }
873
913
874
    public void saveBitmap(Bitmap mBitmap) {
875
        String dir_path = Environment.getExternalStorageDirectory() + File.separator + "d1ev/";
876
        File directory = new File(dir_path);
877
        File f = new File(dir_path, "usericon");
878
        try {
879
            if (!directory.exists()) {
880
                directory.mkdir();//没有目录先创建目录
881
            }
882
            f.createNewFile();
883
        } catch (IOException e) {
884
            // TODO Auto-generated catch block
885
        }
886
        FileOutputStream fOut = null;
887
        try {
888
            fOut = new FileOutputStream(f);
889
        } catch (Exception e) {
890
            e.printStackTrace();
891
        }
892
        mBitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
893
        try {
894
            fOut.flush();
895
        } catch (IOException e) {
896
            e.printStackTrace();
897
        }
898
        try {
899
            fOut.close();
900
        } catch (IOException e) {
901
            e.printStackTrace();
902
        }
903
    }
904
905
914
906
    Handler handle = new Handler(Looper.getMainLooper()) {
915
    Handler handle = new Handler(Looper.getMainLooper()) {
907
        public void handleMessage(Message msg) {
916
        public void handleMessage(Message msg) {

+ 2 - 31
app/src/main/java/com/electric/chargingpile/activity/WelcomeActivity.java

48
import com.electric.chargingpile.util.DES3;
48
import com.electric.chargingpile.util.DES3;
49
import com.electric.chargingpile.util.JsonUtils;
49
import com.electric.chargingpile.util.JsonUtils;
50
import com.electric.chargingpile.util.OkHttpUtil;
50
import com.electric.chargingpile.util.OkHttpUtil;
51
import com.electric.chargingpile.util.PhotoUtils;
51
import com.electric.chargingpile.util.SystemTypeUtil;
52
import com.electric.chargingpile.util.SystemTypeUtil;
52
import com.electric.chargingpile.view.AlertDialogTwo;
53
import com.electric.chargingpile.view.AlertDialogTwo;
53
import com.electric.chargingpile.view.ViewPagerAdapter;
54
import com.electric.chargingpile.view.ViewPagerAdapter;
100
    public static String canCost = "";
101
    public static String canCost = "";
101
    private static final int RC_CAMERA_PERM = 123;
102
    private static final int RC_CAMERA_PERM = 123;
102
    private static final int RC_SAVE_PERM = 124;
103
    private static final int RC_SAVE_PERM = 124;
103
    private static final String MAP_FILE_PATH = getPath(Environment.getExternalStorageDirectory() + "/" + "cdz_map");
104
    private static final String MAP_FILE_PATH = getPath(PhotoUtils.CACHE_DIR + "/" + "cdz_map");
104

105

105

106

106
    private ImageView oneIv, twoIv, threeIv, fourIv;
107
    private ImageView oneIv, twoIv, threeIv, fourIv;
469
    }
470
    }
470

471

471

472

472
    public void saveBitmap(Bitmap mBitmap) {
473
        String dir_path = Environment.getExternalStorageDirectory() + File.separator + "d1ev/";
474
        File directory = new File(dir_path);
475
        File f = new File(dir_path, "welcome_pic");
476
        try {
477
            if (!directory.exists()) {
478
                directory.mkdir();//没有目录先创建目录
479
            }
480
            f.createNewFile();
481
        } catch (IOException e) {
482
            // TODO Auto-generated catch block
483
        }
484
        FileOutputStream fOut = null;
485
        try {
486
            fOut = new FileOutputStream(f);
487
        } catch (Exception e) {
488
            e.printStackTrace();
489
        }
490
        mBitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
491
        try {
492
            fOut.flush();
493
        } catch (IOException e) {
494
            e.printStackTrace();
495
        }
496
        try {
497
            fOut.close();
498
        } catch (IOException e) {
499
            e.printStackTrace();
500
        }
501
    }
502

473

503
    private void getStartPic() {
474
    private void getStartPic() {
504
        new Thread(new Runnable() {
475
        new Thread(new Runnable() {

+ 52 - 151
app/src/main/java/com/electric/chargingpile/activity/ZhanCommentActivity.java

18
import android.net.Uri;
18
import android.net.Uri;
19
import android.os.Build;
19
import android.os.Build;
20
import android.os.Bundle;
20
import android.os.Bundle;
21
import android.os.Environment;
21
22
import android.os.Handler;
22
import android.os.Handler;
23
import android.os.Message;
23
import android.os.Message;
24
import android.provider.MediaStore;
24
import android.provider.MediaStore;
50
import com.electric.chargingpile.data.CommentsBean;
50
import com.electric.chargingpile.data.CommentsBean;
51
import com.electric.chargingpile.data.MyOtto;
51
import com.electric.chargingpile.data.MyOtto;
52
import com.electric.chargingpile.data.RObject;
52
import com.electric.chargingpile.data.RObject;
53
import com.electric.chargingpile.engine.GlideEngine;
53
import com.electric.chargingpile.util.BarColorUtil;
54
import com.electric.chargingpile.util.BarColorUtil;
54
import com.electric.chargingpile.util.Bimp;
55
import com.electric.chargingpile.util.Bimp;
55
import com.electric.chargingpile.util.DES3;
56
import com.electric.chargingpile.util.DES3;
59
import com.electric.chargingpile.util.JsonUtils;
60
import com.electric.chargingpile.util.JsonUtils;
60
import com.electric.chargingpile.util.LoadingDialog;
61
import com.electric.chargingpile.util.LoadingDialog;
61
import com.electric.chargingpile.util.Md5Util;
62
import com.electric.chargingpile.util.Md5Util;
63
import com.electric.chargingpile.util.PhotoUtils;
62
import com.electric.chargingpile.util.PublicWayONE;
64
import com.electric.chargingpile.util.PublicWayONE;
63
import com.electric.chargingpile.util.Res;
65
import com.electric.chargingpile.util.Res;
64
import com.electric.chargingpile.util.ScreenUtils;
66
import com.electric.chargingpile.util.ScreenUtils;
65
import com.electric.chargingpile.util.StatusConstants;
67
import com.electric.chargingpile.util.StatusConstants;
66
import com.electric.chargingpile.util.ToastUtil;
68
import com.electric.chargingpile.util.ToastUtil;
67
import com.electric.chargingpile.util.UploadUtil;
69
import com.electric.chargingpile.util.UploadUtil;
70
import com.electric.chargingpile.util.Util;
68
import com.electric.chargingpile.view.REditText;
71
import com.electric.chargingpile.view.REditText;
69
import com.electric.chargingpile.view.RatingBarView;
72
import com.electric.chargingpile.view.RatingBarView;
70
import com.zhihu.matisse.Matisse;
71
import com.zhihu.matisse.MimeType;
72
import com.zhihu.matisse.engine.impl.GlideEngine;
73
import com.zhihu.matisse.internal.entity.CaptureStrategy;
73
74
import com.luck.picture.lib.PictureSelector;
75
import com.luck.picture.lib.animators.AnimationType;
76
import com.luck.picture.lib.config.PictureConfig;
77
import com.luck.picture.lib.config.PictureMimeType;
78
import com.luck.picture.lib.entity.LocalMedia;
74
import com.zhy.http.okhttp.OkHttpUtils;
79
import com.zhy.http.okhttp.OkHttpUtils;
75
import com.zhy.http.okhttp.callback.StringCallback;
80
import com.zhy.http.okhttp.callback.StringCallback;
76
import com.zhy.view.flowlayout.FlowLayout;
81
import com.zhy.view.flowlayout.FlowLayout;
127
    private String select_s = "";
132
    private String select_s = "";
128
    private String select_ss = "";
133
    private String select_ss = "";
129
    private TextView tv_grade, tv_point;
134
    private TextView tv_grade, tv_point;
130
    private File tempFile;
135
131
    private static String PHOTO_FILE_NAME = "";
136
    private static String PHOTO_FILE_NAME = "";
132
    private static final String PHOTO_FILE_PATH = getPath(Environment.getExternalStorageDirectory() + "/" + "cdz");
137
    private static final String PHOTO_FILE_PATH = getPath(PhotoUtils.CACHE_DIR);
133
    public static Bitmap bimap;
138
    public static Bitmap bimap;
134
    private PopupWindow pop = null;
135
    private LinearLayout ll_popup;
139
140
136
    private GridView noScrollgridview;
141
    private GridView noScrollgridview;
137
    private GridAdapter adapter;
142
    private GridAdapter adapter;
138
    private static final int PHOTO_REQUEST_CAMERA = 1;
143
    private static final int PHOTO_REQUEST_CAMERA = 1;
177
            super.handleMessage(msg);
182
            super.handleMessage(msg);
178
        }
183
        }
179
    };
184
    };
180
185
    private List<LocalMedia> mSelectionData =new ArrayList<LocalMedia>();
181
    @Override
186
    @Override
182
    protected void onCreate(Bundle savedInstanceState) {
187
    protected void onCreate(Bundle savedInstanceState) {
183
        super.onCreate(savedInstanceState);
188
        super.onCreate(savedInstanceState);
188
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
193
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
189
        networkChangeReceiver = new NetworkChangeReceiver();
194
        networkChangeReceiver = new NetworkChangeReceiver();
190
        registerReceiver(networkChangeReceiver, intentFilter);
195
        registerReceiver(networkChangeReceiver, intentFilter);
191
        long appTime1 = System.currentTimeMillis() / 1000;
192
        PHOTO_FILE_NAME = "android" + appTime1 + ".jpg";
193
        tempFile = getFile(PHOTO_FILE_PATH + "/" + PHOTO_FILE_NAME);
194
        MyOtto.getInstance().unregister(this);
196
        MyOtto.getInstance().unregister(this);
195
        Res.init(this);
197
        Res.init(this);
196
        bimap = BitmapFactory.decodeResource(
198
        bimap = BitmapFactory.decodeResource(
441
    }
443
    }
442
444
443
    public void Init() {
445
    public void Init() {
444
        pop = new PopupWindow(ZhanCommentActivity.this);
445
        View view = getLayoutInflater().inflate(R.layout.item_popupwindows, null);
446
        ll_popup = (LinearLayout) view.findViewById(R.id.ll_popup);
447
448
        pop.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
449
        pop.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
450
        pop.setBackgroundDrawable(new BitmapDrawable());
451
        pop.setFocusable(true);
452
        pop.setOutsideTouchable(true);
453
        pop.setContentView(view);
454
455
456
        final RelativeLayout parent = (RelativeLayout) view.findViewById(R.id.parent);
457
        Button bt1 = (Button) view.findViewById(R.id.item_popupwindows_camera);
458
        Button bt2 = (Button) view.findViewById(R.id.item_popupwindows_Photo);
459
        Button bt3 = (Button) view.findViewById(R.id.item_popupwindows_cancel);
460
        parent.setOnClickListener(new View.OnClickListener() {
461
462
            @Override
463
            public void onClick(View v) {
464
                // TODO Auto-generated method stub
465
                pop.dismiss();
466
                ll_popup.clearAnimation();
467
            }
468
        });
469
        bt1.setOnClickListener(new View.OnClickListener() {
470
            public void onClick(View v) {
471
                photo();
472
                pop.dismiss();
473
                ll_popup.clearAnimation();
474
            }
475
        });
476
        bt2.setOnClickListener(new View.OnClickListener() {
477
            public void onClick(View v) {
478
                Intent intent = new Intent(ZhanCommentActivity.this, AlbumActivityComment.class);
479
                startActivity(intent);
480
                overridePendingTransition(R.anim.activity_translate_in, R.anim.activity_translate_out);
481
                pop.dismiss();
482
                ll_popup.clearAnimation();
483
            }
484
        });
485
        bt3.setOnClickListener(new View.OnClickListener() {
486
            public void onClick(View v) {
487
                pop.dismiss();
488
                ll_popup.clearAnimation();
489
            }
490
        });
491
446
492
        noScrollgridview = (GridView) findViewById(R.id.noScrollgridview);
447
        noScrollgridview = (GridView) findViewById(R.id.noScrollgridview);
493
        noScrollgridview.setSelector(new ColorDrawable(Color.TRANSPARENT));
448
        noScrollgridview.setSelector(new ColorDrawable(Color.TRANSPARENT));
518
     * 调用图库选择
473
     * 调用图库选择
519
     */
474
     */
520
    private void callGallery() {
475
    private void callGallery() {
521
        Matisse.from(ZhanCommentActivity.this)
522
                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
523
                .showSingleMediaType(true)
524
                .countable(true)
525
                .maxSelectable(PIC_NUM - Bimp.tempSelectBitmap.size())
526
                .capture(true)
527
                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
528
                .imageEngine(new GlideEngine())
476
        PictureSelector.create(this)
477
                .openGallery(PictureMimeType.ofImage())
478
                .maxSelectNum(PIC_NUM)
479
                .selectionMode(PictureConfig.MULTIPLE)
480
                .selectionData(mSelectionData)//是否传入已选图片
481
                .isCompress(true)//是否压缩
482
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
483
                .isGif(true)//是否显示gif
484
                .isAndroidQTransform(true)
485
                .imageEngine(GlideEngine.createGlideEngine())
486
                .isWeChatStyle(false)// 是否开启微信图片选择风格
487
                .isUseCustomCamera(false)// 是否使用自定义相机
488
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
489
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
490
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
491
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
492
                .imageSpanCount(4)// 每行显示个数
493
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
494
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
529
                .forResult(REQUEST_CODE_CHOOSE);
495
                .forResult(REQUEST_CODE_CHOOSE);
530
    }
496
    }
531
497
555
            @Override
521
            @Override
556
            public void subscribe(ObservableEmitter<String> subscriber) throws Exception {
522
            public void subscribe(ObservableEmitter<String> subscriber) throws Exception {
557
                try {
523
                try {
558
                    List<Uri> uriList = Matisse.obtainResult(data);
559
                    for (Uri uri : uriList) {
560
                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
561
                        File file = FileUtils.from(ZhanCommentActivity.this, uri);
562
563
                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
564
                        bitmap = imageZoom(bitmap);
524
//                    List<Uri> uriList = Matisse.obtainResult(data);
525
                    mSelectionData= PictureSelector.obtainMultipleResult(data);
526
                    for (LocalMedia media : mSelectionData) {
527
//                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
528
//                        File file = FileUtils.from(ZhanCommentActivity.this, uri);
529
//
530
//                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
531
//                        bitmap = imageZoom(bitmap);
532
//                        ImageItem takePhoto = new ImageItem();
533
//                        takePhoto.setBitmap(bitmap);
534
//                        Bimp.tempSelectBitmap.add(takePhoto);
535
                        String path="";
536
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
537
                            path= media.getAndroidQToPath();
538
                        }else{
539
                            path=media.getPath();
540
                        }
565
                        ImageItem takePhoto = new ImageItem();
541
                        ImageItem takePhoto = new ImageItem();
566
                        takePhoto.setBitmap(bitmap);
542
                        takePhoto.setBitmap(imageZoom(BitmapFactory.decodeFile(path)));
567
                        Bimp.tempSelectBitmap.add(takePhoto);
543
                        Bimp.tempSelectBitmap.add(takePhoto);
568
                        subscriber.onNext("");
544
                        subscriber.onNext("");
569
                    }
545
                    }
1045
        }
1021
        }
1046
    }
1022
    }
1047
1023
1048
    public void photo() {
1049
        if (hasSdcard()) {
1050
            int currentapiVersion = Build.VERSION.SDK_INT;
1051
            Log.e("currentapiVersion", "currentapiVersion====>" + currentapiVersion);
1052
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//���������
1053
            intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
1054
            startActivityForResult(intent, PHOTO_REQUEST_CAMERA);
1055
        }
1056
    }
1057
1058
    private boolean hasSdcard() {
1059
        if (Environment.getExternalStorageState().equals(
1060
                Environment.MEDIA_MOUNTED)) {
1061
            return true;
1062
        } else {
1063
            return false;
1064
        }
1065
    }
1066
1024
1067
    private void crop(Uri uri, Uri cutImgUri) {
1068
        // �ü�ͼƬ��ͼ
1069
        Intent intent = new Intent("com.android.camera.action.CROP");
1070
        intent.setDataAndType(getImageContentUri(this, tempFile), "image/*");
1071
1072
        intent.putExtra("crop", "true");
1073
        // �ü���ı�����1��1
1074
//        intent.putExtra("aspectX", 16);
1075
//        intent.putExtra("aspectY", 9);
1076
//        // �ü������ͼƬ�ijߴ��С
1077
//        intent.putExtra("outputX", 900);
1078
//        intent.putExtra("outputY", 540);
1079
//        intent.putExtra("scale", false);
1080
1081
        // ͼƬ��ʽ
1082
        intent.putExtra("outputFormat", "JPEG");
1083
        intent.putExtra("noFaceDetection", true);// ȡ������ʶ��
1084
        intent.putExtra("return-data", false);// true:������uri��false������uri
1085
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));//д���ȡ��ͼƬ
1086
        startActivityForResult(intent, PHOTO_REQUEST_CUT);
1087
    }
1088
1089
    public static Uri getImageContentUri(Context context, File imageFile) {
1090
        String filePath = imageFile.getAbsolutePath();
1091
        Cursor cursor = context.getContentResolver().query(
1092
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
1093
                new String[]{MediaStore.Images.Media._ID},
1094
                MediaStore.Images.Media.DATA + "=? ",
1095
                new String[]{filePath}, null);
1096
1097
        if (cursor != null && cursor.moveToFirst()) {
1098
            int id = cursor.getInt(cursor
1099
                    .getColumnIndex(MediaStore.MediaColumns._ID));
1100
            Uri baseUri = Uri.parse("content://media/external/images/media");
1101
            return Uri.withAppendedPath(baseUri, "" + id);
1102
        } else {
1103
            if (imageFile.exists()) {
1104
                ContentValues values = new ContentValues();
1105
                values.put(MediaStore.Images.Media.DATA, filePath);
1106
                return context.getContentResolver().insert(
1107
                        MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
1108
            } else {
1109
                return null;
1110
            }
1111
        }
1112
    }
1113
1114
    public Bitmap decodeUriAsBitmap(Uri uri) {
1115
        Bitmap bitmap = null;
1116
        try {
1117
            bitmap = BitmapFactory.decodeStream(this.getContentResolver().openInputStream(uri));
1118
        } catch (FileNotFoundException e) {
1119
            e.printStackTrace();
1120
            return null;
1121
        }
1122
        return bitmap;
1123
    }
1124
1025
1125
    protected void onRestart() {
1026
    protected void onRestart() {
1126
        adapter.update();
1027
        adapter.update();

+ 6 - 55
app/src/main/java/com/electric/chargingpile/activity/ZoomingPhotoTextActivity.java

1
package com.electric.chargingpile.activity;
1
package com.electric.chargingpile.activity;
2
2
3
import android.content.Intent;
3
import android.content.Intent;
4
import android.graphics.Bitmap;
5
import android.os.Bundle;
4
import android.os.Bundle;
6
import android.os.Environment;
7
import android.provider.MediaStore;
8
import androidx.fragment.app.Fragment;
9
import androidx.fragment.app.FragmentActivity;
10
import androidx.fragment.app.FragmentManager;
11
import androidx.fragment.app.FragmentStatePagerAdapter;
12
import androidx.viewpager.widget.ViewPager.OnPageChangeListener;
13
import android.text.TextUtils;
5
import android.text.TextUtils;
14
import android.view.View;
6
import android.view.View;
15
import android.view.Window;
7
import android.view.Window;
20
import android.widget.TextView;
12
import android.widget.TextView;
21
import android.widget.Toast;
13
import android.widget.Toast;
22
14
15
import androidx.fragment.app.Fragment;
16
import androidx.fragment.app.FragmentActivity;
17
import androidx.fragment.app.FragmentManager;
18
import androidx.fragment.app.FragmentStatePagerAdapter;
19
import androidx.viewpager.widget.ViewPager.OnPageChangeListener;
20
23
import com.electric.chargingpile.R;
21
import com.electric.chargingpile.R;
24
import com.electric.chargingpile.application.MainApplication;
22
import com.electric.chargingpile.application.MainApplication;
25
import com.electric.chargingpile.data.TopicDetailBean;
23
import com.electric.chargingpile.data.TopicDetailBean;
34
import com.zhy.http.okhttp.OkHttpUtils;
32
import com.zhy.http.okhttp.OkHttpUtils;
35
import com.zhy.http.okhttp.callback.StringCallback;
33
import com.zhy.http.okhttp.callback.StringCallback;
36
34
37
import java.io.File;
38
import java.io.FileNotFoundException;
39
import java.io.FileOutputStream;
40
import java.io.IOException;
41
import java.util.ArrayList;
35
import java.util.ArrayList;
42
import java.util.HashMap;
36
import java.util.HashMap;
43
import java.util.Map;
37
import java.util.Map;
212
        // finish();
206
        // finish();
213
    }
207
    }
214
208
215
    public void saveBitmap(String picName, Bitmap bm) {
216
        if (bm != null) {
217
            String result = "";
218
            String folder = Environment.getExternalStorageDirectory().getAbsoluteFile() + File.separator + "touch/img/";
219
            File folderFile = new File(folder);
220
            try {
221
                if (!folderFile.exists()) {
222
                    folderFile.mkdirs();
223
                }
224
                File f = new File(folder, picName);
225
                if (!f.exists()) {
226
                    f.createNewFile();
227
                }
228
229
                FileOutputStream out = new FileOutputStream(f);
230
                bm.compress(Bitmap.CompressFormat.PNG, 90, out);
231
                out.flush();
232
                out.close();
233
                result = "success_sd";
234
                // 其次把文件插入到系统图库
235
                MediaStore.Images.Media.insertImage(getBaseContext().getContentResolver(),
236
                        f.getAbsolutePath(), picName, null);
237
                result = "success";
238
            } catch (FileNotFoundException e) {
239
                // TODO Auto-generated catch block
240
                e.printStackTrace();
241
                result = "fail";
242
            } catch (IOException e) {
243
                // TODO Auto-generated catch block
244
                e.printStackTrace();
245
                result = "fail";
246
            }
247
//            bm.recycle();
248
//            bm = null;
249
            if ("success".equals(result)) {
250
                Toast.makeText(this, "已成功保存到相册", Toast.LENGTH_SHORT).show();
251
            } else if ("success_sd".equals(result)) {
252
                Toast.makeText(this, "已成功保存到内存卡", Toast.LENGTH_SHORT).show();
253
            } else {
254
                Toast.makeText(this, "保存失败", Toast.LENGTH_SHORT).show();
255
            }
256
        }
257
    }
258
209
259
    @Override
210
    @Override
260
    public void onClick(View v) {
211
    public void onClick(View v) {

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

5
import android.database.sqlite.SQLiteDatabase;
5
import android.database.sqlite.SQLiteDatabase;
6
import android.graphics.Bitmap;
6
import android.graphics.Bitmap;
7
import android.os.Build;
7
import android.os.Build;
8
import android.os.Environment;
8

9
import android.os.StrictMode;
9
import android.os.StrictMode;
10
import android.text.TextUtils;
10
import android.text.TextUtils;
11
import android.util.Log;
11
import android.util.Log;
27
import com.electric.chargingpile.manager.ProfileManager;
27
import com.electric.chargingpile.manager.ProfileManager;
28
import com.electric.chargingpile.util.DES3;
28
import com.electric.chargingpile.util.DES3;
29
import com.electric.chargingpile.util.JsonUtils;
29
import com.electric.chargingpile.util.JsonUtils;
30
import com.electric.chargingpile.util.PhotoUtils;
30
import com.electric.chargingpile.util.SharedPreferencesHelper;
31
import com.electric.chargingpile.util.SharedPreferencesHelper;
31
import com.google.gson.Gson;
32
import com.google.gson.Gson;
32
import com.mob.MobSDK;
33
import com.mob.MobSDK;
38
import com.tencent.bugly.crashreport.CrashReport;
39
import com.tencent.bugly.crashreport.CrashReport;
39
import com.zhy.http.okhttp.OkHttpUtils;
40
import com.zhy.http.okhttp.OkHttpUtils;
40
import com.zhy.http.okhttp.callback.StringCallback;
41
import com.zhy.http.okhttp.callback.StringCallback;
41
import com.zhy.http.okhttp.log.LoggerInterceptor;
42

42

43
import java.io.BufferedReader;
43
import java.io.BufferedReader;
44
import java.io.BufferedWriter;
44
import java.io.BufferedWriter;
56

56

57
import cn.jpush.android.api.JPushInterface;
57
import cn.jpush.android.api.JPushInterface;
58
import okhttp3.Call;
58
import okhttp3.Call;
59
import okhttp3.OkHttpClient;
60

59

61

60

62
public class MainApplication extends MultiDexApplication {
61
public class MainApplication extends MultiDexApplication {
142
    public static Double search_jing = 0.0, search_wei = 0.0;
141
    public static Double search_jing = 0.0, search_wei = 0.0;
143
    public static Context context;
142
    public static Context context;
144
    public static String current_code = "3.5";
143
    public static String current_code = "3.5";
145
    public static String storePath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "cdz_android";
144
    public static String storePath = "";
146
    public static String q_content = "";
145
    public static String q_content = "";
147
    public static Map<String, String> q_map = new HashMap<>();
146
    public static Map<String, String> q_map = new HashMap<>();
148
    public static boolean isAppStart;
147
    public static boolean isAppStart;
156
    public void onCreate() {
155
    public void onCreate() {
157
        super.onCreate();
156
        super.onCreate();
158
        this.context = getApplicationContext();
157
        this.context = getApplicationContext();
158
        storePath = PhotoUtils.CACHE_DIR;
159
        StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
159
        StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
160
        StrictMode.setVmPolicy(builder.build());
160
        StrictMode.setVmPolicy(builder.build());
161
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
161
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {

+ 0 - 23
app/src/main/java/com/electric/chargingpile/fragment/YueFragment.java

1
package com.electric.chargingpile.fragment;
2
3
import android.os.Bundle;
4
import androidx.fragment.app.Fragment;
5
import android.view.LayoutInflater;
6
import android.view.View;
7
import android.view.ViewGroup;
8
9
import com.electric.chargingpile.R;
10
11
public class YueFragment extends Fragment {
12
13
14
    @Override
15
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
16
                             Bundle savedInstanceState) {
17
        // Inflate the layout for this fragment
18
        View view = inflater.inflate(R.layout.fragment_yue, null);
19
        return view;
20
    }
21
22
23
}

+ 0 - 304
app/src/main/java/com/electric/chargingpile/fragment/ZoomingPhotoTextFragment.java

1
package com.electric.chargingpile.fragment;
2
3
import android.graphics.Bitmap;
4
import android.os.Bundle;
5
import android.os.Environment;
6
import android.provider.MediaStore;
7
import androidx.fragment.app.Fragment;
8
import androidx.fragment.app.FragmentManager;
9
import androidx.fragment.app.FragmentStatePagerAdapter;
10
import androidx.viewpager.widget.ViewPager.OnPageChangeListener;
11
import android.text.TextUtils;
12
import android.view.LayoutInflater;
13
import android.view.View;
14
import android.view.ViewGroup;
15
import android.widget.LinearLayout;
16
import android.widget.RelativeLayout;
17
import android.widget.ScrollView;
18
import android.widget.TextView;
19
import android.widget.Toast;
20
21
import com.electric.chargingpile.R;
22
import com.electric.chargingpile.application.MainApplication;
23
import com.electric.chargingpile.data.TopicDetailBean;
24
import com.electric.chargingpile.iview.RecyclerItemClickListener;
25
import com.electric.chargingpile.util.JsonUtils;
26
import com.electric.chargingpile.util.ToastUtil;
27
import com.electric.chargingpile.widge.photoview.PhotoView;
28
import com.electric.chargingpile.widge.photoview.PhotoViewAttacher;
29
import com.electric.chargingpile.widge.photoview.ZoomingViewpager;
30
import com.zhy.http.okhttp.OkHttpUtils;
31
import com.zhy.http.okhttp.callback.StringCallback;
32
33
import java.io.File;
34
import java.io.FileNotFoundException;
35
import java.io.FileOutputStream;
36
import java.io.IOException;
37
import java.util.ArrayList;
38
import java.util.HashMap;
39
import java.util.Map;
40
41
import cn.sharesdk.framework.Platform;
42
import cn.sharesdk.framework.PlatformActionListener;
43
import okhttp3.Call;
44
45
public class ZoomingPhotoTextFragment extends Fragment implements PhotoViewAttacher.OnPhotoTapListener, View.OnClickListener, PlatformActionListener {
46
47
    int position = 0, index = 0;
48
    private RelativeLayout app_activity_redmandetail_title_left_layout;
49
    private TextView act_zomming_current_pic_data, act_zomming_current_pic_all;
50
    private ZoomingViewpager photoPager;
51
    LinearLayout act_zomming_dot;
52
    ImageScanAdapter samplePagerAdapter;
53
54
    private RelativeLayout act_photo_content_view, act_zomming_bottom_comment, act_zomming_bottom_layout;
55
    ScrollView act_photo_content_vieww;
56
57
    public ArrayList<String> photoArrayList = new ArrayList<>();
58
59
    private String targetId, targetType;
60
    View view;
61
62
    @Override
63
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
64
65
        view = inflater.inflate(R.layout.activity_zoom_car_photo, null, false);
66
        initView();
67
        return view;
68
    }
69
70
    protected void initView() {
71
72
        act_zomming_current_pic_all = (TextView) view.findViewById(R.id.act_zomming_current_pic_all);
73
        view.findViewById(R.id.app_activity_redmandetail_title_back_layout).setOnClickListener(this);
74
//        act_photo_content = (TextView) findViewById(R.id.act_photo_content);
75
        act_photo_content_view = (RelativeLayout) view.findViewById(R.id.act_photo_content_view);
76
        act_zomming_bottom_comment = (RelativeLayout) view.findViewById(R.id.act_zomming_bottom_comment);
77
        act_zomming_bottom_layout = (RelativeLayout) view.findViewById(R.id.act_zomming_bottom_layout);
78
        act_photo_content_vieww = (ScrollView) view.findViewById(R.id.act_photo_content_vieww);
79
        app_activity_redmandetail_title_left_layout = (RelativeLayout) view.findViewById(R.id
80
                .app_activity_redmandetail_title_left_layout);
81
        act_zomming_current_pic_data = (TextView) view.findViewById(R.id.act_zomming_current_pic_data);
82
83
        targetId = "7";
84
        targetType = "24";
85
        requestServer();
86
    }
87
88
    private void requestServer() {
89
        String url = MainApplication.urlNew + "/topic/detail.do";
90
        Map<String, String> map = new HashMap<>();
91
        map.put("targetId", targetId);
92
        map.put("targetType", targetType);
93
        map.put("limit", "3");
94
        OkHttpUtils.get().params(map).url(url).build().connTimeOut(6000).readTimeOut(6000).execute(new StringCallback() {
95
            @Override
96
            public void onError(Call call, Exception e) {
97
                ToastUtil.showToast(getActivity(), "加载失败,请重试", Toast.LENGTH_SHORT);
98
            }
99
100
            @Override
101
            public void onResponse(String response) {
102
                String rtnCode = JsonUtils.getKeyResult(response, "code");
103
                if ("1000".equals(rtnCode)) {
104
                    String rtnMsg = JsonUtils.getKeyResult(response, "data");
105
                    ArrayList<TopicDetailBean> topicDetailBeans = (ArrayList<TopicDetailBean>) JsonUtils.parseToObjectList(rtnMsg, TopicDetailBean.class);
106
                    setData(topicDetailBeans);
107
                }
108
            }
109
        });
110
    }
111
112
    private void setData(ArrayList<TopicDetailBean> topicDetailBeans) {
113
        position = 0;
114
        for (int i = 0; i < topicDetailBeans.size(); i++) {
115
            photoArrayList.add(topicDetailBeans.get(i).coverImgUrl);
116
        }
117
        act_zomming_current_pic_all.setText("/" + photoArrayList.size());
118
        initLayoutView();
119
        index = position;
120
        draw_Point(position);
121
    }
122
123
    /**
124
     * 绘制游标背景
125
     */
126
    int askFlg;
127
    String subsidyPrice;
128
129
    public void draw_Point(int index) {
130
        act_zomming_current_pic_data.setText((index + 1) + "");
131
    }
132
133
134
    private void initLayoutView() {
135
        act_zomming_dot = (LinearLayout) view.findViewById(R.id.act_zomming_dot);
136
        photoPager = (ZoomingViewpager) view.findViewById(R.id.act_zoomingphoto_photo);
137
        samplePagerAdapter = new ImageScanAdapter(getActivity().getSupportFragmentManager(), photoArrayList);
138
        photoPager.setAdapter(samplePagerAdapter);
139
        photoPager.setCurrentItem(position);
140
141
        photoPager.addOnPageChangeListener(new OnPageChangeListener() {
142
143
            @Override
144
            public void onPageSelected(int arg0) {
145
                index = arg0;
146
                draw_Point(arg0);
147
            }
148
149
            @Override
150
            public void onPageScrolled(int arg0, float arg1, int arg2) {
151
                // TODO Auto-generated method stub
152
153
            }
154
155
            @Override
156
            public void onPageScrollStateChanged(int arg0) {
157
                // TODO Auto-generated method stub
158
159
            }
160
        });
161
    }
162
163
    PhotoViewAttacher mAttacher;
164
    PhotoView photoView;
165
166
    /**
167
     * A callback to receive where the user taps on a photo. You will only
168
     * receive a callback if the user taps on the actual photo, tapping on
169
     * 'whitespace' will be ignored.
170
     *
171
     * @param view - View the user tapped.
172
     * @param x    - where the user tapped from the of the Drawable, as
173
     *             percentage of the Drawable width.
174
     * @param y    - where the user tapped from the top of the Drawable, as
175
     */
176
    @Override
177
    public void onPhotoTap(View view, float x, float y) {
178
        if (app_activity_redmandetail_title_left_layout.getVisibility() == View.VISIBLE) {
179
            app_activity_redmandetail_title_left_layout.setVisibility(View.GONE);
180
            act_photo_content_vieww.setVisibility(View.GONE);
181
            act_photo_content_view.setVisibility(View.GONE);
182
//            pdv.setVisibility(View.GONE);
183
            act_zomming_bottom_comment.setVisibility(View.GONE);
184
185
            act_zomming_bottom_layout.setVisibility(View.VISIBLE);
186
        } else {
187
            app_activity_redmandetail_title_left_layout.setVisibility(View.VISIBLE);
188
            act_photo_content_vieww.setVisibility(View.VISIBLE);
189
            act_photo_content_view.setVisibility(View.VISIBLE);
190
            act_zomming_bottom_comment.setVisibility(View.VISIBLE);
191
            act_zomming_bottom_layout.setVisibility(View.GONE);
192
        }
193
        // finish();
194
    }
195
196
    public void saveBitmap(String picName, Bitmap bm) {
197
        if (bm != null) {
198
            String result = "";
199
            String folder = Environment.getExternalStorageDirectory().getAbsoluteFile() + File.separator + "touch/img/";
200
            File folderFile = new File(folder);
201
            try {
202
                if (!folderFile.exists()) {
203
                    folderFile.mkdirs();
204
                }
205
                File f = new File(folder, picName);
206
                if (!f.exists()) {
207
                    f.createNewFile();
208
                }
209
210
                FileOutputStream out = new FileOutputStream(f);
211
                bm.compress(Bitmap.CompressFormat.PNG, 90, out);
212
                out.flush();
213
                out.close();
214
                result = "success_sd";
215
                // 其次把文件插入到系统图库
216
                MediaStore.Images.Media.insertImage(getActivity().getBaseContext().getContentResolver(),
217
                        f.getAbsolutePath(), picName, null);
218
                result = "success";
219
            } catch (FileNotFoundException e) {
220
                // TODO Auto-generated catch block
221
                e.printStackTrace();
222
                result = "fail";
223
            } catch (IOException e) {
224
                // TODO Auto-generated catch block
225
                e.printStackTrace();
226
                result = "fail";
227
            }
228
//            bm.recycle();
229
//            bm = null;
230
            if ("success".equals(result)) {
231
                Toast.makeText(getActivity(), "已成功保存到相册", Toast.LENGTH_SHORT).show();
232
            } else if ("success_sd".equals(result)) {
233
                Toast.makeText(getActivity(), "已成功保存到内存卡", Toast.LENGTH_SHORT).show();
234
            } else {
235
                Toast.makeText(getActivity(), "保存失败", Toast.LENGTH_SHORT).show();
236
            }
237
        }
238
    }
239
240
    @Override
241
    public void onClick(View v) {
242
        switch (v.getId()) {
243
        }
244
    }
245
246
    @Override
247
    public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {
248
        Toast.makeText(getActivity(), platform.getName(), Toast.LENGTH_SHORT).show();
249
    }
250
251
    @Override
252
    public void onError(Platform platform, int i, Throwable throwable) {
253
        Toast.makeText(getActivity(), platform.getName(), Toast.LENGTH_SHORT).show();
254
    }
255
256
    @Override
257
    public void onCancel(Platform platform, int i) {
258
        Toast.makeText(getActivity(), platform.getName(), Toast.LENGTH_SHORT).show();
259
    }
260
261
    class ImageScanAdapter extends FragmentStatePagerAdapter {
262
263
        private ArrayList<String> picData;
264
265
        public ImageScanAdapter(FragmentManager fm, ArrayList<String> picData) {
266
            super(fm);
267
            this.picData = picData;
268
        }
269
270
        @Override
271
        public Fragment getItem(int arg0) {
272
            String picUrl = picData.get(arg0);
273
            Bundle b = new Bundle();
274
            if (!TextUtils.isEmpty(picUrl)) {
275
                b.putString("url", picUrl);
276
            }
277
278
            ImageScanTextFragment f = new ImageScanTextFragment();
279
            f.setArguments(b);
280
            return f;
281
        }
282
283
        @Override
284
        public int getCount() {
285
            return picData.size();
286
        }
287
288
    }
289
290
    private class MainAdapterItemClickListener implements RecyclerItemClickListener {
291
        public void onItemClickListener(int index) {
292
            position = 0;
293
//            for (int i = 0; i < index; i++) {
294
//                for (int j = 0; j < picsVos.get(i).picsBeanList.size(); j++) {
295
//                    position++;
296
//                }
297
//            }
298
            draw_Point(position);
299
            photoPager.setCurrentItem(position);
300
//            }
301
302
        }
303
    }
304
}

+ 152 - 0
app/src/main/java/com/electric/chargingpile/util/DownloadUtil.java

1
package com.electric.chargingpile.util;
2
3
import android.content.Context;
4
5
import android.util.Log;
6
7
import androidx.annotation.NonNull;
8
9
10
import java.io.File;
11
import java.io.FileOutputStream;
12
import java.io.IOException;
13
import java.io.InputStream;
14
import java.util.concurrent.TimeUnit;
15
16
import okhttp3.Call;
17
import okhttp3.Callback;
18
import okhttp3.OkHttpClient;
19
import okhttp3.Request;
20
import okhttp3.Response;
21
22
public class DownloadUtil {
23
 
24
    private static DownloadUtil downloadUtil;
25
    private final OkHttpClient okHttpClient;
26
    private Context context;
27
    private String TAG = "下载页面";
28
 
29
    public static DownloadUtil getInstance() {
30
        if (downloadUtil == null) {
31
            downloadUtil = new DownloadUtil();
32
        }
33
        return downloadUtil;
34
    }
35
 
36
    private DownloadUtil() {
37
        okHttpClient = new OkHttpClient.Builder()
38
                .readTimeout(20, TimeUnit.MINUTES)
39
                .writeTimeout(20, TimeUnit.MINUTES)
40
                .connectTimeout(20, TimeUnit.MINUTES)
41
                .build();
42
    }
43
 
44
    /**
45
     * @param url 下载连接
46
     * @param saveDir 储存下载文件的SDCard目录
47
     * @param listener 下载监听
48
     */
49
    public void download(Context context, final String url, final String saveDir,final String fileName, final OnDownloadListener listener) {
50
        this.context= context;
51
        // 需要token的时候可以这样做
52
        // SharedPreferences sp=MyApp.getAppContext().getSharedPreferences("loginInfo", MODE_PRIVATE);
53
        // Request request = new Request.Builder().header("token",sp.getString("token" , "")).url(url).build();
54
 
55
        Request request = new Request.Builder().url(url)
56
                .build();
57
        
58
        okHttpClient.newCall(request).enqueue(new Callback() {
59
            @Override
60
            public void onFailure(Call call, IOException e) {
61
                // 下载失败
62
                listener.onDownloadFailed(e);
63
            }
64
            @Override
65
            public void onResponse(Call call, Response response) throws IOException {
66
                InputStream is = null;
67
                byte[] buf = new byte[2048];
68
                int len = 0;
69
                FileOutputStream fos = null;
70
                // 储存下载文件的目录
71
                String savePath = isExistDir(saveDir);
72
                Log.w(TAG,"存储下载目录:"+savePath);
73
                try {
74
                    is = response.body().byteStream();
75
                    long total = response.body().contentLength();
76
                    File file = new File(savePath, getNameFromUrl(fileName));
77
                    Log.w(TAG,"最终路径:"+file);
78
                    fos = new FileOutputStream(file);
79
                    long sum = 0;
80
                    while ((len = is.read(buf)) != -1) {
81
                        fos.write(buf, 0, len);
82
                        sum += len;
83
                        int progress = (int) (sum * 1.0f / total * 100);
84
                        // 下载中
85
                        listener.onDownloading(progress);
86
                    }
87
                    fos.flush();
88
                    // 下载完成
89
                    listener.onDownloadSuccess(file);
90
                } catch (Exception e) {
91
                    listener.onDownloadFailed(e);
92
                } finally {
93
                    try {
94
                        if (is != null)
95
                            is.close();
96
                    } catch (IOException e) {
97
                    }
98
                    try {
99
                        if (fos != null)
100
                            fos.close();
101
                    } catch (IOException e) {
102
                    }
103
                }
104
            }
105
        });
106
    }
107
 
108
    /**
109
     * @param saveDir
110
     * @return
111
     * @throws IOException
112
     * 判断下载目录是否存在
113
     */
114
    private String isExistDir(String saveDir) throws IOException {
115
        // 下载位置
116
        File downloadFile = new File(saveDir);
117
        if (!downloadFile.mkdirs()) {
118
            downloadFile.createNewFile();
119
        }
120
        String savePath = downloadFile.getAbsolutePath();
121
        Log.w(TAG,"下载目录:"+savePath);
122
        return savePath;
123
    }
124
 
125
    /**
126
     * @param url
127
     * @return
128
     * 传入文件名
129
     */
130
    @NonNull
131
    public String getNameFromUrl(String url) {
132
        return url;
133
    }
134
 
135
    public interface OnDownloadListener {
136
        /**
137
         * 下载成功
138
         */
139
        void onDownloadSuccess(File file);
140
 
141
        /**
142
         * @param progress
143
         * 下载进度
144
         */
145
        void onDownloading(int progress);
146
 
147
        /**
148
         * 下载失败
149
         */
150
        void onDownloadFailed(Exception e);
151
    }
152
}

+ 0 - 32
app/src/main/java/com/electric/chargingpile/util/ImageTools.java

252
        }
252
        }
253
    }
253
    }
254
254
255
    public static boolean saveImageToGallery(Context context, Bitmap bmp, String photoName) {
256
        // 首先保存图片
257
        String storePath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "cdz_android";
258
        File appDir = new File(storePath);
259
        if (!appDir.exists()) {
260
            appDir.mkdir();
261
        }
262
        String fileName = photoName + ".png";
263
        File file = new File(appDir, fileName);
264
        try {
265
            FileOutputStream fos = new FileOutputStream(file);
266
            //通过io流的方式来压缩保存图片
267
            boolean isSuccess = bmp.compress(Bitmap.CompressFormat.PNG, 100, fos);
268
            fos.flush();
269
            fos.close();
270
271
            //把文件插入到系统图库
272
            //MediaStore.Images.Media.insertImage(context.getContentResolver(), file.getAbsolutePath(), fileName, null);
273
274
            //保存图片后发送广播通知更新数据库
275
            Uri uri = Uri.fromFile(file);
276
            context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri));
277
            if (isSuccess) {
278
                return true;
279
            } else {
280
                return false;
281
            }
282
        } catch (IOException e) {
283
            e.printStackTrace();
284
        }
285
        return false;
286
    }
287
255
288
}
256
}

+ 82 - 0
app/src/main/java/com/electric/chargingpile/util/PhotoUtils.java

6
6
7
import android.annotation.SuppressLint;
7
import android.annotation.SuppressLint;
8
import android.app.Activity;
8
import android.app.Activity;
9
import android.content.ContentResolver;
9
import android.content.ContentUris;
10
import android.content.ContentUris;
11
import android.content.ContentValues;
10
import android.content.Context;
12
import android.content.Context;
11
import android.content.Intent;
13
import android.content.Intent;
12
import android.database.Cursor;
14
import android.database.Cursor;
16
import android.os.Environment;
18
import android.os.Environment;
17
import android.provider.DocumentsContract;
19
import android.provider.DocumentsContract;
18
import android.provider.MediaStore;
20
import android.provider.MediaStore;
21
import android.widget.Toast;
22
23
import androidx.core.content.FileProvider;
19
import androidx.fragment.app.Fragment;
24
import androidx.fragment.app.Fragment;
20
25
26
import com.electric.chargingpile.activity.AboutActivity;
27
import com.electric.chargingpile.application.MainApplication;
28
29
import java.io.File;
30
import java.io.FileNotFoundException;
31
import java.io.FileOutputStream;
32
import java.io.IOException;
33
import java.io.OutputStream;
34
21
/**
35
/**
22
 * 相片工具类
36
 * 相片工具类
23
 */
37
 */
283
        return "com.android.providers.media.documents".equals(uri.getAuthority());
297
        return "com.android.providers.media.documents".equals(uri.getAuthority());
284
    }
298
    }
285
299
300
   public static String CACHE_DIR = MainApplication.context.getExternalCacheDir() + File.separator + "cdz/";
301
   public static String DOWNLOADS = MainApplication.context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS) + File.separator + "cdz/";
302
303
304
    public static void saveBitmap(Context context,Bitmap mBitmap,String filePath,String fileName) {
305
        File directory = new File(filePath);
306
        File f = new File(directory, fileName);
307
        try {
308
            if (!directory.exists()) {
309
                directory.mkdir();//没有目录先创建目录
310
            }
311
            f.createNewFile();
312
        } catch (IOException e) {
313
            // TODO Auto-generated catch block
314
        }
315
        FileOutputStream fOut = null;
316
        try {
317
            fOut = new FileOutputStream(f);
318
        } catch (Exception e) {
319
            e.printStackTrace();
320
        }
321
        mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
322
        Toast.makeText(context, "保存成功", Toast.LENGTH_SHORT).show();
323
        try {
324
            fOut.flush();
325
        } catch (IOException e) {
326
            e.printStackTrace();
327
        }
328
        try {
329
            fOut.close();
330
        } catch (IOException e) {
331
            e.printStackTrace();
332
        }
333
        ContentResolver contentResolver = MainApplication.context.getContentResolver();
334
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
335
            Uri insert = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new ContentValues());
336
            try {
337
                OutputStream outputStream =  contentResolver.openOutputStream(insert);
338
                if (outputStream!=null){
339
                    mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
340
                }
341
            } catch (FileNotFoundException e) {
342
                e.printStackTrace();
343
            }
344
345
        }else{
346
            MediaStore.Images.Media.insertImage(contentResolver, mBitmap, "", "");
347
            Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
348
            Uri uri = parseUri(new File(CACHE_DIR));
349
            intent.setData(uri);
350
            context.sendBroadcast(intent);
351
        }
352
    }
353
    public static void saveBitmap(Context context,Bitmap mBitmap) {
354
        saveBitmap(context,mBitmap,CACHE_DIR,System.currentTimeMillis()+".jpeg");
355
    }
356
    public static Uri parseUri(File cameraFile) {
357
        Uri imageUri;
358
        String authority = MainApplication.context.getPackageName() + ".provider";
359
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
360
            //通过FileProvider创建一个content类型的Uri
361
            imageUri = FileProvider.getUriForFile(MainApplication.context, authority, cameraFile);
362
        } else {
363
            imageUri = Uri.fromFile(cameraFile);
364
        }
365
        return imageUri;
366
    }
367
286
}
368
}
287
369

+ 1 - 0
app/src/main/res/xml/provider_paths.xml

2
<paths xmlns:android="http://schemas.android.com/apk/res/android">
2
<paths xmlns:android="http://schemas.android.com/apk/res/android">
3
    <!--"."表示所有路径-->
3
    <!--"."表示所有路径-->
4
    <external-path name="external_files" path="."/>
4
    <external-path name="external_files" path="."/>
5
    <root-path path="" name="rc_root_path"/>
5
</paths>
6
</paths>