Compare commits

...
12 Commits
Author SHA1 Message Date
admin 7f11dc008a Merge branch 'dev' 2026-01-13 11:43:19 +08:00
admin f67f062bfe 420版本 2026-01-13 11:42:04 +08:00
admin 992ac89baa Merge branch 'dev' 2025-12-15 14:11:53 +08:00
admin 2491213ca6 v418 2025-12-15 14:10:54 +08:00
admin 069c37e4ba Merge branch 'dev' 2025-11-19 14:08:18 +08:00
admin 434f134f53 解决安卓13+兼容 2025-11-19 14:07:47 +08:00
admin 4f1794a466 Merge branch 'dev' 2025-11-18 15:43:31 +08:00
admin bff765fef9 分支策略 2025-11-18 15:43:17 +08:00
admin 1b9c266c3a Merge branch 'dev' 2025-11-18 15:39:54 +08:00
admin c9a7ae7d38 test dev22 2025-11-18 15:39:18 +08:00
admin 8855c7ad5c Merge branch 'dev' 2025-11-18 15:35:31 +08:00
admin 0b85733575 test dev 2025-11-18 15:33:08 +08:00
154 changed files with 8324 additions and 5441 deletions
+16 -1
View File
@@ -1,4 +1,19 @@
# MyApplication2 # MyApplication2
备份3.9.5 大字版 备份3.9.5 大字版
uniapp 第一版 uniapp 第一版
测试dev 分支
测试dev 分支22
git checkout dev
git add .
git commit -m 'desc'
git push
git checkout master
git merge --no-ff dev
git push
git checkout dev
+6 -6
View File
@@ -27,9 +27,10 @@ android {
defaultConfig { defaultConfig {
applicationId "cn.shangyu.gdxzExpert" applicationId "cn.shangyu.gdxzExpert"
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 34 // targetSdkVersion > 32 需要处理照片权限的问题
versionCode 133 targetSdkVersion 32
versionName "4.1.6" versionCode 420
versionName "4.2.0"
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
multiDexEnabled true multiDexEnabled true
ndk { ndk {
@@ -258,10 +259,9 @@ dependencies {
implementation 'com.facebook.fresco:fresco:2.5.0'//必须集成,图片加载需要 implementation 'com.facebook.fresco:fresco:2.5.0'//必须集成,图片加载需要
implementation 'com.facebook.fresco:animated-gif:2.5.0'//必须集成,图片加载需要 implementation 'com.facebook.fresco:animated-gif:2.5.0'//必须集成,图片加载需要
implementation 'androidx.webkit:webkit:1.5.0' //4.45版本之后 必须集成,用来支持暗黑模式 implementation 'androidx.webkit:webkit:1.5.0' //4.45版本之后 必须集成,用来支持暗黑模式
implementation 'com.github.bumptech.glide:glide:4.1.1'//必须集成,图片加载需要 implementation 'com.github.bumptech.glide:glide:4.9.0'//必须集成,图片加载需要
// implementation 'com.github.bumptech.glide:glide:4.9.0'
// 重要:避免部分设备可能卡死的问题 // 重要:避免部分设备可能卡死的问题
// annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:6.7.9' implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:6.7.9'
} }
@@ -1,26 +1,26 @@
package test.shangyu.cn.myapplication; //package test.shangyu.cn.myapplication;
//
import android.content.Context; //import android.content.Context;
import androidx.test.platform.app.InstrumentationRegistry; //import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.ext.junit.runners.AndroidJUnit4; //import androidx.test.ext.junit.runners.AndroidJUnit4;
//
import org.junit.Test; //import org.junit.Test;
import org.junit.runner.RunWith; //import org.junit.runner.RunWith;
//
import static org.junit.Assert.*; //import static org.junit.Assert.*;
//
/** ///**
* Instrumented test, which will execute on an Android device. // * Instrumented test, which will execute on an Android device.
* // *
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a> // * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/ // */
@RunWith(AndroidJUnit4.class) //@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest { //public class ExampleInstrumentedTest {
@Test // @Test
public void useAppContext() throws Exception { // public void useAppContext() throws Exception {
// Context of the app under test. // // Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext(); // Context appContext = InstrumentationRegistry.getTargetContext();
//
assertEquals("test.shangyu.cn.myapplication", appContext.getPackageName()); // assertEquals("test.shangyu.cn.myapplication", appContext.getPackageName());
} // }
} //}
File diff suppressed because it is too large Load Diff
@@ -1,3 +1,3 @@
{ {
"prompt" : "none" "prompt" : "none"
} }
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
{"@platforms":["android","iPhone","iPad"],"id":"__UNI__89F511F","name":"肝胆相照专家版","version":{"name":"4.1.5","code":100},"description":"","developer":{"name":"","email":"","url":""},"permissions":{"Share":{},"Webview-x5":{},"UIWebview":{},"VideoPlayer":{},"OAuth":{},"Barcode":{},"Camera":{},"UniNView":{"description":"UniNView原生渲染"}},"plus":{"useragent":{"value":"uni-app gdxz","concatenate":true},"splashscreen":{"target":"id:1","autoclose":true,"waiting":true,"delay":0},"popGesture":"close","launchwebview":{"render":"always","id":"1","kernel":"WKWebview"},"runmode":"liberate","usingComponents":true,"nvueCompiler":"uni-app","nvueStyleCompiler":"uni-app","compatible":{"ignoreVersion":true},"nativePlugins":{"NIMUniPlugin":{"PUSH_VIVO_APPID":"100034326","PUSH_VIVO_APPKEY":"e789634c1f76c8f184b1def1101ce824","PUSH_HONOR_APPID":"900782424","__plugin_info__":{"name":"NIMUniPlugin","description":"uni消息推送插件","platforms":"Android,iOS","url":"","android_package_name":"","ios_bundle_id":"","isCloud":false,"bought":-1,"pid":"","parameters":{"PUSH_VIVO_APPID":{"des":"厂商VIVO-app_id","key":"com.vivo.push.app_id","value":""},"PUSH_VIVO_APPKEY":{"des":"厂商VIVO-app_key","key":"com.vivo.push.api_key","value":""},"PUSH_HONOR_APPID":{"des":"厂商HONOR-app_id","key":"com.hihonor.push.app_id","value":""}}}}},"statusbar":{"immersed":"supportedDevice","style":"dark","background":"#F8F8F8"},"uniStatistics":{"version":"2"},"allowsInlineMediaPlayback":true,"uni-app":{"control":"uni-v3","vueVersion":"3","compilerVersion":"4.76","nvueCompiler":"uni-app","renderer":"auto","nvue":{"flex-direction":"column"},"nvueLaunchMode":"normal","webView":{"minUserAgentVersion":"49.0"}}},"app-harmony":{"useragent":{"value":"uni-app","concatenate":true},"uniStatistics":{"version":"2"}},"locale":"zh-Hans","screenOrientation":["portrait-primary","portrait-secondary"],"launch_path":"__uniappview.html","fallbackLocale":"zh-Hans"} {"@platforms":["android","iPhone","iPad"],"app-harmony":{"uniStatistics":{"version":"2"},"useragent":{"concatenate":true,"value":"uni-app"}},"description":"","developer":{"email":"","name":"","url":""},"fallbackLocale":"zh-Hans","id":"__UNI__89F511F","launch_path":"__uniappview.html","locale":"zh-Hans","name":"肝胆相照专家版","permissions":{"Barcode":{},"Camera":{},"OAuth":{},"Payment":{},"Share":{},"UIWebview":{},"UniNView":{"description":"UniNView原生渲染"},"VideoPlayer":{},"Webview-x5":{}},"plus":{"allowsInlineMediaPlayback":true,"compatible":{"ignoreVersion":true},"launchwebview":{"id":"1","kernel":"WKWebview","render":"always"},"nativePlugins":{"NIMUniPlugin":{"PUSH_HONOR_APPID":"900782424","PUSH_VIVO_APPID":"100034326","PUSH_VIVO_APPKEY":"e789634c1f76c8f184b1def1101ce824","__plugin_info__":{"android_package_name":"","bought":-1,"description":"uni消息推送插件","ios_bundle_id":"","isCloud":false,"name":"NIMUniPlugin","parameters":{"PUSH_HONOR_APPID":{"des":"厂商HONOR-app_id","key":"com.hihonor.push.app_id","value":""},"PUSH_VIVO_APPID":{"des":"厂商VIVO-app_id","key":"com.vivo.push.app_id","value":""},"PUSH_VIVO_APPKEY":{"des":"厂商VIVO-app_key","key":"com.vivo.push.api_key","value":""}},"pid":"","platforms":"Android,iOS","url":""}}},"nvueCompiler":"uni-app","nvueStyleCompiler":"uni-app","popGesture":"close","runmode":"liberate","splashscreen":{"autoclose":true,"delay":0,"target":"id:1","waiting":true},"statusbar":{"background":"#F8F8F8","immersed":"supportedDevice","style":"dark"},"uni-app":{"compilerVersion":"4.87","control":"uni-v3","nvue":{"flex-direction":"column"},"nvueCompiler":"uni-app","nvueLaunchMode":"normal","renderer":"auto","vueVersion":"3","webView":{"minUserAgentVersion":"49.0"}},"uniStatistics":{"version":"2"},"useragent":{"concatenate":true,"value":"uni-app gdxz"},"usingComponents":true},"screenOrientation":["portrait-primary","portrait-secondary"],"version":{"code":420,"name":"4.2.0"}}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

@@ -1,20 +1,20 @@
@font-face { @font-face {
font-family: "customicons"; /* Project id 2878519 */ font-family: "customicons"; /* Project id 2878519 */
src:url('/static/customicons.ttf') format('truetype'); src:url('/static/customicons.ttf') format('truetype');
} }
.customicons { .customicons {
font-family: "customicons" !important; font-family: "customicons" !important;
} }
.youxi:before { .youxi:before {
content: "\e60e"; content: "\e60e";
} }
.wenjian:before { .wenjian:before {
content: "\e60f"; content: "\e60f";
} }
.zhuanfa:before { .zhuanfa:before {
content: "\e610"; content: "\e610";
} }
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

+2 -3
View File
@@ -1,7 +1,6 @@
<hbuilder version="1.9.9.80110" debug="false" syncDebug ="false"> <hbuilder version="1.9.9.80110" debug="false" syncDebug ="false">
<!--<hbuilder version="1.9.9.80110" debug="false" syncDebug ="true">-->
<apps> <apps>
<app appid="unimp" appver="1.0"/> <app appid="unimp" appver="1.0"/>
</apps> </apps>
</hbuilder> </hbuilder>
+11 -11
View File
@@ -76,17 +76,17 @@ html,body{
</head> </head>
<body> <body>
<div style="width:100%;height:20%;"></div> <div style="width:100%;height:20%;"></div>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 512 512" style="height:20%;width:30%"> <!-- <svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 512 512" style="height:20%;width:30%"> -->
<g id="icomoon-ignore"> <!-- <g id="icomoon-ignore">-->
<line stroke-width="1" x1="" y1="" x2="" y2="" stroke="#449FDB" opacity=""></line> <!-- <line stroke-width="1" x1="" y1="" x2="" y2="" stroke="#449FDB" opacity=""></line>-->
</g> <!-- </g>-->
<path d="M256 0c-141.385 0-256 114.615-256 256s114.615 256 256 256 256-114.615 256-256-114.615-256-256-256zM352 128c17.673 0 32 14.327 32 32s-14.327 32-32 32-32-14.327-32-32 14.327-32 32-32zM160 128c17.673 0 32 14.327 32 32s-14.327 32-32 32-32-14.327-32-32 14.327-32 32-32zM352.049 390.37c-19.587-32.574-55.272-54.37-96.049-54.37s-76.462 21.796-96.049 54.37l-41.164-24.698c27.98-46.535 78.958-77.672 137.213-77.672s109.232 31.137 137.213 77.672l-41.164 24.698z" fill="#666666"></path> <!-- <path d="M256 0c-141.385 0-256 114.615-256 256s114.615 256 256 256 256-114.615 256-256-114.615-256-256-256zM352 128c17.673 0 32 14.327 32 32s-14.327 32-32 32-32-14.327-32-32 14.327-32 32-32zM160 128c17.673 0 32 14.327 32 32s-14.327 32-32 32-32-14.327-32-32 14.327-32 32-32zM352.049 390.37c-19.587-32.574-55.272-54.37-96.049-54.37s-76.462 21.796-96.049 54.37l-41.164-24.698c27.98-46.535 78.958-77.672 137.213-77.672s109.232 31.137 137.213 77.672l-41.164 24.698z" fill="#666666"></path>-->
</svg> <!-- </svg>-->
<p style="font-size:18px;font-weight:bolder;">We're sorry ...</p> <p style="font-size:18px;font-weight:bolder;">网络异常</p>
<p id="info" style="font-size:12px;"></p> <!-- <p id="info" style="font-size:12px;"></p>-->
<!--<div class="button" onclick="history.back()">Retry</div>--> <!--<div class="button" onclick="history.back()">Retry</div>-->
<div class="button" onclick="if(history.length == 1){ws.close();}else{ws.back();ws.back();}">Back</div> <!-- <div class="button" onclick="if(history.length == 1){ws.close();}else{ws.back();ws.back();}">返回</div>-->
<div class="button" onclick="ws.close()">Close</div> <!-- <div class="button" onclick="ws.close()">Close</div>-->
<div class="button" onclick="plus.runtime.restart()">Restart</div> <div class="button" onclick="plus.runtime.quit()">关闭</div>
</body> </body>
</html> </html>
@@ -843,32 +843,22 @@ public class AddCaseRecordActivity extends BaseActivity implements
@Override @Override
public void onClick(View v) { public void onClick(View v) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
// Android 13+ (API 33+) 拍照主要需要 CAMERA 权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (PermissionsUtil.hasPermission(AddCaseRecordActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { boolean hasPermission;
String[] permissionsToRequest;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
// Android 13+ 拍照主要需要 CAMERA 权限
hasPermission = PermissionsUtil.hasPermission(AddCaseRecordActivity.this, Manifest.permission.CAMERA);
permissionsToRequest = new String[]{Manifest.permission.CAMERA};
} else { } else {
EasyWindow.with(AddCaseRecordActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) // Android 12及以下需要 CAMERA 和存储权限
hasPermission = PermissionsUtil.hasPermission(AddCaseRecordActivity.this, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE);
.setContentView(R.layout.float_top_dialog_new).show(); permissionsToRequest = new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
PermissionsUtil.requestPermission(AddCaseRecordActivity.this, new PermissionListener() {
@Override
public void permissionGranted(@NonNull String[] permissions) {
EasyWindow.cancelAll();
}
@Override
public void permissionDenied(@NonNull String[] permissions) {
//用户拒绝了访问读写的申请
EasyWindow.cancelAll(); return;
}
}, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE});
} }
} if (hasPermission) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (PermissionsUtil.hasPermission(AddCaseRecordActivity.this, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
//有访问摄像头的权限 //有访问摄像头的权限
takePhoto11(); takePhoto11();
} else { } else {
@@ -888,7 +878,7 @@ public class AddCaseRecordActivity extends BaseActivity implements
EasyWindow.cancelAll(); EasyWindow.cancelAll();
} }
}, new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); }, permissionsToRequest);
} }
}else { }else {
@@ -903,11 +893,17 @@ public class AddCaseRecordActivity extends BaseActivity implements
@Override @Override
public void onClick(View v) { public void onClick(View v) {
// TODO Auto-generated method stub
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // Android 6.0 ~ 12 使用存储权限
if (PermissionsUtil.hasPermission(AddCaseRecordActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { boolean hasPermission;
//有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录 String[] permissionsToRequest;
Intent intent = new Intent(mActivity, PhotoAlbumActivity.class);
hasPermission = PermissionsUtil.hasPermission(AddCaseRecordActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE);
permissionsToRequest = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
if (hasPermission) {
//有访问相册的权限
Intent intent = new Intent(mActivity, AllPhotosActivity.class);
intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); intent.putExtra("photonum", "" + (mBitmaps.size() - 1));
mActivity.startActivityForResult(intent, mActivity.startActivityForResult(intent,
SELECT_PIC_BY_PICK_PHOTO); SELECT_PIC_BY_PICK_PHOTO);
@@ -920,7 +916,7 @@ public class AddCaseRecordActivity extends BaseActivity implements
public void permissionGranted(@NonNull String[] permissions) { public void permissionGranted(@NonNull String[] permissions) {
EasyWindow.cancelAll(); EasyWindow.cancelAll();
// //
Intent intent = new Intent(mActivity, PhotoAlbumActivity.class); Intent intent = new Intent(mActivity, AllPhotosActivity.class);
intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); intent.putExtra("photonum", "" + (mBitmaps.size() - 1));
mActivity.startActivityForResult(intent, mActivity.startActivityForResult(intent,
SELECT_PIC_BY_PICK_PHOTO); SELECT_PIC_BY_PICK_PHOTO);
@@ -932,15 +928,9 @@ public class AddCaseRecordActivity extends BaseActivity implements
EasyWindow.cancelAll(); EasyWindow.cancelAll();
} }
}, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); }, permissionsToRequest);
} }
}else {
Intent intent = new Intent(mActivity, PhotoAlbumActivity.class);
intent.putExtra("photonum", "" + (mBitmaps.size() - 1));
mActivity.startActivityForResult(intent,
SELECT_PIC_BY_PICK_PHOTO);
}
} }
}); });
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,460 @@
package cn.shangyu.gdxzExpert.activity;
import android.Manifest;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.os.Build;
import android.provider.MediaStore;
import android.provider.MediaStore.Images.Thumbnails;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.FrameLayout.LayoutParams;
import android.widget.GridView;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import com.gyf.immersionbar.ImmersionBar;
import java.io.InvalidClassException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import cn.shangyu.gdxzExpert.R;
import cn.shangyu.gdxzExpert.adapter.PhotoAdappter2;
import cn.shangyu.gdxzExpert.base.BaseActivity;
import cn.shangyu.gdxzExpert.bean.PhotoAibum;
import cn.shangyu.gdxzExpert.bean.PhotoItem;
import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferenceSettings;
import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferences;
import cn.shangyu.gdxzExpert.photo.AlbumPreviewActivity;
import cn.shangyu.gdxzExpert.utils.LogUtil;
import cn.shangyu.gdxzExpert.utils.ToastUtil;
import cn.shangyu.gdxzExpert.utils.UIUtils;
import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState;
/******************************************
* 类描述: 直接显示全部照片的相册选择页面 类名称:AllPhotosActivity
*
* @version: 1.0
* @author: Auto
* @time: 2024
*****************************************/
public class AllPhotosActivity extends BaseActivity {
private GridView photosGV;
private PhotoAdappter2 adapter;
private View view;
private Intent getIntent;
private String haveNums;
private String istopc;
private boolean isTopc = false;
private boolean isTalke = false;
private ArrayList<PhotoItem> gl_arr = new ArrayList<PhotoItem>();
private int PhotoNum = 8;
int maxnumber, issendgroup;
// 设置获取图片的字段信息
private static final String[] STORE_IMAGES = {
MediaStore.Images.Media.DISPLAY_NAME, // 显示的名称
MediaStore.Images.Media.DATA,//路径
MediaStore.Images.Media.LONGITUDE, // 经度
MediaStore.Images.Media._ID, // id
MediaStore.Images.Media.BUCKET_ID, // dir id 目录
MediaStore.Images.Media.BUCKET_DISPLAY_NAME // dir name 目录名字
};
@Override
public void setTitle() {
top_title.setText("选择图片");
}
private PhotoAibum allPhotosAibum;
@Override
public View onCreateSuccessedView() {
LogUtil.d("AllPhotosActivity", "onCreateSuccessedView: 开始创建视图");
ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init();
view = UIUtils.inflate(R.layout.activity_photoalbum);
photosGV = (GridView) view.findViewById(R.id.album_gridview);
if (photosGV == null) {
LogUtil.e("AllPhotosActivity", "onCreateSuccessedView: photosGV 为 null");
}
// 直接加载所有照片
allPhotosAibum = getAllPhotos();
LogUtil.d("AllPhotosActivity", "onCreateSuccessedView: 照片加载完成, allPhotosAibum.bitList.size=" +
(allPhotosAibum != null && allPhotosAibum.bitList != null ? allPhotosAibum.bitList.size() : 0));
if (allPhotosAibum == null || allPhotosAibum.bitList == null || allPhotosAibum.bitList.isEmpty()) {
LogUtil.w("AllPhotosActivity", "onCreateSuccessedView: 照片列表为空,无法显示照片");
}
initIntent();
initPhotosView();
LogUtil.d("AllPhotosActivity", "onCreateSuccessedView: 视图创建完成");
return view;
}
/**
* 初始化照片视图
*/
private void initPhotosView() {
top_right_text.setVisibility(View.VISIBLE);
if (isTopc) {
maxnumber = 3;
PhotoNum = 3;
top_right_text.setText("确认" + haveNums + "/3");
} else {
maxnumber = PhotoNum;
top_right_text.setText("确认" + haveNums + "/" + PhotoNum);
}
top_right_text.setTextColor(AllPhotosActivity.this.getResources()
.getColor(R.color.white));
top_right_text.setTextSize(14);
top_right_text.setBackgroundResource(R.drawable.selector_btn);
LayoutParams paras = (LayoutParams) top_right_text
.getLayoutParams();
paras.setMargins(0, 0, dip2px(AllPhotosActivity.this, 10), 0);
paras.height = dip2px(AllPhotosActivity.this, 30);
top_right_text.setLayoutParams(paras);
top_right_text.setOnClickListener(this);
adapter = new PhotoAdappter2(this, allPhotosAibum);
photosGV.setNumColumns(3);
photosGV.setAdapter(adapter);
adapter.setOnItemClickListener(new PhotoAdappter2.ViewItemClickListener() {
@Override
public void onItemClick(int position) {
if (potisions.contains(position + "")) {
potisions.remove(position + "");
haveNums = (Integer.parseInt(haveNums) - 1) + "";
} else {
if (isTopc) {
if (Integer.parseInt(haveNums) < 3) {
potisions.add(position + "");
haveNums = (Integer.parseInt(haveNums) + 1) + "";
maxnumber = 3;
} else {
ToastUtil.showMessage("最多添加" + PhotoNum + "张");
return;
}
} else {
if (Integer.parseInt(haveNums) < PhotoNum) {
potisions.add(position + "");
haveNums = (Integer.parseInt(haveNums) + 1) + "";
maxnumber = PhotoNum;
} else {
ToastUtil.showMessage("最多添加" + PhotoNum + "张");
return;
}
}
}
if (isTopc) {
maxnumber = 3;
top_right_text.setText("确认" + haveNums + "/3");
} else {
maxnumber = PhotoNum;
top_right_text.setText("确认" + haveNums + "/" + PhotoNum);
}
adapter.getPosition(potisions);
adapter.notifyDataSetChanged();
}
});
photosGV.setOnItemClickListener(gvItemClickListener);
}
private ArrayList<String> potisions = new ArrayList<String>();
private OnItemClickListener gvItemClickListener = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Intent intent = new Intent(AllPhotosActivity.this, AlbumPreviewActivity.class);
intent.putExtra(AlbumPreviewActivity.ARG_BUCKET_INDEX, 0);
intent.putExtra(AlbumPreviewActivity.ARG_INDEX, position);
intent.putExtra(AlbumPreviewActivity.MAX_NUMBER, maxnumber);
intent.putExtra("aibum", allPhotosAibum);
intent.putExtra("haveNums", Integer.parseInt(haveNums));
intent.putStringArrayListExtra("potisions", potisions);
startActivityForResult(intent, 500);
}
};
ContentResolver cr;
public void getpath() {
LogUtil.d("AllPhotosActivity", "getpath: potisions=" + (potisions != null ? "not null, size=" + potisions.size() : "null") +
", allPhotosAibum=" + (allPhotosAibum != null ? "not null" : "null") +
", allPhotosAibum.bitList=" + (allPhotosAibum != null && allPhotosAibum.bitList != null ? "not null, size=" + allPhotosAibum.bitList.size() : "null"));
gl_arr.clear();
if (potisions == null || potisions.isEmpty()) {
LogUtil.w("AllPhotosActivity", "getpath: potisions 为空,没有选中的照片");
return;
}
if (allPhotosAibum == null || allPhotosAibum.bitList == null || allPhotosAibum.bitList.isEmpty()) {
LogUtil.w("AllPhotosActivity", "getpath: allPhotosAibum 或 bitList 为空,无法获取照片");
return;
}
for (int i = 0; i < potisions.size(); i++) {
try {
int position = Integer.parseInt(potisions.get(i));
if (position >= 0 && position < allPhotosAibum.bitList.size()) {
PhotoItem item = allPhotosAibum.bitList.get(position);
if (item != null) {
gl_arr.add(item);
LogUtil.d("AllPhotosActivity", "getpath: 添加 PhotoItem[" + i + "], position=" + position + ", path=" + item.getPath());
} else {
LogUtil.e("AllPhotosActivity", "getpath: PhotoItem[" + position + "] 为 null");
}
} else {
LogUtil.e("AllPhotosActivity", "getpath: 索引越界, position=" + position + ", bitList.size=" + allPhotosAibum.bitList.size());
}
} catch (NumberFormatException e) {
LogUtil.e("AllPhotosActivity", "getpath: 无法解析位置索引[" + i + "]=" + potisions.get(i) + ", error: " + e.getMessage());
} catch (Exception e) {
LogUtil.e("AllPhotosActivity", "getpath: 处理位置[" + i + "]时发生异常, error: " + e.getMessage());
}
}
LogUtil.d("AllPhotosActivity", "getpath: 最终 gl_arr.size=" + gl_arr.size());
}
private void getThumbnail() {
LogUtil.d("AllPhotosActivity", "getThumbnail: 开始加载缩略图");
cr = AllPhotosActivity.this.getContentResolver();
String[] projection = { Thumbnails._ID, Thumbnails.IMAGE_ID,
Thumbnails.DATA };
try {
Cursor cursor = cr.query(Thumbnails.EXTERNAL_CONTENT_URI, projection,
null, null, null);
if (cursor == null) {
LogUtil.w("AllPhotosActivity", "getThumbnail: cursor 为 null");
} else {
LogUtil.d("AllPhotosActivity", "getThumbnail: cursor.count=" + cursor.getCount());
getThumbnailColumnData(cursor);
}
} catch (Exception e) {
LogUtil.e("AllPhotosActivity", "getThumbnail: 查询缩略图时发生异常, error: " + e.getMessage());
e.printStackTrace();
}
}
HashMap<String, String> thumbnailList = new HashMap<String, String>();
private void getThumbnailColumnData(Cursor cur) {
if (cur.moveToFirst()) {
int _id;
int image_id;
String image_path;
int _idColumn = cur.getColumnIndex(Thumbnails._ID);
int image_idColumn = cur.getColumnIndex(Thumbnails.IMAGE_ID);
int dataColumn = cur.getColumnIndex(Thumbnails.DATA);
do {
_id = cur.getInt(_idColumn);
image_id = cur.getInt(image_idColumn);
image_path = cur.getString(dataColumn);
thumbnailList.put("" + image_id, image_path);
} while (cur.moveToNext());
}
}
/**
* 方法描述:获取所有照片(不分类)
*
* @author: Auto
* @time: 2024
*/
private PhotoAibum getAllPhotos() {
LogUtil.d("AllPhotosActivity", "getAllPhotos: 开始加载所有照片, SDK_INT=" + Build.VERSION.SDK_INT);
getThumbnail();
PhotoAibum allPhotos = new PhotoAibum();
allPhotos.setName("全部图片");
// 检查权限
boolean hasPermission = false;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
// Android 13+ 需要 READ_MEDIA_IMAGES 权限
hasPermission = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;
LogUtil.d("AllPhotosActivity", "getAllPhotos: Android 13+, READ_MEDIA_IMAGES permission=" + hasPermission);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// Android 6.0-12 需要 READ_EXTERNAL_STORAGE 权限
hasPermission = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;
LogUtil.d("AllPhotosActivity", "getAllPhotos: Android 6.0-12, READ_EXTERNAL_STORAGE permission=" + hasPermission);
} else {
// Android 6.0 以下不需要运行时权限
hasPermission = true;
LogUtil.d("AllPhotosActivity", "getAllPhotos: Android < 6.0, 不需要运行时权限");
}
if (!hasPermission) {
LogUtil.e("AllPhotosActivity", "getAllPhotos: 没有读取照片的权限,无法查询照片");
ToastUtil.showMessage("需要照片访问权限才能查看相册");
return allPhotos;
}
try {
LogUtil.d("AllPhotosActivity", "getAllPhotos: 查询 MediaStore.Images.Media.EXTERNAL_CONTENT_URI=" + MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
Cursor cursor = null;
try {
cursor = getContentResolver().query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
STORE_IMAGES,
null,
null,
MediaStore.Images.Media.DATE_ADDED + " ASC");
} catch (SecurityException e) {
LogUtil.e("AllPhotosActivity", "getAllPhotos: SecurityException - 权限被拒绝, error: " + e.getMessage());
e.printStackTrace();
ToastUtil.showMessage("无法访问照片,请检查权限设置");
return allPhotos;
} catch (Exception e) {
LogUtil.e("AllPhotosActivity", "getAllPhotos: 查询时发生异常, error: " + e.getMessage());
e.printStackTrace();
return allPhotos;
}
if (cursor == null) {
LogUtil.e("AllPhotosActivity", "getAllPhotos: cursor 为 null,无法查询照片");
return allPhotos;
}
int cursorCount = cursor.getCount();
LogUtil.d("AllPhotosActivity", "getAllPhotos: cursor.count=" + cursorCount);
if (cursorCount == 0) {
LogUtil.w("AllPhotosActivity", "getAllPhotos: cursor 为空,没有找到照片。可能原因:1)设备上没有照片 2)权限问题 3)Android 10+分区存储限制");
cursor.close();
return allPhotos;
}
List<PhotoItem> photoList = allPhotos.getBitList();
int processedCount = 0;
while (cursor.moveToNext()) {
try {
String path = cursor.getString(1) + "";
String id = cursor.getString(3) + "";
if (path == null || path.isEmpty() || "null".equals(path)) {
LogUtil.w("AllPhotosActivity", "getAllPhotos: 跳过无效路径的照片, id=" + id);
continue;
}
processedCount++;
if (processedCount <= 5) {
LogUtil.d("AllPhotosActivity", "getAllPhotos: 处理照片[" + processedCount + "], id=" + id + ", path=" + path);
}
photoList.add(new PhotoItem(Integer.valueOf(id), path));
} catch (Exception e) {
LogUtil.e("AllPhotosActivity", "getAllPhotos: 处理照片时发生异常, error: " + e.getMessage());
e.printStackTrace();
}
}
cursor.close();
allPhotos.setCount(photoList.size());
LogUtil.d("AllPhotosActivity", "getAllPhotos: 处理完成, processedCount=" + processedCount + ", total=" + photoList.size());
} catch (Exception e) {
LogUtil.e("AllPhotosActivity", "getAllPhotos: 发生异常, error: " + e.getMessage());
e.printStackTrace();
}
return allPhotos;
}
private void initIntent() {
getIntent = getIntent();
haveNums = getIntent.getStringExtra("photonum");
PhotoNum = getIntent.getIntExtra("maxphotonum", 8);
issendgroup = getIntent.getIntExtra("issendgroup", 0);
if (haveNums.equals("-1")) {
PhotoNum = 5;
haveNums = "0";
isTalke = true;
} else if ("1".equals(issendgroup + "")) {
isTalke = true;
}
istopc = getIntent.getStringExtra("isTopic");
if (istopc != null && istopc.equals("isTopic")) {
isTopc = true;
}
}
@Override
public ResultState onLoad() {
return ResultState.STATE_SUCCESSED;
}
@Override
protected void processClick(View v) {
switch (v.getId()) {
case R.id.top_right_text:
LogUtil.d("AllPhotosActivity", "确认按钮点击,开始返回照片数据");
getpath();
LogUtil.d("AllPhotosActivity", "确认按钮: gl_arr.size=" + gl_arr.size() + ", isTalke=" + isTalke);
if (gl_arr.size() > 0) {
try {
ECPreferences.savePreference(
ECPreferenceSettings.SETTINGS_PREVIEW_SELECTED,
Boolean.TRUE, true);
} catch (InvalidClassException e) {
e.printStackTrace();
}
for (int i = 0; i < gl_arr.size(); i++) {
PhotoItem item = gl_arr.get(i);
LogUtil.d("AllPhotosActivity", "返回 PhotoItem[" + i + "]: path=" + (item != null ? item.getPath() : "null"));
}
} else {
LogUtil.w("AllPhotosActivity", "确认按钮: gl_arr 为空,没有选择照片");
}
Intent intent = new Intent();
intent.putExtra("photos", (Serializable) gl_arr);
if (isTalke) {
setResult(RESULT_OK, intent);
LogUtil.d("AllPhotosActivity", "设置返回结果: RESULT_OK, photos count=" + gl_arr.size());
} else {
setResult(102, intent);
LogUtil.d("AllPhotosActivity", "设置返回结果: 102, photos count=" + gl_arr.size());
}
this.finish();
break;
default:
break;
}
}
// dp到像素的转换
public static int dip2px(Context context, double d) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (d * scale + 0.5f);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 500) {
if (resultCode == Activity.RESULT_OK) {
potisions = data.getExtras().getStringArrayList("potisions");
haveNums = data.getExtras().getInt("haveNums") + "";
adapter.getPosition(potisions);
adapter.notifyDataSetChanged();
top_right_text.setText("确认" + haveNums + "/" + maxnumber + "张");
}
}
}
}
@@ -470,8 +470,21 @@ public class BiochemistryActivity extends BaseActivity implements AdapterView.On
// TODO Auto-generated method stub // TODO Auto-generated method stub
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// Android 13+ (API 33+) 拍照主要需要 CAMERA 权限
if (PermissionsUtil.hasPermission(BiochemistryActivity.this, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { boolean hasPermission;
String[] permissionsToRequest;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
// Android 13+ 拍照主要需要 CAMERA 权限
hasPermission = PermissionsUtil.hasPermission(BiochemistryActivity.this, Manifest.permission.CAMERA);
permissionsToRequest = new String[]{Manifest.permission.CAMERA};
} else {
// Android 12及以下需要 CAMERA 和存储权限
hasPermission = PermissionsUtil.hasPermission(BiochemistryActivity.this, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE);
permissionsToRequest = new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
}
if (hasPermission) {
//有访问摄像头的权限 //有访问摄像头的权限
takePhoto11();// 拍照获取 takePhoto11();// 拍照获取
} else { } else {
@@ -492,7 +505,7 @@ public class BiochemistryActivity extends BaseActivity implements AdapterView.On
} }
}, new String[]{ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); }, permissionsToRequest);
} }
}else { }else {
@@ -508,11 +521,17 @@ public class BiochemistryActivity extends BaseActivity implements AdapterView.On
@Override @Override
public void onClick(View v) { public void onClick(View v) {
// TODO Auto-generated method
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // Android 6.0 ~ 12 使用旧的存储权限
if (PermissionsUtil.hasPermission(BiochemistryActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { boolean hasPermission;
//有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录 String[] permissionsToRequest;
Intent intent = new Intent(mActivity, PhotoAlbumActivity.class);
hasPermission = PermissionsUtil.hasPermission(BiochemistryActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE);
permissionsToRequest = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
if (hasPermission) {
//有访问相册的权限
Intent intent = new Intent(mActivity, AllPhotosActivity.class);
intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); intent.putExtra("photonum", "" + (mBitmaps.size() - 1));
intent.putExtra("maxphotonum",9); intent.putExtra("maxphotonum",9);
startActivityForResult(intent, startActivityForResult(intent,
@@ -525,7 +544,7 @@ public class BiochemistryActivity extends BaseActivity implements AdapterView.On
@Override @Override
public void permissionGranted(@NonNull String[] permissions) { public void permissionGranted(@NonNull String[] permissions) {
EasyWindow.cancelAll(); EasyWindow.cancelAll();
Intent intent = new Intent(BiochemistryActivity.this, PhotoAlbumActivity.class); Intent intent = new Intent(BiochemistryActivity.this, AllPhotosActivity.class);
intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); intent.putExtra("photonum", "" + (mBitmaps.size() - 1));
intent.putExtra("maxphotonum",9); intent.putExtra("maxphotonum",9);
startActivityForResult(intent,SELECT_PIC_BY_PICK_PHOTO); startActivityForResult(intent,SELECT_PIC_BY_PICK_PHOTO);
@@ -539,15 +558,10 @@ public class BiochemistryActivity extends BaseActivity implements AdapterView.On
} }
}, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); }, permissionsToRequest);
} }
}else {
Intent intent = new Intent(BiochemistryActivity.this, PhotoAlbumActivity.class);
intent.putExtra("photonum", "" + (mBitmaps.size() - 1));
intent.putExtra("maxphotonum",9);
startActivityForResult(intent,SELECT_PIC_BY_PICK_PHOTO);
}
} }
@@ -682,30 +682,39 @@ public class BookDetailActivity extends BaseActivity implements
public void run() { public void run() {
// TODO // TODO
// CanDownYK(); // CanDownYK();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // 文件保存到应用私有目录(getExternalFilesDir),Android 13+ 不需要存储权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
boolean needsPermission = Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU;
boolean hasPermission = true;
if (needsPermission) {
// Android 12及以下需要存储权限
hasPermission = PermissionsUtil.hasPermission(BookDetailActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
// Android 13+ 保存到应用私有目录不需要权限
if (hasPermission) {
CanDownWF();
} else {
EasyWindow.with(BookDetailActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000)
if (PermissionsUtil.hasPermission(BookDetailActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { .setContentView(R.layout.float_top_dialog_download).show();
CanDownWF(); PermissionsUtil.requestPermission(BookDetailActivity.this, new PermissionListener() {
} else { @Override
EasyWindow.with(BookDetailActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) public void permissionGranted(@NonNull String[] permissions) {
EasyWindow.cancelAll();
CanDownWF();
.setContentView(R.layout.float_top_dialog_download).show(); }
PermissionsUtil.requestPermission(BookDetailActivity.this, new PermissionListener() { @Override
@Override public void permissionDenied(@NonNull String[] permissions) {
public void permissionGranted(@NonNull String[] permissions) { EasyWindow.cancelAll();
EasyWindow.cancelAll(); //用户拒绝了访问存储的申请
CanDownWF();
}
@Override
public void permissionDenied(@NonNull String[] permissions) {
EasyWindow.cancelAll();
//用户拒绝了访问读写的申请
// //
} }
}, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE});
} }
}else { }else {
CanDownWF(); CanDownWF();
@@ -841,8 +850,18 @@ public class BookDetailActivity extends BaseActivity implements
if (result.contains("Waiting")) { if (result.contains("Waiting")) {
ToastUtil.showMessage("暂无全文"); ToastUtil.showMessage("暂无全文");
} else { } else {
// 文件保存到应用私有目录(getExternalFilesDir),Android 13+ 不需要存储权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (PermissionsUtil.hasPermission(BookDetailActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { boolean needsPermission = Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU;
boolean hasPermission = true;
if (needsPermission) {
// Android 12及以下需要存储权限
hasPermission = PermissionsUtil.hasPermission(BookDetailActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
// Android 13+ 保存到应用私有目录不需要权限
if (hasPermission) {
downloadBook(urls); downloadBook(urls);
} else { } else {
PermissionsUtil.requestPermission(BookDetailActivity.this, new PermissionListener() { PermissionsUtil.requestPermission(BookDetailActivity.this, new PermissionListener() {
@@ -11,6 +11,7 @@ import android.widget.FrameLayout;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import com.alibaba.fastjson.JSONObject;
import com.gyf.immersionbar.ImmersionBar; import com.gyf.immersionbar.ImmersionBar;
import java.util.ArrayList; import java.util.ArrayList;
@@ -29,6 +30,7 @@ import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView;
import cn.shangyu.gdxzExpert.utils.CommonUtil; import cn.shangyu.gdxzExpert.utils.CommonUtil;
import cn.shangyu.gdxzExpert.utils.GsonTools; import cn.shangyu.gdxzExpert.utils.GsonTools;
import cn.shangyu.gdxzExpert.utils.LogUtil; import cn.shangyu.gdxzExpert.utils.LogUtil;
import cn.shangyu.gdxzExpert.utils.MyUserIconUtil;
import cn.shangyu.gdxzExpert.utils.SharePrefUtil; import cn.shangyu.gdxzExpert.utils.SharePrefUtil;
import cn.shangyu.gdxzExpert.utils.StringUtil; import cn.shangyu.gdxzExpert.utils.StringUtil;
import cn.shangyu.gdxzExpert.utils.ToastUtil; import cn.shangyu.gdxzExpert.utils.ToastUtil;
@@ -116,13 +118,18 @@ public class CoollectCourseActivity extends BaseActivity implements
@Override @Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
Intent intent = new Intent(mActivity, CourseUrlDetailActivity.class); // Intent intent = new Intent(mActivity, CourseUrlDetailActivity.class);
intent.putExtra("url", DataList.get(arg2-1).path); // intent.putExtra("url", DataList.get(arg2-1).path);
Log.d("gdxzfile ","url1 "+DataList.get(arg2-1).path); // Log.d("gdxzfile ","url1 "+DataList.get(arg2-1).path);
intent.putExtra("uuid", DataList.get(arg2-1).other_uuid); // intent.putExtra("uuid", DataList.get(arg2-1).other_uuid);
intent.putExtra("title", DataList.get(arg2-1).title); // intent.putExtra("title", DataList.get(arg2-1).title);
intent.putExtra("collect", "collect"); // intent.putExtra("collect", "collect");
this.startActivityForResult(intent, 201); // this.startActivityForResult(intent, 201);
com.alibaba.fastjson.JSONObject pageParams = new JSONObject();
pageParams.put("src", DataList.get(arg2-1).path);
pageParams.put("uuid", DataList.get(arg2-1).other_uuid);
pageParams.put("from", "collect");
MyUserIconUtil.showUniMp(mActivity, "/pages_app/pptDetail/pptDetail", pageParams);
} }
@Override @Override
@@ -295,8 +295,18 @@ public class CourseDetailOrderActivity extends BaseActivity implements
} }
// 文件保存到应用私有目录(getExternalFilesDir),Android 13+ 不需要存储权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (PermissionsUtil.hasPermission(CourseDetailOrderActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { boolean needsPermission = Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU;
boolean hasPermission = true;
if (needsPermission) {
// Android 12及以下需要存储权限
hasPermission = PermissionsUtil.hasPermission(CourseDetailOrderActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
// Android 13+ 保存到应用私有目录不需要权限
if (hasPermission) {
getDownLoadResult(); getDownLoadResult();
} else { } else {
EasyWindow.with(CourseDetailOrderActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) EasyWindow.with(CourseDetailOrderActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000)
@@ -465,8 +465,21 @@ public class CtActivity extends BaseActivity implements AdapterView.OnItemClickL
// TODO Auto-generated method stub // TODO Auto-generated method stub
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// Android 13+ (API 33+) 拍照主要需要 CAMERA 权限
if (PermissionsUtil.hasPermission(CtActivity.this, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { boolean hasPermission;
String[] permissionsToRequest;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
// Android 13+ 拍照主要需要 CAMERA 权限
hasPermission = PermissionsUtil.hasPermission(CtActivity.this, Manifest.permission.CAMERA);
permissionsToRequest = new String[]{Manifest.permission.CAMERA};
} else {
// Android 12及以下需要 CAMERA 和存储权限
hasPermission = PermissionsUtil.hasPermission(CtActivity.this, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE);
permissionsToRequest = new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
}
if (hasPermission) {
//有访问摄像头的权限 //有访问摄像头的权限
takePhoto11();// 拍照获取 takePhoto11();// 拍照获取
} else { } else {
@@ -487,7 +500,7 @@ public class CtActivity extends BaseActivity implements AdapterView.OnItemClickL
} }
}, new String[]{ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); }, permissionsToRequest);
} }
}else { }else {
@@ -503,11 +516,17 @@ public class CtActivity extends BaseActivity implements AdapterView.OnItemClickL
@Override @Override
public void onClick(View v) { public void onClick(View v) {
// TODO Auto-generated method
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // Android 6.0 ~ 12 使用旧的存储权限
if (PermissionsUtil.hasPermission(CtActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { boolean hasPermission;
//有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录 String[] permissionsToRequest;
Intent intent = new Intent(mActivity, PhotoAlbumActivity.class);
hasPermission = PermissionsUtil.hasPermission(CtActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE);
permissionsToRequest = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
if (hasPermission) {
//有访问相册的权限
Intent intent = new Intent(mActivity, AllPhotosActivity.class);
intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); intent.putExtra("photonum", "" + (mBitmaps.size() - 1));
intent.putExtra("maxphotonum",9); intent.putExtra("maxphotonum",9);
startActivityForResult(intent, startActivityForResult(intent,
@@ -520,7 +539,7 @@ public class CtActivity extends BaseActivity implements AdapterView.OnItemClickL
@Override @Override
public void permissionGranted(@NonNull String[] permissions) { public void permissionGranted(@NonNull String[] permissions) {
EasyWindow.cancelAll(); EasyWindow.cancelAll();
Intent intent = new Intent(CtActivity.this, PhotoAlbumActivity.class); Intent intent = new Intent(CtActivity.this, AllPhotosActivity.class);
intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); intent.putExtra("photonum", "" + (mBitmaps.size() - 1));
intent.putExtra("maxphotonum",9); intent.putExtra("maxphotonum",9);
startActivityForResult(intent,SELECT_PIC_BY_PICK_PHOTO); startActivityForResult(intent,SELECT_PIC_BY_PICK_PHOTO);
@@ -529,20 +548,14 @@ public class CtActivity extends BaseActivity implements AdapterView.OnItemClickL
@Override @Override
public void permissionDenied(@NonNull String[] permissions) { public void permissionDenied(@NonNull String[] permissions) {
EasyWindow.cancelAll(); EasyWindow.cancelAll();
//用户拒绝了访问读写的申请 //用户拒绝了访问相册的申请
} }
}, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); }, permissionsToRequest);
} }
}else {
Intent intent = new Intent(CtActivity.this, PhotoAlbumActivity.class);
intent.putExtra("photonum", "" + (mBitmaps.size() - 1));
intent.putExtra("maxphotonum",9);
startActivityForResult(intent,SELECT_PIC_BY_PICK_PHOTO);
}
} }
@@ -421,8 +421,21 @@ public class FibroActivity extends BaseActivity implements AdapterView.OnItemCli
// TODO Auto-generated method stub // TODO Auto-generated method stub
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// Android 13+ (API 33+) 拍照主要需要 CAMERA 权限
if (PermissionsUtil.hasPermission(FibroActivity.this, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { boolean hasPermission;
String[] permissionsToRequest;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
// Android 13+ 拍照主要需要 CAMERA 权限
hasPermission = PermissionsUtil.hasPermission(FibroActivity.this, Manifest.permission.CAMERA);
permissionsToRequest = new String[]{Manifest.permission.CAMERA};
} else {
// Android 12及以下需要 CAMERA 和存储权限
hasPermission = PermissionsUtil.hasPermission(FibroActivity.this, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE);
permissionsToRequest = new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
}
if (hasPermission) {
//有访问摄像头的权限 //有访问摄像头的权限
takePhoto11();// 拍照获取 takePhoto11();// 拍照获取
} else { } else {
@@ -443,7 +456,7 @@ public class FibroActivity extends BaseActivity implements AdapterView.OnItemCli
} }
}, new String[]{ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); }, permissionsToRequest);
} }
}else { }else {
@@ -459,11 +472,17 @@ public class FibroActivity extends BaseActivity implements AdapterView.OnItemCli
@Override @Override
public void onClick(View v) { public void onClick(View v) {
// TODO Auto-generated method
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // Android 6.0 ~ 12 使用存储权限
if (PermissionsUtil.hasPermission(FibroActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { boolean hasPermission;
//有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录 String[] permissionsToRequest;
Intent intent = new Intent(mActivity, PhotoAlbumActivity.class);
hasPermission = PermissionsUtil.hasPermission(FibroActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE);
permissionsToRequest = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
if (hasPermission) {
//有访问相册的权限
Intent intent = new Intent(mActivity, AllPhotosActivity.class);
intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); intent.putExtra("photonum", "" + (mBitmaps.size() - 1));
intent.putExtra("maxphotonum",9); intent.putExtra("maxphotonum",9);
startActivityForResult(intent, startActivityForResult(intent,
@@ -476,7 +495,7 @@ public class FibroActivity extends BaseActivity implements AdapterView.OnItemCli
@Override @Override
public void permissionGranted(@NonNull String[] permissions) { public void permissionGranted(@NonNull String[] permissions) {
EasyWindow.cancelAll(); EasyWindow.cancelAll();
Intent intent = new Intent(FibroActivity.this, PhotoAlbumActivity.class); Intent intent = new Intent(FibroActivity.this, AllPhotosActivity.class);
intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); intent.putExtra("photonum", "" + (mBitmaps.size() - 1));
intent.putExtra("maxphotonum",9); intent.putExtra("maxphotonum",9);
startActivityForResult(intent,SELECT_PIC_BY_PICK_PHOTO); startActivityForResult(intent,SELECT_PIC_BY_PICK_PHOTO);
@@ -485,20 +504,15 @@ public class FibroActivity extends BaseActivity implements AdapterView.OnItemCli
@Override @Override
public void permissionDenied(@NonNull String[] permissions) { public void permissionDenied(@NonNull String[] permissions) {
EasyWindow.cancelAll(); EasyWindow.cancelAll();
//用户拒绝了访问读写的申请 //用户拒绝了访问相册的申请
} }
}, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); }, permissionsToRequest);
} }
}else {
Intent intent = new Intent(FibroActivity.this, PhotoAlbumActivity.class);
intent.putExtra("photonum", "" + (mBitmaps.size() - 1));
intent.putExtra("maxphotonum",9);
startActivityForResult(intent,SELECT_PIC_BY_PICK_PHOTO);
}
} }
@@ -45,8 +45,18 @@ public class FindHelpActivity extends BaseActivity {
im_we.setOnLongClickListener(new View.OnLongClickListener() { im_we.setOnLongClickListener(new View.OnLongClickListener() {
@Override @Override
public boolean onLongClick(View v) { public boolean onLongClick(View v) {
// 保存图片到 MediaStore,Android 13+ 可能需要权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (PermissionsUtil.hasPermission(FindHelpActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { boolean needsPermission = Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU;
boolean hasPermission = true;
if (needsPermission) {
// Android 12及以下需要存储权限(用于保存到 MediaStore)
hasPermission = PermissionsUtil.hasPermission(FindHelpActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
// Android 13+ 保存到 MediaStore 可能需要 READ_MEDIA_IMAGES,但通常不需要
if (hasPermission) {
savePhoto(); savePhoto();
} }
else else
@@ -68,9 +68,22 @@ public class GandanMeetingActivity extends BaseActivity{
// intent.putExtra("title",getResources().getString(R.string.gandanhuifang)); // intent.putExtra("title",getResources().getString(R.string.gandanhuifang));
// startActivity(intent); // startActivity(intent);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// // Android 13+ (API 33+) 拍照主要需要 CAMERA 权限
if (PermissionsUtil.hasPermission(GandanMeetingActivity.this, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { boolean hasPermission;
//有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录 String[] permissionsToRequest;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
// Android 13+ 拍照主要需要 CAMERA 权限
hasPermission = PermissionsUtil.hasPermission(GandanMeetingActivity.this, Manifest.permission.CAMERA);
permissionsToRequest = new String[]{Manifest.permission.CAMERA};
} else {
// Android 12及以下需要 CAMERA 和存储权限
hasPermission = PermissionsUtil.hasPermission(GandanMeetingActivity.this, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE);
permissionsToRequest = new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
}
if (hasPermission) {
//有访问摄像头的权限
startToCapture(); startToCapture();
} else { } else {
EasyWindow.with(GandanMeetingActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) EasyWindow.with(GandanMeetingActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000)
@@ -80,16 +93,16 @@ public class GandanMeetingActivity extends BaseActivity{
@Override @Override
public void permissionGranted(@NonNull String[] permissions) { public void permissionGranted(@NonNull String[] permissions) {
EasyWindow.cancelAll(); EasyWindow.cancelAll();
//用户授予了访问读取短信的权限 //用户授予了访问摄像头的权限
startToCapture(); startToCapture();
} }
@Override @Override
public void permissionDenied(@NonNull String[] permissions) { public void permissionDenied(@NonNull String[] permissions) {
//用户拒绝了访问读取短信的申请 //用户拒绝了访问摄像头的申请
EasyWindow.cancelAll(); EasyWindow.cancelAll();
} }
}, new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); }, permissionsToRequest);
} }
}else { }else {
@@ -536,8 +536,21 @@ public class HbvdnaActivity extends BaseActivity implements AdapterView.OnItemCl
// TODO Auto-generated method stub // TODO Auto-generated method stub
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// Android 13+ (API 33+) 拍照主要需要 CAMERA 权限
if (PermissionsUtil.hasPermission(HbvdnaActivity.this, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { boolean hasPermission;
String[] permissionsToRequest;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
// Android 13+ 拍照主要需要 CAMERA 权限
hasPermission = PermissionsUtil.hasPermission(HbvdnaActivity.this, Manifest.permission.CAMERA);
permissionsToRequest = new String[]{Manifest.permission.CAMERA};
} else {
// Android 12及以下需要 CAMERA 和存储权限
hasPermission = PermissionsUtil.hasPermission(HbvdnaActivity.this, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE);
permissionsToRequest = new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
}
if (hasPermission) {
//有访问摄像头的权限 //有访问摄像头的权限
takePhoto11();// 拍照获取 takePhoto11();// 拍照获取
} else { } else {
@@ -558,7 +571,7 @@ public class HbvdnaActivity extends BaseActivity implements AdapterView.OnItemCl
} }
}, new String[]{ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); }, permissionsToRequest);
} }
}else { }else {
@@ -574,11 +587,17 @@ public class HbvdnaActivity extends BaseActivity implements AdapterView.OnItemCl
@Override @Override
public void onClick(View v) { public void onClick(View v) {
// TODO Auto-generated method
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // Android 6.0 ~ 12 使用存储权限
if (PermissionsUtil.hasPermission(HbvdnaActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { boolean hasPermission;
//有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录 String[] permissionsToRequest;
Intent intent = new Intent(mActivity, PhotoAlbumActivity.class);
hasPermission = PermissionsUtil.hasPermission(HbvdnaActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE);
permissionsToRequest = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
if (hasPermission) {
//有访问相册的权限
Intent intent = new Intent(mActivity, AllPhotosActivity.class);
intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); intent.putExtra("photonum", "" + (mBitmaps.size() - 1));
intent.putExtra("maxphotonum",9); intent.putExtra("maxphotonum",9);
startActivityForResult(intent, startActivityForResult(intent,
@@ -591,7 +610,7 @@ public class HbvdnaActivity extends BaseActivity implements AdapterView.OnItemCl
@Override @Override
public void permissionGranted(@NonNull String[] permissions) { public void permissionGranted(@NonNull String[] permissions) {
EasyWindow.cancelAll(); EasyWindow.cancelAll();
Intent intent = new Intent(HbvdnaActivity.this, PhotoAlbumActivity.class); Intent intent = new Intent(HbvdnaActivity.this, AllPhotosActivity.class);
intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); intent.putExtra("photonum", "" + (mBitmaps.size() - 1));
intent.putExtra("maxphotonum",9); intent.putExtra("maxphotonum",9);
startActivityForResult(intent,SELECT_PIC_BY_PICK_PHOTO); startActivityForResult(intent,SELECT_PIC_BY_PICK_PHOTO);
@@ -600,20 +619,15 @@ public class HbvdnaActivity extends BaseActivity implements AdapterView.OnItemCl
@Override @Override
public void permissionDenied(@NonNull String[] permissions) { public void permissionDenied(@NonNull String[] permissions) {
EasyWindow.cancelAll(); EasyWindow.cancelAll();
//用户拒绝了访问读写的申请 //用户拒绝了访问相册的申请
} }
}, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); }, permissionsToRequest);
} }
}else {
Intent intent = new Intent(HbvdnaActivity.this, PhotoAlbumActivity.class);
intent.putExtra("photonum", "" + (mBitmaps.size() - 1));
intent.putExtra("maxphotonum",9);
startActivityForResult(intent,SELECT_PIC_BY_PICK_PHOTO);
}
} }
@@ -738,8 +738,21 @@ public class InfomationActivity extends BaseActivity implements AdapterView.OnIt
// TODO Auto-generated method stub // TODO Auto-generated method stub
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// Android 13+ (API 33+) 拍照主要需要 CAMERA 权限
if (PermissionsUtil.hasPermission(InfomationActivity.this, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { boolean hasPermission;
String[] permissionsToRequest;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
// Android 13+ 拍照主要需要 CAMERA 权限
hasPermission = PermissionsUtil.hasPermission(InfomationActivity.this, Manifest.permission.CAMERA);
permissionsToRequest = new String[]{Manifest.permission.CAMERA};
} else {
// Android 12及以下需要 CAMERA 和存储权限
hasPermission = PermissionsUtil.hasPermission(InfomationActivity.this, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE);
permissionsToRequest = new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
}
if (hasPermission) {
//有访问摄像头的权限 //有访问摄像头的权限
takePhoto11();// 拍照获取 takePhoto11();// 拍照获取
} else { } else {
@@ -760,7 +773,7 @@ public class InfomationActivity extends BaseActivity implements AdapterView.OnIt
} }
}, new String[]{ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); }, permissionsToRequest);
} }
}else { }else {
@@ -776,11 +789,18 @@ public class InfomationActivity extends BaseActivity implements AdapterView.OnIt
@Override @Override
public void onClick(View v) { public void onClick(View v) {
// TODO Auto-generated method
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (PermissionsUtil.hasPermission(InfomationActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { // Android 6.0 ~ 12 使用存储权限
//有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录 boolean hasPermission;
Intent intent = new Intent(mActivity, PhotoAlbumActivity.class); String[] permissionsToRequest;
hasPermission = PermissionsUtil.hasPermission(InfomationActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE);
permissionsToRequest = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
if (hasPermission) {
//有访问相册的权限
Intent intent = new Intent(mActivity, AllPhotosActivity.class);
intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); intent.putExtra("photonum", "" + (mBitmaps.size() - 1));
intent.putExtra("maxphotonum",9); intent.putExtra("maxphotonum",9);
startActivityForResult(intent, startActivityForResult(intent,
@@ -793,7 +813,7 @@ public class InfomationActivity extends BaseActivity implements AdapterView.OnIt
@Override @Override
public void permissionGranted(@NonNull String[] permissions) { public void permissionGranted(@NonNull String[] permissions) {
EasyWindow.cancelAll(); EasyWindow.cancelAll();
Intent intent = new Intent(InfomationActivity.this, PhotoAlbumActivity.class); Intent intent = new Intent(InfomationActivity.this, AllPhotosActivity.class);
intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); intent.putExtra("photonum", "" + (mBitmaps.size() - 1));
intent.putExtra("maxphotonum",9); intent.putExtra("maxphotonum",9);
startActivityForResult(intent,SELECT_PIC_BY_PICK_PHOTO); startActivityForResult(intent,SELECT_PIC_BY_PICK_PHOTO);
@@ -802,20 +822,15 @@ public class InfomationActivity extends BaseActivity implements AdapterView.OnIt
@Override @Override
public void permissionDenied(@NonNull String[] permissions) { public void permissionDenied(@NonNull String[] permissions) {
EasyWindow.cancelAll(); EasyWindow.cancelAll();
//用户拒绝了访问读写的申请 //用户拒绝了访问相册的申请
} }
}, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); }, permissionsToRequest);
} }
}else {
Intent intent = new Intent(InfomationActivity.this, PhotoAlbumActivity.class);
intent.putExtra("photonum", "" + (mBitmaps.size() - 1));
intent.putExtra("maxphotonum",9);
startActivityForResult(intent,SELECT_PIC_BY_PICK_PHOTO);
}
} }
@@ -25,6 +25,8 @@ import static cn.shangyu.gdxzExpert.utils.Url.getAccessToken;
import static cn.shangyu.gdxzExpert.utils.Url.getShowMagazine; import static cn.shangyu.gdxzExpert.utils.Url.getShowMagazine;
import static cn.shangyu.gdxzExpert.utils.Url.scanurl; import static cn.shangyu.gdxzExpert.utils.Url.scanurl;
import static cn.shangyu.gdxzExpert.utils.Url.umVerifyLogin; import static cn.shangyu.gdxzExpert.utils.Url.umVerifyLogin;
import static cn.shangyu.gdxzExpert.utils.Url.url_path;
import static cn.shangyu.gdxzExpert.utils.Url.urlmyLan;
import static cn.shangyu.gdxzExpert.utils.Url.yxrefresh; import static cn.shangyu.gdxzExpert.utils.Url.yxrefresh;
import static cn.shangyu.gdxzExpert.utils.Url.yxregist; import static cn.shangyu.gdxzExpert.utils.Url.yxregist;
@@ -176,6 +178,7 @@ import cn.shangyu.gdxzExpert.netease.DemoCache;
import cn.shangyu.gdxzExpert.netease.bagder.Badger; import cn.shangyu.gdxzExpert.netease.bagder.Badger;
import cn.shangyu.gdxzExpert.netease.config.preference.Preferences; import cn.shangyu.gdxzExpert.netease.config.preference.Preferences;
import cn.shangyu.gdxzExpert.netease.config.preference.UserPreferences; import cn.shangyu.gdxzExpert.netease.config.preference.UserPreferences;
import cn.shangyu.gdxzExpert.pointsmall.BuyIntegerActivty;
import cn.shangyu.gdxzExpert.service.UpdateService; import cn.shangyu.gdxzExpert.service.UpdateService;
import cn.shangyu.gdxzExpert.splash.UniappSplashView; import cn.shangyu.gdxzExpert.splash.UniappSplashView;
import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; import cn.shangyu.gdxzExpert.ui.CustomProgressDialog;
@@ -187,6 +190,7 @@ import cn.shangyu.gdxzExpert.utils.DataCleanManager;
import cn.shangyu.gdxzExpert.utils.GrayManager; import cn.shangyu.gdxzExpert.utils.GrayManager;
import cn.shangyu.gdxzExpert.utils.HmacSha256ApiVerify; import cn.shangyu.gdxzExpert.utils.HmacSha256ApiVerify;
import cn.shangyu.gdxzExpert.utils.LogUtil; import cn.shangyu.gdxzExpert.utils.LogUtil;
import cn.shangyu.gdxzExpert.utils.MyUserIconUtil;
import cn.shangyu.gdxzExpert.utils.SharePrefUtil; import cn.shangyu.gdxzExpert.utils.SharePrefUtil;
import cn.shangyu.gdxzExpert.utils.StaUtil; import cn.shangyu.gdxzExpert.utils.StaUtil;
import cn.shangyu.gdxzExpert.utils.StreamTool; import cn.shangyu.gdxzExpert.utils.StreamTool;
@@ -199,10 +203,8 @@ import cn.shangyu.gdxzExpert.view.viewbadger.BadgeView;
import cn.shangyu.gdxzExpert.widget.ECAlertDialog; import cn.shangyu.gdxzExpert.widget.ECAlertDialog;
import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState;
import io.dcloud.feature.sdk.DCUniMPSDK; import io.dcloud.feature.sdk.DCUniMPSDK;
import io.dcloud.feature.sdk.Interface.IOnUniMPEventCallBack;
import io.dcloud.feature.sdk.Interface.IUniMP; import io.dcloud.feature.sdk.Interface.IUniMP;
import io.dcloud.feature.sdk.Interface.IUniMPOnCloseCallBack; import io.dcloud.feature.sdk.Interface.IUniMPOnCloseCallBack;
import io.dcloud.feature.unimp.DCUniMPJSCallback;
import io.dcloud.feature.unimp.config.UniMPOpenConfiguration; import io.dcloud.feature.unimp.config.UniMPOpenConfiguration;
import me.leolin.shortcutbadger.ShortcutBadger; import me.leolin.shortcutbadger.ShortcutBadger;
import me.majiajie.pagerbottomtabstrip.NavigationController; import me.majiajie.pagerbottomtabstrip.NavigationController;
@@ -273,9 +275,6 @@ public class MainActivity extends BaseActivity implements
private static Handler handler; private static Handler handler;
//自动触发打开 uniapp mp 开关
private boolean auto_show_unimp = true;
// 全屏Loading覆盖层 // 全屏Loading覆盖层
private View fullScreenLoadingView; private View fullScreenLoadingView;
@@ -469,7 +468,9 @@ public class MainActivity extends BaseActivity implements
tab_rbn_published.setOnClickListener(new OnClickListener() { tab_rbn_published.setOnClickListener(new OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
startActivity(new Intent(ct,PatientVideoActivity.class));
MyUserIconUtil.showUniMp(MainActivity.this, "/pages_app/patientVideo/patientVideo", null);
// startActivity(new Intent(ct,PatientVideoActivity.class));
} }
}); });
main_radiogroup.setOnCheckedChangeListener(this); main_radiogroup.setOnCheckedChangeListener(this);
@@ -485,242 +486,6 @@ public class MainActivity extends BaseActivity implements
} else { } else {
changeHome(); changeHome();
} }
DCUniMPSDK.getInstance().setUniMPOnCloseCallBack(new IUniMPOnCloseCallBack() {
@Override
public void onClose(String appid) {
auto_show_unimp = false;
LogUtil.i("setUniMPOnCloseCallBack: ", appid);
if(BaseApplication.getUniMPCaches().containsKey(appid)){
BaseApplication.getUniMPCaches().remove(appid);
}
}
});
DCUniMPSDK.getInstance().setOnUniMPEventCallBack(new IOnUniMPEventCallBack() {
@Override
public void onUniMPEventReceive(String appid, String event, Object data, DCUniMPJSCallback callback) {
LogUtil.i("onUniMPEventReceive appid="+appid);
LogUtil.i("onUniMPEventReceive event="+event);
LogUtil.i("onUniMPEventReceive data="+data);
try {
if(event.equals("goTabbarPage")){
auto_show_unimp = false;
// BaseApplication.getUniMPCaches().get(appid).hideUniMP();
// BaseApplication.getUniMPCaches().get(appid).showUniMP();
// BaseApplication.getUniMPCaches().get(appid).closeUniMP();
// data 可能是 JSONObject 或 String,需要判断类型
String msg = null;
if (data instanceof com.alibaba.fastjson.JSONObject) {
// 如果是 fastjson 的 JSONObject,直接使用
com.alibaba.fastjson.JSONObject fastJsonObj = (com.alibaba.fastjson.JSONObject) data;
msg = fastJsonObj.getString("msg");
} else if (data instanceof String) {
// 如果是 String,解析为 JSONObject
JSONObject jsonObject = new JSONObject((String) data);
msg = jsonObject.getString("msg");
} else {
// 尝试转换为字符串再解析
JSONObject jsonObject = new JSONObject(data.toString());
msg = jsonObject.getString("msg");
}
LogUtil.i("goTabbarPage msg=" + msg);
if(msg.equals("home")){//首页
LogUtil.i("准备切换到首页");
// 使用主线程 Handler 确保在主线程执行
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
try {
LogUtil.i("开始执行首页切换逻辑");
if (main_radiogroup == null) {
LogUtil.e("main_radiogroup is null!");
return;
}
// 直接执行首页切换逻辑,不依赖事件触发
main_radiogroup.setOnCheckedChangeListener(null);
main_radiogroup.check(R.id.tab_rbn_home);
main_radiogroup.setOnCheckedChangeListener(MainActivity.this);
// 执行首页相关的UI更新和逻辑
if (mToolbar != null) {
mToolbar.setBackgroundColor(getResources().getColor(R.color.top_bg));
}
if (mRg_kepu != null) {
mRg_kepu.setVisibility(View.GONE);
}
if (mV_kp != null) {
mV_kp.setVisibility(View.GONE);
}
MobclickAgent.onEvent(MainActivity.this, EXPERT_TAB_HOME);
changeHome();
LogUtil.i("首页切换逻辑执行完成");
} catch (Exception e) {
LogUtil.e("执行首页切换时出错: " + e.getMessage());
e.printStackTrace();
}
}
});
}else if(msg.equals("patientClass")){//患教
LogUtil.i("准备切换到患教页");
// 使用主线程 Handler 确保在主线程执行
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
try {
LogUtil.i("开始执行患教页切换逻辑");
if (main_radiogroup == null) {
LogUtil.e("main_radiogroup is null!");
return;
}
// 直接执行患教页切换逻辑,不依赖事件触发
main_radiogroup.setOnCheckedChangeListener(null);
main_radiogroup.check(R.id.tab_rbn_kepu);
main_radiogroup.setOnCheckedChangeListener(MainActivity.this);
// 执行患教页相关的UI更新和逻辑
mToolbar.setBackgroundColor(getResources().getColor(R.color.top_bg));
mToolbar.getBackground().setAlpha(255);
mRg_kepu.setVisibility(View.VISIBLE);
mV_kp.setVisibility(View.VISIBLE);
mRb_published.setChecked(true);
top_sgin.setVisibility(View.GONE);
MobclickAgent.onEvent(MainActivity.this, EXPERT_TAB_TEACH);
changePatientZhongxin();
LogUtil.i("患教页切换逻辑执行完成");
} catch (Exception e) {
LogUtil.e("执行患教页切换时出错: " + e.getMessage());
e.printStackTrace();
}
}
});
}else if(msg.equals("education")){//继续教育
LogUtil.i("准备切换到继续教育页");
// 使用主线程 Handler 确保在主线程执行
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
try {
LogUtil.i("开始执行继续教育页切换逻辑");
if (main_radiogroup == null) {
LogUtil.e("main_radiogroup is null!");
return;
}
// 直接执行继续教育页切换逻辑,不依赖事件触发
main_radiogroup.setOnCheckedChangeListener(null);
main_radiogroup.check(R.id.tab_rbn_news);
main_radiogroup.setOnCheckedChangeListener(MainActivity.this);
// 执行继续教育页相关的UI更新和逻辑
mToolbar.setBackgroundColor(getResources().getColor(R.color.top_bg));
mRg_kepu.setVisibility(View.GONE);
mV_kp.setVisibility(View.GONE);
top_sgin.setVisibility(View.GONE);
mToolbar.getBackground().setAlpha(255);
MobclickAgent.onEvent(MainActivity.this, EXPERT_TAB_EDUCATION);
changeNews();
LogUtil.i("继续教育页切换逻辑执行完成");
} catch (Exception e) {
LogUtil.e("执行继续教育页切换时出错: " + e.getMessage());
e.printStackTrace();
}
}
});
}else if(msg.equals("mine")){//我的
LogUtil.i("准备切换到我的页");
// 使用主线程 Handler 确保在主线程执行
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
try {
LogUtil.i("开始执行我的页切换逻辑");
if (main_radiogroup == null) {
LogUtil.e("main_radiogroup is null!");
return;
}
// 直接执行我的页切换逻辑,不依赖事件触发
main_radiogroup.setOnCheckedChangeListener(null);
main_radiogroup.check(R.id.tab_rbn_my);
main_radiogroup.setOnCheckedChangeListener(MainActivity.this);
// 执行我的页相关的UI更新和逻辑
mToolbar.setBackgroundColor(getResources().getColor(R.color.top_bg));
mToolbar.getBackground().setAlpha(255);
top_sgin.setVisibility(View.GONE);
mRg_kepu.setVisibility(View.GONE);
mV_kp.setVisibility(View.GONE);
MobclickAgent.onEvent(MainActivity.this, EXPERT_TAB_MY);
changeMy();
LogUtil.i("我的页切换逻辑执行完成");
} catch (Exception e) {
LogUtil.e("执行我的页切换时出错: " + e.getMessage());
e.printStackTrace();
}
}
});
}else{
}
} else if (event.equals("getScanCodeAuth")){
JSONObject ScanCodeAuthData = new JSONObject();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (PermissionsUtil.hasPermission(MainActivity.this, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
//有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录
ScanCodeAuthData.put("code", 200);
callback.invoke(ScanCodeAuthData);//给uniapp 回传消息
} else {
EasyWindow.with(MainActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000).setContentView(R.layout.float_top_dialog).show();
PermissionsUtil.requestPermission(MainActivity.this, new PermissionListener() {
@Override
public void permissionGranted(@NonNull String[] permissions) {
EasyWindow.cancelAll();
//用户授予了访问读取短信的权限
try {
ScanCodeAuthData.put("code", 200);
} catch (JSONException e) {
throw new RuntimeException(e);
}
callback.invoke(ScanCodeAuthData);//给uniapp 回传消息
}
@Override
public void permissionDenied(@NonNull String[] permissions) {
//用户拒绝了访问读取短信的申请
EasyWindow.cancelAll();
try {
ScanCodeAuthData.put("code", 0);
} catch (JSONException e) {
throw new RuntimeException(e);
}
callback.invoke(ScanCodeAuthData);//给uniapp 回传消息
}
}, new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE});
}
}else {
ScanCodeAuthData.put("code", 0);
callback.invoke(ScanCodeAuthData);//给uniapp 回传消息
}
}else if(event.equals("checkToken")){
JSONObject checkToken = new JSONObject();
checkToken.put("code", 200);
String access_token = SharePrefUtil.getString(MainActivity.this, "access_token", "");
if(StringUtil.isEmpty(access_token)){
checkToken.put("code", 0);
}
callback.invoke(checkToken);//给uniapp 回传消息
}
}catch (Exception e){
LogUtil.e("处理uniapp事件时出错: " + e.getMessage());
e.printStackTrace();
}
}
});
return view; return view;
} }
private OldPageNavigationView tab; private OldPageNavigationView tab;
@@ -822,6 +587,11 @@ public class MainActivity extends BaseActivity implements
sendJsonPostParamtoNetSignMD5(getShowMagazine,param,666,this); sendJsonPostParamtoNetSignMD5(getShowMagazine,param,666,this);
} }
private void getAccessToken(){
Map<String, String> param = new HashMap<>();
sendJsonPostParamtoNetSignMD5(getAccessToken, param, ACCESS_TOKEN,this);
}
private void registerSystemObserver(boolean register) { private void registerSystemObserver(boolean register) {
NIMClient.getService(MsgServiceObserve.class).observeCustomNotification( NIMClient.getService(MsgServiceObserve.class).observeCustomNotification(
customNotificationObserver, register); customNotificationObserver, register);
@@ -1096,12 +866,7 @@ public class MainActivity extends BaseActivity implements
sendJsonPostParamtoNetSignMD5(Url.getIsAccount,map,GETISACCOUNT,this); sendJsonPostParamtoNetSignMD5(Url.getIsAccount,map,GETISACCOUNT,this);
sendJsonPostParamtoNetSignMD5(Url.getGray,map,222,this); sendJsonPostParamtoNetSignMD5(Url.getGray,map,222,this);
sendJsonPostParamtoNetSignMD5(Url.checkUser,map,333,this); sendJsonPostParamtoNetSignMD5(Url.checkUser,map,333,this);
// sendJsonPostParamtoNetSignMD5(getAccessToken, param, ACCESS_TOKEN,this);
String access_token = SharePrefUtil.getString(MainActivity.this, "access_token", "");
if(StringUtil.isEmpty(access_token)){
Map<String, String> param = new HashMap<>();
sendJsonPostParamtoNetSignMD5(getAccessToken, param, ACCESS_TOKEN,this);
}
} }
private void getGray() { private void getGray() {
@@ -1414,7 +1179,8 @@ public class MainActivity extends BaseActivity implements
public void onCheckedChanged(RadioGroup group, int checkedId) { public void onCheckedChanged(RadioGroup group, int checkedId) {
auto_show_unimp = true; BaseApplication.auto_show_unimp = true;
/** 改变文字的颜色 */ /** 改变文字的颜色 */
if (badgeSysMsg != null) { if (badgeSysMsg != null) {
badgeSysMsg.hide(); badgeSysMsg.hide();
@@ -1587,6 +1353,7 @@ public class MainActivity extends BaseActivity implements
showUniMp(true); showUniMp(true);
} else if (checkedId == R.id.tab_rbn_my) { } else if (checkedId == R.id.tab_rbn_my) {
mToolbar.setBackgroundColor(getResources().getColor(R.color.top_bg)); mToolbar.setBackgroundColor(getResources().getColor(R.color.top_bg));
mToolbar.getBackground().setAlpha(255); mToolbar.getBackground().setAlpha(255);
@@ -1615,10 +1382,8 @@ public class MainActivity extends BaseActivity implements
// iv_yindao1.setBackgroundResource(R.drawable.yindao3); // iv_yindao1.setBackgroundResource(R.drawable.yindao3);
// } // }
} }
current_tab_id = checkedId; current_tab_id = checkedId;
} }
OnCheckedChangeListener mKPCheckListener = new OnCheckedChangeListener() { OnCheckedChangeListener mKPCheckListener = new OnCheckedChangeListener() {
@@ -1638,7 +1403,7 @@ public class MainActivity extends BaseActivity implements
}; };
//展示uniapp mp //展示uniapp mp
private void showUniMp(boolean showLoading){ public void showUniMp(boolean showLoading){
if(showLoading){ if(showLoading){
showFullScreenLoading(); showFullScreenLoading();
} }
@@ -1652,25 +1417,9 @@ public class MainActivity extends BaseActivity implements
if(StringUtil.isEmpty(access_token)){ if(StringUtil.isEmpty(access_token)){
Map<String, String> param = new HashMap<>(); Map<String, String> param = new HashMap<>();
sendJsonPostParamtoNetSignMD5(getAccessToken, param, ACCESS_TOKEN,this); sendJsonPostParamtoNetSignMD5(getAccessToken, param, ACCESS_TOKEN,this);
access_token = SharePrefUtil.getString(MainActivity.this, "access_token", "");
} }
JSONObject userInfo = new JSONObject(); MyUserIconUtil.showUniMp(MainActivity.this, "/pages/live/live", null);
userInfo.put("uuid", SharePrefUtil.getString(MainActivity.this, Constant.uuid, ""));
userInfo.put("realName", SharePrefUtil.getString(MainActivity.this, Constant.realName, ""));
userInfo.put("mobile", SharePrefUtil.getString(MainActivity.this, "mobile", ""));
userInfo.put("photo", SharePrefUtil.getString(MainActivity.this, Constant.photo, ""));
UniMPOpenConfiguration uniMPOpenConfiguration = new UniMPOpenConfiguration();
uniMPOpenConfiguration.splashClass = UniappSplashView.class;
// uniMPOpenConfiguration.path= "pages/live/live";
uniMPOpenConfiguration.extraData.put("darkmode", "light");
uniMPOpenConfiguration.extraData.put("token", access_token);
uniMPOpenConfiguration.extraData.put("userInfo", userInfo);
uniMPOpenConfiguration.extraData.put("targetPath", "/pages/live/live");
IUniMP uniapp_MP = DCUniMPSDK.getInstance().openUniMP(mContext, uniapp_mp_appid, uniMPOpenConfiguration);
BaseApplication.getUniMPCaches().put(uniapp_MP.getAppid(), uniapp_MP);
if(showLoading) { if(showLoading) {
hideFullScreenLoading(); hideFullScreenLoading();
} }
@@ -1755,9 +1504,22 @@ public class MainActivity extends BaseActivity implements
// intent.putExtra("title",getResources().getString(R.string.gandanhuifang)); // intent.putExtra("title",getResources().getString(R.string.gandanhuifang));
// startActivity(intent); // startActivity(intent);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// // 扫码功能主要需要 CAMERA 权限,Android 13+ 不需要存储权限
if (PermissionsUtil.hasPermission(MainActivity.this, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { boolean hasPermission;
//有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录 String[] permissionsToRequest;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
// Android 13+ 只需要 CAMERA 权限
hasPermission = PermissionsUtil.hasPermission(MainActivity.this, Manifest.permission.CAMERA);
permissionsToRequest = new String[]{Manifest.permission.CAMERA};
} else {
// Android 12及以下需要 CAMERA 和存储权限
hasPermission = PermissionsUtil.hasPermission(MainActivity.this, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE);
permissionsToRequest = new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
}
if (hasPermission) {
//有访问摄像头的权限
startToCapture(); startToCapture();
} else { } else {
EasyWindow.with(MainActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) EasyWindow.with(MainActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000)
@@ -1767,16 +1529,16 @@ public class MainActivity extends BaseActivity implements
@Override @Override
public void permissionGranted(@NonNull String[] permissions) { public void permissionGranted(@NonNull String[] permissions) {
EasyWindow.cancelAll(); EasyWindow.cancelAll();
//用户授予了访问读取短信的权限 //用户授予了访问摄像头的权限
startToCapture(); startToCapture();
} }
@Override @Override
public void permissionDenied(@NonNull String[] permissions) { public void permissionDenied(@NonNull String[] permissions) {
//用户拒绝了访问读取短信的申请 //用户拒绝了访问摄像头的申请
EasyWindow.cancelAll(); EasyWindow.cancelAll();
} }
}, new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); }, permissionsToRequest);
} }
}else { }else {
@@ -2236,7 +1998,8 @@ public class MainActivity extends BaseActivity implements
// registerReceiver(internalReceiver, intentfilter); // registerReceiver(internalReceiver, intentfilter);
if (Build.VERSION.SDK_INT >= 33) { // Android 13 (API 33) 及以上版本需要指定 RECEIVER_EXPORTED 或 RECEIVER_NOT_EXPORTED
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
registerReceiver(internalReceiver, intentfilter, Context.RECEIVER_NOT_EXPORTED); registerReceiver(internalReceiver, intentfilter, Context.RECEIVER_NOT_EXPORTED);
} else { } else {
registerReceiver(internalReceiver, intentfilter); registerReceiver(internalReceiver, intentfilter);
@@ -2308,11 +2071,26 @@ public class MainActivity extends BaseActivity implements
protected void onResume() { protected void onResume() {
LogUtil.i("onResume: ", current_tab_id+""); LogUtil.i("onResume: ", current_tab_id+"");
if(current_tab_id == R.id.tab_rbn_donation && auto_show_unimp){ if(current_tab_id == R.id.tab_rbn_donation && BaseApplication.auto_show_unimp){
showUniMp(true); long current_timestmp = System.currentTimeMillis();
//防止无限循环打开
if(current_timestmp - BaseApplication.auto_show_unimp_timestamp > 1.5 * 1000){
BaseApplication.auto_show_unimp_timestamp = current_timestmp;
showUniMp(true);
}else{
//触发错误次数
BaseApplication.auto_show_unimp_error_times ++;
//错误次数大于5,则关闭小程序
if(BaseApplication.auto_show_unimp_error_times > 5){
MyUserIconUtil.closeUniMP();
BaseApplication.auto_show_unimp_error_times = 0;
}
}
} }
super.onResume(); super.onResume();
ShowMagazine(); ShowMagazine();
getAccessToken();
if(!needshowGuideView()&&order>0) if(!needshowGuideView()&&order>0)
{ {
getGroup(); getGroup();
@@ -2322,14 +2100,11 @@ public class MainActivity extends BaseActivity implements
boolean fullExit = ECPreferences.getSharedPreferences().getBoolean( boolean fullExit = ECPreferences.getSharedPreferences().getBoolean(
ECPreferenceSettings.SETTINGS_FULLY_EXIT.getId(), false); ECPreferenceSettings.SETTINGS_FULLY_EXIT.getId(), false);
if (fullExit) { if (fullExit) {
// 1登入系统 2退出系统 3专家客户端在手机前台运行 4.专家客户端在手机后台运行 // 1登入系统 2退出系统 3专家客户端在手机前台运行 4.专家客户端在手机后台运行
BaseActivity.foreBack(mMainActivity, 2); BaseActivity.foreBack(mMainActivity, 2);
finish(); finish();
android.os.Process.killProcess(android.os.Process.myPid()); android.os.Process.killProcess(android.os.Process.myPid());
return; return;
} }
String account = getAutoRegistAccount(); String account = getAutoRegistAccount();
@@ -2350,7 +2125,6 @@ public class MainActivity extends BaseActivity implements
finish(); finish();
return; return;
} }
} }
// 统计未读消息 // 统计未读消息
@@ -2418,8 +2192,18 @@ public class MainActivity extends BaseActivity implements
if (resultCode == RESULT_OK && requestCode == 10086){ if (resultCode == RESULT_OK && requestCode == 10086){
SharePrefUtil.saveString(MainActivity.this, "newVersion", SharePrefUtil.saveString(MainActivity.this, "newVersion",
newVewsion); newVewsion);
// UpdateService 使用应用私有目录(getExternalFilesDir),Android 13+ 不需要存储权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (PermissionsUtil.hasPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { boolean needsPermission = Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU;
boolean hasPermission = true;
if (needsPermission) {
// Android 12及以下需要存储权限
hasPermission = PermissionsUtil.hasPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
// Android 13+ 保存到应用私有目录不需要权限
if (hasPermission) {
// 下载 // 下载
intent = new Intent(MainActivity.this, UpdateService.class); intent = new Intent(MainActivity.this, UpdateService.class);
intent.putExtra("newVersion", newVewsion); intent.putExtra("newVersion", newVewsion);
@@ -2449,7 +2233,7 @@ public class MainActivity extends BaseActivity implements
@Override @Override
public void permissionDenied(@NonNull String[] permissions) { public void permissionDenied(@NonNull String[] permissions) {
EasyWindow.cancelAll(); EasyWindow.cancelAll();
//用户拒绝了访问读写的申请 //用户拒绝了访问存储的申请
// //
} }
@@ -2591,8 +2375,18 @@ public class MainActivity extends BaseActivity implements
if (b){ if (b){
SharePrefUtil.saveString(MainActivity.this, "newVersion", SharePrefUtil.saveString(MainActivity.this, "newVersion",
newVersion); newVersion);
// UpdateService 使用应用私有目录(getExternalFilesDir),Android 13+ 不需要存储权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (PermissionsUtil.hasPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { boolean needsPermission = Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU;
boolean hasPermission = true;
if (needsPermission) {
// Android 12及以下需要存储权限
hasPermission = PermissionsUtil.hasPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
// Android 13+ 保存到应用私有目录不需要权限
if (hasPermission) {
// 下载 // 下载
intent = new Intent(MainActivity.this, UpdateService.class); intent = new Intent(MainActivity.this, UpdateService.class);
intent.putExtra("newVersion", newVewsion); intent.putExtra("newVersion", newVewsion);
@@ -2656,8 +2450,18 @@ public class MainActivity extends BaseActivity implements
}else { }else {
SharePrefUtil.saveString(MainActivity.this, "newVersion", SharePrefUtil.saveString(MainActivity.this, "newVersion",
newVersion); newVersion);
// UpdateService 使用应用私有目录(getExternalFilesDir),Android 13+ 不需要存储权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (PermissionsUtil.hasPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { boolean needsPermission = Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU;
boolean hasPermission = true;
if (needsPermission) {
// Android 12及以下需要存储权限
hasPermission = PermissionsUtil.hasPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
// Android 13+ 保存到应用私有目录不需要权限
if (hasPermission) {
// 下载 // 下载
intent = new Intent(MainActivity.this, UpdateService.class); intent = new Intent(MainActivity.this, UpdateService.class);
intent.putExtra("newVersion", newVewsion); intent.putExtra("newVersion", newVewsion);
@@ -2864,6 +2668,7 @@ public class MainActivity extends BaseActivity implements
}); });
} }
@Override @Override
public void onCallBackFromThread(String resultJson, int resultCode) { public void onCallBackFromThread(String resultJson, int resultCode) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
@@ -11,6 +11,7 @@ import cn.shangyu.gdxzExpert.R;
import cn.shangyu.gdxzExpert.base.BaseActivity; import cn.shangyu.gdxzExpert.base.BaseActivity;
import cn.shangyu.gdxzExpert.utils.CommonUtil; import cn.shangyu.gdxzExpert.utils.CommonUtil;
import cn.shangyu.gdxzExpert.utils.Constant; import cn.shangyu.gdxzExpert.utils.Constant;
import cn.shangyu.gdxzExpert.utils.MyUserIconUtil;
import cn.shangyu.gdxzExpert.utils.SharePrefUtil; import cn.shangyu.gdxzExpert.utils.SharePrefUtil;
import cn.shangyu.gdxzExpert.utils.UIUtils; import cn.shangyu.gdxzExpert.utils.UIUtils;
import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState;
@@ -112,14 +113,19 @@ public class MyDownLoadsActivity extends BaseActivity{
mRl_1.setVisibility(View.VISIBLE); mRl_1.setVisibility(View.VISIBLE);
mRl_2.setVisibility(View.VISIBLE); mRl_2.setVisibility(View.VISIBLE);
mRl_3.setVisibility(View.VISIBLE); mRl_3.setVisibility(View.VISIBLE);
mRl_4.setVisibility(View.GONE); mRl_4.setVisibility(View.VISIBLE);
mRl_5.setVisibility(View.VISIBLE);
mV_line1.setVisibility(View.VISIBLE); mV_line1.setVisibility(View.VISIBLE);
mV_line2.setVisibility(View.VISIBLE); mV_line2.setVisibility(View.VISIBLE);
mV_line3.setVisibility(View.VISIBLE); mV_line3.setVisibility(View.VISIBLE);
mV_line4.setVisibility(View.VISIBLE);
mV_line5.setVisibility(View.VISIBLE);
mTv_title1.setText("诊疗指南"); mTv_title1.setText("诊疗指南");
mTv_title2.setText("期刊杂志"); mTv_title2.setText("期刊杂志");
mTv_title3.setText("课件文档"); mTv_title3.setText("课件文档");
mTv_title4.setText("诊疗指南(新)");
mTv_title5.setText("课件文档(新)");
if(SharePrefUtil.getBoolean(this, Constant.ShowMagazine,true)) if(SharePrefUtil.getBoolean(this, Constant.ShowMagazine,true))
{ {
} }
@@ -207,13 +213,15 @@ public class MyDownLoadsActivity extends BaseActivity{
} }
} else if (id == R.id.rl_4) { } else if (id == R.id.rl_4) {
if (isDownLoad) { if (isDownLoad) {
//跳到uniapp 的缓存页面
MyUserIconUtil.showUniMp(MyDownLoadsActivity.this, "/pages_app/zhinanDownload/zhinanDownload", null);
} else { } else {
startActivity(new Intent(mActivity, CoollectVideoActivity.class).putExtra("name",mTv_title4.getText().toString())); startActivity(new Intent(mActivity, CoollectVideoActivity.class).putExtra("name",mTv_title4.getText().toString()));
} }
} else if (id == R.id.rl_5) { } else if (id == R.id.rl_5) {
if (isDownLoad) { if (isDownLoad) {
//跳到uniapp 的缓存页面
MyUserIconUtil.showUniMp(MyDownLoadsActivity.this, "/pages_app/pptDownload/pptDownload", null);
} else { } else {
startActivity(new Intent(mActivity, CoollectCourseActivity.class)); startActivity(new Intent(mActivity, CoollectCourseActivity.class));
} }

Some files were not shown because too many files have changed in this diff Show More