master
hwf453 2 years ago
parent 15f478d592
commit e0ea540716

@ -77,8 +77,7 @@ dependencies {
implementation files('libs/ksoap2-android-assembly-3.6.0-jar-with-dependencies.jar') implementation files('libs/ksoap2-android-assembly-3.6.0-jar-with-dependencies.jar')
implementation files('libs/MiPush_SDK_Client_3_4_3.jar') implementation files('libs/MiPush_SDK_Client_3_4_3.jar')
implementation files('libs/badgeview.jar') implementation files('libs/badgeview.jar')
implementation files('libs/TbsFileSdk_base_arm64_release_1.0.5.6000017.20230423093653.aar') implementation files('libs/TbsFileSdk_release_1.0.5.6000026.20231101115927.aar')
implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4' implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'com.zhy:autolayout:1.4.5' implementation 'com.zhy:autolayout:1.4.5'
@ -96,7 +95,7 @@ dependencies {
implementation 'com.hjq:toast:8.8' implementation 'com.hjq:toast:8.8'
implementation 'org.litepal.android:core:1.5.1' implementation 'org.litepal.android:core:1.5.1'
implementation 'com.orhanobut:logger:2.2.0' implementation 'com.orhanobut:logger:2.2.0'
implementation 'com.yanzhenjie:permission:2.0.3' // implementation 'com.yanzhenjie:permission:2.0.3'
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
implementation 'de.hdodenhof:circleimageview:3.1.0' implementation 'de.hdodenhof:circleimageview:3.1.0'
implementation 'com.github.chrisbanes.photoview:library:1.2.4' implementation 'com.github.chrisbanes.photoview:library:1.2.4'
@ -144,5 +143,6 @@ dependencies {
implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1' implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
implementation 'org.bouncycastle:bcpkix-jdk15on:1.47' implementation 'org.bouncycastle:bcpkix-jdk15on:1.47'
implementation 'commons-codec:commons-codec:1.15' implementation 'commons-codec:commons-codec:1.15'
implementation 'com.google.android.play:app-update:2.0.1'
implementation project(':videocompressor') implementation project(':videocompressor')
} }

@ -40,7 +40,6 @@
android:name="android.hardware.telephony" android:name="android.hardware.telephony"
android:required="false" /> android:required="false" />
<permission-group android:name="${applicationId}.andpermission" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
@ -456,6 +455,7 @@
android:screenOrientation="portrait" /> android:screenOrientation="portrait" />
<activity <activity
android:name=".ui.activity.XscbqyActivity" android:name=".ui.activity.XscbqyActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="portrait" /> android:screenOrientation="portrait" />
<activity <activity
android:name=".ui.activity.XscbqyWorkActivity" android:name=".ui.activity.XscbqyWorkActivity"

@ -1,30 +0,0 @@
package com.rehome.zhdcoa.receiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.widget.Toast;
public class NetworkStatusReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager manager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mobileInfo = manager .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
NetworkInfo wifiInfo = manager .getNetworkInfo(ConnectivityManager.TYPE_WIFI);
NetworkInfo activeInfo = manager.getActiveNetworkInfo();
if (activeInfo==null) {
Toast.makeText( context, "当前网络不可用,请检查网络", Toast.LENGTH_SHORT) .show();
}else {
if (activeInfo.getTypeName().equals("mobile")) {
Toast.makeText( context, "mobile:" + mobileInfo.isConnected() +
"\nactive:" + activeInfo.getTypeName(), Toast.LENGTH_SHORT) .show();
}
if (activeInfo.getTypeName().equals("wifi")) {
Toast.makeText( context, "wifi:" + wifiInfo.isConnected() +
"\nactive:" + activeInfo.getTypeName(), Toast.LENGTH_SHORT) .show();
}
}
}
}

@ -8,8 +8,11 @@ import android.content.IntentFilter;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.NetworkInfo; import android.net.NetworkInfo;
import android.os.Binder; import android.os.Binder;
import android.os.Build;
import android.os.IBinder; import android.os.IBinder;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import com.orhanobut.logger.Logger; import com.orhanobut.logger.Logger;
import com.rehome.zhdcoa.Contans; import com.rehome.zhdcoa.Contans;
@ -23,6 +26,7 @@ public class BackUploadService extends Service {
public BackUploadService() { public BackUploadService() {
} }
private LocalBroadcastManager localBroadcastManager ;
// 实时监听网络状态改变 // 实时监听网络状态改变
private final BroadcastReceiver mReceiver = new BroadcastReceiver() { private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@ -70,10 +74,21 @@ public class BackUploadService extends Service {
} }
@Override @Override
public void onCreate() {// 注册广播 public void onCreate() {
// 注册广播
IntentFilter mFilter = new IntentFilter(); IntentFilter mFilter = new IntentFilter();
mFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); // 添加接收网络连接状态改变的Action mFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); // 添加接收网络连接状态改变的Action
registerReceiver(mReceiver, mFilter);
//注册广播接收器
localBroadcastManager = LocalBroadcastManager.getInstance(this) ;
localBroadcastManager.registerReceiver( mReceiver , mFilter );
// if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU){
// // 这个私有广播接收器不能够接收来自其他应用的广播。
// registerReceiver(mReceiver, mFilter,RECEIVER_NOT_EXPORTED);
// }else{
// registerReceiver(mReceiver, mFilter);
// }
} }
/* /*
@ -116,7 +131,9 @@ public class BackUploadService extends Service {
@Override @Override
public void onDestroy() { public void onDestroy() {
super.onDestroy(); super.onDestroy();
unregisterReceiver(mReceiver); // 删除广播 //unregisterReceiver(mReceiver); // 删除广播
//取消注册广播,防止内存泄漏
localBroadcastManager.unregisterReceiver( mReceiver );
} }
@Override @Override

@ -16,6 +16,7 @@ import android.view.WindowManager;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.core.content.FileProvider; import androidx.core.content.FileProvider;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import com.rehome.zhdcoa.App; import com.rehome.zhdcoa.App;
import com.rehome.zhdcoa.BuildConfig; import com.rehome.zhdcoa.BuildConfig;
@ -62,7 +63,6 @@ public class PushService extends IntentService {
private int[] whats = new int[]{}; private int[] whats = new int[]{};
private final String PATH = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "/com.rehome.zhdcoa/"; private final String PATH = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "/com.rehome.zhdcoa/";
private final String FILENAME = "zdxoaapp.apk"; private final String FILENAME = "zdxoaapp.apk";
@ -250,14 +250,14 @@ public class PushService extends IntentService {
Intent intent = new Intent(); Intent intent = new Intent();
intent.putExtra("isTask", true); intent.putExtra("isTask", true);
intent.setAction("com.rehome.zhdcoa.RECEIVER"); intent.setAction("com.rehome.zhdcoa.RECEIVER");
sendBroadcast(intent); LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);
} }
} else { } else {
DataSupport.deleteAll(XwaqgcJh.class); DataSupport.deleteAll(XwaqgcJh.class);
Intent intent = new Intent(); Intent intent = new Intent();
intent.putExtra("isTask", false); intent.putExtra("isTask", false);
intent.setAction("com.rehome.zhdcoa.RECEIVER"); intent.setAction("com.rehome.zhdcoa.RECEIVER");
sendBroadcast(intent); LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);
} }
} }
break; break;
@ -463,4 +463,26 @@ public class PushService extends IntentService {
} }
return null; return null;
} }
private String getVersionNameNew() {
//1,包管理者对象packageManager
PackageManager pm = getPackageManager();
//2,从包的管理者对象中,获取指定包名的基本信息(版本名称,版本号),传0代表获取基本信息
try {
PackageInfo packageInfo;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
packageInfo = pm.getPackageInfo(getPackageName(), PackageManager.PackageInfoFlags.of(0));
} else {
packageInfo = pm.getPackageInfo(getPackageName(), 0);
}
return packageInfo.versionName;
//PackageInfo packageInfo = pm.getPackageInfo(getPackageName(), 0);
//3,获取版本名称
//return packageInfo.versionName;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
} }

@ -35,6 +35,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentPagerAdapter; import androidx.fragment.app.FragmentPagerAdapter;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import androidx.viewpager.widget.ViewPager; import androidx.viewpager.widget.ViewPager;
import okhttp3.MediaType; import okhttp3.MediaType;
import okhttp3.RequestBody; import okhttp3.RequestBody;
@ -226,7 +227,8 @@ public class Activity_ExamOnline extends BaseActivity {
//刷新培训考试列表界面 //刷新培训考试列表界面
Intent intent = new Intent(Contans.REFRESH_LIST_EXAM_DATA); Intent intent = new Intent(Contans.REFRESH_LIST_EXAM_DATA);
intent.putExtra("id", id); intent.putExtra("id", id);
sendBroadcast(intent); LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
timer.cancel(); timer.cancel();
finish(); finish();
} }
@ -359,7 +361,7 @@ public class Activity_ExamOnline extends BaseActivity {
//刷新培训考试列表界面 //刷新培训考试列表界面
Intent intent = new Intent(Contans.REFRESH_LIST_EXAM_DATA); Intent intent = new Intent(Contans.REFRESH_LIST_EXAM_DATA);
intent.putExtra("id", id); intent.putExtra("id", id);
sendBroadcast(intent); LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
} }
} }
} }

@ -70,7 +70,7 @@ public class DJPXinfoMoreActivity extends BaseActivity {
private String videoPath = "/mnt/sdcard/documents/"; private String videoPath = "/mnt/sdcard/documents/";
private String videoName = "test.flv"; private String videoName = "test.flv";
private Integer x5DownloadProgress = 0; //private Integer x5DownloadProgress = 0;
private void findView() { private void findView() {
kcmcTx = findViewById(R.id.kcmc_tx); kcmcTx = findViewById(R.id.kcmc_tx);
@ -134,27 +134,6 @@ public class DJPXinfoMoreActivity extends BaseActivity {
filedataBeans = new ArrayList<>(); filedataBeans = new ArrayList<>();
dialogDatas = new ArrayList<>(); dialogDatas = new ArrayList<>();
//注册广播接收, 监听X5内核下载进度
IntentFilter intentFilter = new IntentFilter("X5DownloadProgress");
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String progress = intent.getStringExtra("progress");
if (progress != null) {
x5DownloadProgress = Integer.valueOf(progress);
}
}
}, intentFilter);
//注册广播接收, 监听X5内核安装完成
IntentFilter intentFilterX5Install = new IntentFilter("X5InstallFinish");
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
}
}, intentFilterX5Install);
} }
@Override @Override

@ -5,8 +5,10 @@ import android.content.BroadcastReceiver
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.IntentFilter import android.content.IntentFilter
import android.os.Build
import android.util.Log import android.util.Log
import android.view.View import android.view.View
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import com.rehome.zhdcoa.App import com.rehome.zhdcoa.App
import com.rehome.zhdcoa.Contans import com.rehome.zhdcoa.Contans
import com.rehome.zhdcoa.R import com.rehome.zhdcoa.R
@ -20,8 +22,11 @@ import com.yolanda.nohttp.NoHttp
import com.yolanda.nohttp.RequestMethod import com.yolanda.nohttp.RequestMethod
import com.yolanda.nohttp.rest.Response import com.yolanda.nohttp.rest.Response
class ExamInfoDetailActivity : BaseActivityOaToolbarViewBinding<ActivityExamInfoDetailBinding>() { class ExamInfoDetailActivity : BaseActivityOaToolbarViewBinding<ActivityExamInfoDetailBinding>() {
private lateinit var localBroadcastManager: LocalBroadcastManager
//考试数据 //考试数据
private var produceExamDatas: MutableList<ExerciseKstmBean.RowsBean?>? = mutableListOf() private var produceExamDatas: MutableList<ExerciseKstmBean.RowsBean?>? = mutableListOf()
private lateinit var mIntent: Intent private lateinit var mIntent: Intent
@ -256,7 +261,17 @@ class ExamInfoDetailActivity : BaseActivityOaToolbarViewBinding<ActivityExamInfo
}) })
val filter = IntentFilter() val filter = IntentFilter()
filter.addAction(Contans.REFRESH_LIST_EXAM_DETAIL_DATA) filter.addAction(Contans.REFRESH_LIST_EXAM_DETAIL_DATA)
registerReceiver(myReceiver, filter)
//注册广播接收器
localBroadcastManager = LocalBroadcastManager.getInstance( this )
localBroadcastManager.registerReceiver( myReceiver , filter )
// if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU){
// // 这个私有广播接收器不能够接收来自其他应用的广播。
// registerReceiver(myReceiver, filter, RECEIVER_NOT_EXPORTED)
// }else{
// registerReceiver(myReceiver, filter)
// }
} }
@ -271,7 +286,9 @@ class ExamInfoDetailActivity : BaseActivityOaToolbarViewBinding<ActivityExamInfo
override fun onDestroy() { override fun onDestroy() {
super.onDestroy() super.onDestroy()
unregisterReceiver(myReceiver) //unregisterReceiver(myReceiver)
//取消注册广播,防止内存泄漏
localBroadcastManager.unregisterReceiver( myReceiver );
} }

@ -0,0 +1,89 @@
package com.rehome.zhdcoa.ui.activity
import android.app.Activity
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import com.google.android.play.core.appupdate.AppUpdateInfo
import com.google.android.play.core.appupdate.AppUpdateManager
import com.google.android.play.core.appupdate.AppUpdateManagerFactory
import com.google.android.play.core.install.InstallState
import com.google.android.play.core.install.InstallStateUpdatedListener
import com.google.android.play.core.install.model.AppUpdateType
import com.google.android.play.core.install.model.InstallStatus
import com.google.android.play.core.install.model.UpdateAvailability
import java.lang.Exception
class InAppUpdate(activity: Activity): InstallStateUpdatedListener {
var TAG = javaClass.simpleName
private var appUpdateManager: AppUpdateManager
private var parentActivity: Activity = activity
private var currentType = AppUpdateType.FLEXIBLE
private var SELF_UPDATE_REQUEST_CODE = 1
init {
Log.i(TAG, "init: I100: Init InAppUpdate")
appUpdateManager = AppUpdateManagerFactory.create(parentActivity)
appUpdateManager.appUpdateInfo.addOnSuccessListener { info->
Log.i(TAG, "init: I100: update info $info")
if (info.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE){
Log.i(TAG, "I100: init: have update available")
} else {
Log.i(TAG, "I100: init: no update available")
}
}
appUpdateManager.registerListener(this)
}
private fun startUpdate(info: AppUpdateInfo, type: Int){
try {
appUpdateManager.startUpdateFlowForResult(info,type,parentActivity, SELF_UPDATE_REQUEST_CODE)
currentType = type
}catch (exception:Exception){
Log.i(TAG, exception.message.toString())
}
}
fun onResume(){
appUpdateManager.appUpdateInfo.addOnSuccessListener { info->
if(currentType == AppUpdateType.FLEXIBLE){
if(info.installStatus() == InstallStatus.DOWNLOADED)
flexibleUpdateDownloadCompleted()
} else if (currentType == AppUpdateType.IMMEDIATE){
if(info.updateAvailability() == UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS) {
startUpdate(info, AppUpdateType.IMMEDIATE)
}
}
}
}
fun onActivityResult(requestCode: Int, resultCode: Int){
if(requestCode == SELF_UPDATE_REQUEST_CODE){
if(resultCode != AppCompatActivity.RESULT_OK){
Log.i("app","Update flow failed: $resultCode")
}
}
}
fun checkForUpdates(){
}
private fun flexibleUpdateDownloadCompleted(){
// Snackbar.make(
// (parentActivity as MainActivity).binding.appBarMain.coordinatorLayout,
// "An app update has just been downloaded. Please restart app.",
// Snackbar.LENGTH_INDEFINITE
// ).apply {
// setAction("RESTART") { appUpdateManager.completeUpdate()}
// setActionTextColor(Color.WHITE)
// show()
// }
}
fun onDestroy(){
appUpdateManager.unregisterListener(this)
}
override fun onStateUpdate(state: InstallState) {
if(state.installStatus() == InstallStatus.DOWNLOADED){
flexibleUpdateDownloadCompleted()
}
}
}

@ -24,9 +24,13 @@ import com.rehome.zhdcoa.bean.UserInfoBean
import com.rehome.zhdcoa.databinding.ActivityLoginBinding import com.rehome.zhdcoa.databinding.ActivityLoginBinding
import com.rehome.zhdcoa.ui.toastview.toastviewbymyself import com.rehome.zhdcoa.ui.toastview.toastviewbymyself
import com.rehome.zhdcoa.utils.* import com.rehome.zhdcoa.utils.*
import com.xiaomi.mipush.sdk.MiPushClient import com.xiaomi.mipush.sdk.MiPushClient
import com.yanzhenjie.permission.AndPermission //import com.yanzhenjie.permission.AndPermission
import com.yanzhenjie.permission.runtime.Permission //import com.yanzhenjie.permission.runtime.Permission
import com.yolanda.nohttp.NoHttp import com.yolanda.nohttp.NoHttp
import com.yolanda.nohttp.RequestMethod import com.yolanda.nohttp.RequestMethod
import com.yolanda.nohttp.rest.Response import com.yolanda.nohttp.rest.Response
@ -127,13 +131,16 @@ class LoginActivity : BaseActivityOaToolbarViewBinding<ActivityLoginBinding>() {
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
override fun initData() { override fun initData() {
binding.tvVersionCode.text = getString(R.string.version_code) + getVersionName() binding.tvVersionCode.text = getString(R.string.version_code) + getVersionName()
AndPermission.with(this).runtime().permission(
Permission.READ_PHONE_STATE,
Permission.READ_EXTERNAL_STORAGE, // AndPermission.with(this).runtime().permission(
Permission.WRITE_EXTERNAL_STORAGE, // Permission.READ_PHONE_STATE,
Permission.CAMERA // Permission.READ_EXTERNAL_STORAGE,
).onGranted { }.onDenied { } // Permission.WRITE_EXTERNAL_STORAGE,
.start() // Permission.CAMERA
// ).onGranted { }.onDenied { }
// .start()
val UserIDTemp = SPUtils.get(context, Contans.SP.USER_NAME, "") as String val UserIDTemp = SPUtils.get(context, Contans.SP.USER_NAME, "") as String
val UserPwdTemp = SPUtils.get(context, Contans.SP.PASS_WORD, "") as String val UserPwdTemp = SPUtils.get(context, Contans.SP.PASS_WORD, "") as String
@ -151,8 +158,16 @@ class LoginActivity : BaseActivityOaToolbarViewBinding<ActivityLoginBinding>() {
if (BuildConfig.LOG_ERROR) { if (BuildConfig.LOG_ERROR) {
// 管理员 // 管理员
binding.etUsername.setText("ZHPS_Admin") // binding.etUsername.setText("ZHPS_Admin")
binding.etPassword.setText("Rehome.zhps@996") // binding.etPassword.setText("Rehome.zhps@996")
// binding.etUsername.setText("310287")
// binding.etPassword.setText("He200002@")
binding.etUsername.setText("310148")
binding.etPassword.setText("ZZZHdc4321.")
} }

@ -14,6 +14,7 @@ import android.widget.RadioGroup
import android.widget.Toast import android.widget.Toast
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentPagerAdapter import androidx.fragment.app.FragmentPagerAdapter
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import androidx.viewpager.widget.ViewPager import androidx.viewpager.widget.ViewPager
import com.azhon.appupdate.listener.OnButtonClickListener import com.azhon.appupdate.listener.OnButtonClickListener
import com.azhon.appupdate.listener.OnDownloadListener import com.azhon.appupdate.listener.OnDownloadListener
@ -311,7 +312,7 @@ class MainActivity : BaseActivityOaToolbarViewBinding<ActivityMainBinding>() {
.component!!.className .component!!.className
intent.putExtra("className", launchClassName) intent.putExtra("className", launchClassName)
intent.putExtra("notificationNum", number) intent.putExtra("notificationNum", number)
context.sendBroadcast(intent) LocalBroadcastManager.getInstance( context ).sendBroadcast(intent)
} catch (e: java.lang.Exception) { } catch (e: java.lang.Exception) {
e.printStackTrace() e.printStackTrace()
} }

@ -1,6 +1,8 @@
package com.rehome.zhdcoa.ui.activity; package com.rehome.zhdcoa.ui.activity;
import android.Manifest;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.res.AssetFileDescriptor; import android.content.res.AssetFileDescriptor;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.media.AudioManager; import android.media.AudioManager;
@ -11,6 +13,11 @@ import android.os.Vibrator;
import android.view.SurfaceHolder; import android.view.SurfaceHolder;
import android.view.SurfaceView; import android.view.SurfaceView;
import android.widget.Toast; import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.google.zxing.BarcodeFormat; import com.google.zxing.BarcodeFormat;
import com.google.zxing.Result; import com.google.zxing.Result;
import com.rehome.zhdcoa.R; import com.rehome.zhdcoa.R;
@ -19,8 +26,6 @@ import com.rehome.zhdcoa.zxing.camera.CameraManager;
import com.rehome.zhdcoa.zxing.decoding.CaptureActivityHandler; import com.rehome.zhdcoa.zxing.decoding.CaptureActivityHandler;
import com.rehome.zhdcoa.zxing.decoding.InactivityTimer; import com.rehome.zhdcoa.zxing.decoding.InactivityTimer;
import com.rehome.zhdcoa.zxing.view.ViewfinderView; import com.rehome.zhdcoa.zxing.view.ViewfinderView;
import com.yanzhenjie.permission.AndPermission;
import com.yanzhenjie.permission.runtime.Permission;
import java.io.IOException; import java.io.IOException;
import java.util.Vector; import java.util.Vector;
@ -30,6 +35,9 @@ import java.util.Vector;
public class MipcaActivityCapture extends BaseActivity2 implements SurfaceHolder.Callback { public class MipcaActivityCapture extends BaseActivity2 implements SurfaceHolder.Callback {
private static final int CAMERA_REQUEST_CODE = 3;//请求码
private SurfaceHolder mSurfaceHolder;
private CaptureActivityHandler handler; private CaptureActivityHandler handler;
private ViewfinderView viewfinderView; private ViewfinderView viewfinderView;
@ -152,17 +160,7 @@ public class MipcaActivityCapture extends BaseActivity2 implements SurfaceHolder
public void surfaceCreated(SurfaceHolder holder) { public void surfaceCreated(SurfaceHolder holder) {
if (!hasSurface) { if (!hasSurface) {
hasSurface = true; hasSurface = true;
AndPermission.with(this) checkPermission(holder);
.runtime()
.permission(Permission.CAMERA)
.onGranted(permissions -> {
initCamera(holder);
})
.onDenied(permissions -> {
Toast.makeText(MipcaActivityCapture.this, "没有权限,请到设置-权限管理中开启", Toast.LENGTH_SHORT).show();
finish();
})
.start();
} }
} }
@ -173,6 +171,43 @@ public class MipcaActivityCapture extends BaseActivity2 implements SurfaceHolder
} }
private void checkPermission(SurfaceHolder surfaceHolder) {
/**
*
*/
if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)) {
showToast("设备没有闪光灯,无法开启手电筒");
return;
}
this.mSurfaceHolder = surfaceHolder;
//动态权限申请
if (ContextCompat.checkSelfPermission(MipcaActivityCapture.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
//权限请求
ActivityCompat.requestPermissions(MipcaActivityCapture.this, new String[]{Manifest.permission.CAMERA}, CAMERA_REQUEST_CODE);
} else {
initCamera(surfaceHolder);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (CAMERA_REQUEST_CODE==requestCode){
if (grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED) {
checkPermission(this.mSurfaceHolder);
}else {
//权限拒绝
Toast.makeText(MipcaActivityCapture.this, "没有权限,请到设置-权限管理中开启", Toast.LENGTH_SHORT).show();
finish();
}
}
}
public ViewfinderView getViewfinderView() { public ViewfinderView getViewfinderView() {
return viewfinderView; return viewfinderView;
} }

@ -7,6 +7,7 @@ import android.view.View
import android.widget.Toast import android.widget.Toast
import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import com.google.gson.Gson import com.google.gson.Gson
import com.rehome.zhdcoa.Contans import com.rehome.zhdcoa.Contans
import com.rehome.zhdcoa.R import com.rehome.zhdcoa.R
@ -437,8 +438,7 @@ class ProduceStudyInfoMoreActivity :
if (resultCode == RESULT_OK) { if (resultCode == RESULT_OK) {
val intent = Intent(Contans.ACTION_REFLASH_PRODUCE_FRAGMENT) val intent = Intent(Contans.ACTION_REFLASH_PRODUCE_FRAGMENT)
//发送广播,刷新页面 //发送广播,刷新页面
//发送广播,刷新页面 LocalBroadcastManager.getInstance(context).sendBroadcast(intent)
sendBroadcast(intent)
} }
} }
} }

@ -86,23 +86,6 @@ class TrainInfoMoreActivity : BaseActivityOaToolbarViewBinding<ActivityTrainInfo
binding.xxxdEdit.isSingleLine = false binding.xxxdEdit.isSingleLine = false
binding.xxxdEdit.setHorizontallyScrolling(false) binding.xxxdEdit.setHorizontallyScrolling(false)
binding.xxxdEdit.setText("00:00") binding.xxxdEdit.setText("00:00")
//注册广播接收, 监听X5内核安装完成
//注册广播接收, 监听X5内核安装完成
val intentFilterX5Install = IntentFilter("X5InstallFinish")
registerReceiver(object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val dialog1 = AuditDialog(context,
"文件预览内核初始化完成,请关闭APP后重新打开文档预览、视频播放才能正常使用",
object : AuditDialog.AuditDialogListener {
override fun confirm() {}
override fun cancel() {}
})
dialog1.show()
}
}, intentFilterX5Install)
} }
override fun initData() { override fun initData() {

@ -259,5 +259,17 @@ public class XscbqyActivity extends BaseActivity2 {
requestDatas(); requestDatas();
} }
} }
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// 在此处保存需要恢复的数据
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// 在此处恢复保存的数据
}
} }

@ -4,11 +4,13 @@ import android.content.BroadcastReceiver
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.IntentFilter import android.content.IntentFilter
import android.os.Build
import android.util.Log import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.AdapterView import android.widget.AdapterView
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import com.google.gson.Gson import com.google.gson.Gson
import com.rehome.zhdcoa.App import com.rehome.zhdcoa.App
import com.rehome.zhdcoa.Contans import com.rehome.zhdcoa.Contans
@ -36,6 +38,8 @@ class ExamFragment : BaseViewBindingFragment<FragmentExamBinding>() {
private var kslb_id: kotlin.String? = null private var kslb_id: kotlin.String? = null
private var datas: MutableList<GetKsLbBean.RowsBean> = mutableListOf() private var datas: MutableList<GetKsLbBean.RowsBean> = mutableListOf()
private lateinit var localBroadcastManager: LocalBroadcastManager
private val myReceiver: BroadcastReceiver = object : BroadcastReceiver() { private val myReceiver: BroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) { override fun onReceive(context: Context, intent: Intent) {
val action = intent.action val action = intent.action
@ -65,7 +69,17 @@ class ExamFragment : BaseViewBindingFragment<FragmentExamBinding>() {
val filter = IntentFilter() val filter = IntentFilter()
filter.addAction(Contans.REFRESH_LIST_EXAM_DATA) filter.addAction(Contans.REFRESH_LIST_EXAM_DATA)
requireActivity().registerReceiver(myReceiver, filter)
//注册广播接收器
localBroadcastManager = LocalBroadcastManager.getInstance( context )
localBroadcastManager.registerReceiver( myReceiver , filter )
// if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU){
// // 这个私有广播接收器不能够接收来自其他应用的广播。
// requireActivity().registerReceiver(myReceiver, filter, Context.RECEIVER_NOT_EXPORTED)
// }else{
// requireActivity().registerReceiver(myReceiver, filter)
// }
setAdapter() setAdapter()
getValidExamTrainList() getValidExamTrainList()
@ -77,7 +91,9 @@ class ExamFragment : BaseViewBindingFragment<FragmentExamBinding>() {
override fun onDestroy() { override fun onDestroy() {
super.onDestroy() super.onDestroy()
requireActivity().unregisterReceiver(myReceiver) //requireActivity().unregisterReceiver(myReceiver)
//取消注册广播,防止内存泄漏
localBroadcastManager.unregisterReceiver( myReceiver );
} }
private fun getValidExamTrainList() { private fun getValidExamTrainList() {
@ -142,7 +158,7 @@ class ExamFragment : BaseViewBindingFragment<FragmentExamBinding>() {
val intent = val intent =
Intent(Contans.REFRESH_LIST_EXAM_DETAIL_DATA) Intent(Contans.REFRESH_LIST_EXAM_DETAIL_DATA)
intent.putExtra("item", Gson().toJson(item)) intent.putExtra("item", Gson().toJson(item))
requireActivity().sendBroadcast(intent) localBroadcastManager.sendBroadcast(intent)
} }
} }
} }

@ -2,13 +2,17 @@ package com.rehome.zhdcoa.ui.fragment
import android.content.BroadcastReceiver import android.content.BroadcastReceiver
import android.content.Context import android.content.Context
import android.content.Context.RECEIVER_NOT_EXPORTED
import android.content.Intent import android.content.Intent
import android.content.IntentFilter import android.content.IntentFilter
import android.os.Build
import android.util.Log import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.AdapterView import android.widget.AdapterView
import androidx.annotation.RequiresApi
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import com.rehome.zhdcoa.App import com.rehome.zhdcoa.App
import com.rehome.zhdcoa.Contans import com.rehome.zhdcoa.Contans
import com.rehome.zhdcoa.adapter.ProduceStudyAdapter import com.rehome.zhdcoa.adapter.ProduceStudyAdapter
@ -32,20 +36,34 @@ import com.yolanda.nohttp.rest.Response
*/ */
class ProduceFragment : BaseViewBindingFragment<FragmentProduceBinding>() { class ProduceFragment : BaseViewBindingFragment<FragmentProduceBinding>() {
private val kstype = "1" private val kstype = "1"
private var times:String = "" private var times: String = ""
private var timee:String = "" private var timee: String = ""
private var kslb_id:String? = null private var kslb_id: String? = null
private var datas: MutableList<ProduceStudyBean.RowsBean> = mutableListOf() private var datas: MutableList<ProduceStudyBean.RowsBean> = mutableListOf()
private lateinit var produceStudyAdapter: ProduceStudyAdapter private lateinit var produceStudyAdapter: ProduceStudyAdapter
private lateinit var localBroadcastManager: LocalBroadcastManager
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?)= FragmentProduceBinding.inflate(inflater)
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?) =
FragmentProduceBinding.inflate(inflater)
@RequiresApi(Build.VERSION_CODES.O)
override fun initView() { override fun initView() {
//注册广播,刷新页面 //注册广播,刷新页面
val filter = IntentFilter() val filter = IntentFilter()
filter.addAction(Contans.ACTION_REFLASH_PRODUCE_FRAGMENT) filter.addAction(Contans.ACTION_REFLASH_PRODUCE_FRAGMENT)
requireActivity().registerReceiver(myReceiver, filter)
//注册广播接收器
localBroadcastManager = LocalBroadcastManager.getInstance(context);
localBroadcastManager.registerReceiver(myReceiver, filter)
// if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU){
// // 这个私有广播接收器不能够接收来自其他应用的广播。
// requireActivity().registerReceiver(myReceiver, filter,RECEIVER_NOT_EXPORTED)
// }else{
// requireActivity().registerReceiver(myReceiver, filter)
// }
binding.lvMemberNodata.visibility = View.VISIBLE binding.lvMemberNodata.visibility = View.VISIBLE
binding.bottomBtn.setOnClickListener(View.OnClickListener { binding.bottomBtn.setOnClickListener(View.OnClickListener {
@ -83,7 +101,7 @@ class ProduceFragment : BaseViewBindingFragment<FragmentProduceBinding>() {
} }
} }
private val myReceiver: BroadcastReceiver? = object : BroadcastReceiver() { private val myReceiver: BroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) { override fun onReceive(context: Context, intent: Intent) {
val action = intent.action val action = intent.action
if (Contans.ACTION_REFLASH_PRODUCE_FRAGMENT == action) { if (Contans.ACTION_REFLASH_PRODUCE_FRAGMENT == action) {
@ -94,37 +112,38 @@ class ProduceFragment : BaseViewBindingFragment<FragmentProduceBinding>() {
override fun onDestroyView() { override fun onDestroyView() {
super.onDestroyView() super.onDestroyView()
if (myReceiver != null) { //requireActivity().unregisterReceiver(myReceiver)
requireActivity().unregisterReceiver(myReceiver) //取消注册广播,防止内存泄漏
} localBroadcastManager.unregisterReceiver(myReceiver);
} }
fun getProduceStudyData() { fun getProduceStudyData() {
val username = App.getInstance().userInfo.manid val username = App.getInstance().userInfo.manid
val url = Contans.BASE_URL + Contans.PRODUCE_STUDY_DATA_URL + username val url = Contans.BASE_URL + Contans.PRODUCE_STUDY_DATA_URL + username
val request = NoHttp.createStringRequest(url, RequestMethod.GET) val request = NoHttp.createStringRequest(url, RequestMethod.GET)
NohttpUtils.getInstance().addNoProgress(requireActivity(),0, request, object : HttpListener<String?> { NohttpUtils.getInstance()
.addNoProgress(requireActivity(), 0, request, object : HttpListener<String?> {
override fun onSucceed(what: Int, response: Response<String?>?) {
Log.i("app", "----------------") override fun onSucceed(what: Int, response: Response<String?>?) {
val result = response?.get() Log.i("app", "----------------")
Log.i("app", result?:"result is null") val result = response?.get()
val bean = GsonUtils.GsonToBean( Log.i("app", result ?: "result is null")
result, val bean = GsonUtils.GsonToBean(
ProduceStudyBean::class.java result,
) ProduceStudyBean::class.java
if (bean != null && bean.rows.size > 0) { )
binding.lvMemberNodata.visibility = View.GONE if (bean != null && bean.rows.size > 0) {
datas.clear() binding.lvMemberNodata.visibility = View.GONE
datas.addAll(bean.rows) datas.clear()
produceStudyAdapter.notifyDataSetChanged() datas.addAll(bean.rows)
} else { produceStudyAdapter.notifyDataSetChanged()
showToast("无数据") } else {
binding.lvMemberNodata.visibility = View.VISIBLE showToast("无数据")
binding.lvMemberNodata.visibility = View.VISIBLE
}
} }
}
override fun onFailed(what: Int, response: Response<String?>?) {} override fun onFailed(what: Int, response: Response<String?>?) {}
}) })
} }
} }

@ -1,17 +1,22 @@
package com.rehome.zhdcoa.ui.fragment; package com.rehome.zhdcoa.ui.fragment;
import static android.content.Context.RECEIVER_NOT_EXPORTED;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.ColorDrawable;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.GridView; import android.widget.GridView;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import com.rehome.zhdcoa.App; import com.rehome.zhdcoa.App;
import com.rehome.zhdcoa.Contans; import com.rehome.zhdcoa.Contans;
import com.rehome.zhdcoa.DBModel.AjhScInfo; import com.rehome.zhdcoa.DBModel.AjhScInfo;
@ -74,10 +79,12 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
public class YunXingFragment extends BaseFragment { public class YunXingFragment extends BaseFragment {
private static YunXingFragment instance = null; private static YunXingFragment instance = null;
GridView gvYx; GridView gvYx;
private final List<GridViewBean> beanList = new ArrayList<>(); private final List<GridViewBean> beanList = new ArrayList<>();
private GridViewYXAdapter adapter; private GridViewYXAdapter adapter;
private LocalBroadcastManager localBroadcastManager ;
private MsgReceiver msgReceiver; private MsgReceiver msgReceiver;
private boolean isTask = false;//是否有任务 private boolean isTask = false;//是否有任务
private final String[] str = {"设备巡点检", "移动仓库", "安健环巡查", "综合巡查", "行为安全观察", "工单录入", "巡视抄表", "定期工作", "设备报表查询"}; private final String[] str = {"设备巡点检", "移动仓库", "安健环巡查", "综合巡查", "行为安全观察", "工单录入", "巡视抄表", "定期工作", "设备报表查询"};
@ -112,7 +119,19 @@ public class YunXingFragment extends BaseFragment {
msgReceiver = new MsgReceiver(); msgReceiver = new MsgReceiver();
IntentFilter intentFilter = new IntentFilter(); IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.rehome.ydoa.RECEIVER"); intentFilter.addAction("com.rehome.ydoa.RECEIVER");
requireActivity().registerReceiver(msgReceiver, intentFilter);
//注册广播接收器
localBroadcastManager = LocalBroadcastManager.getInstance(mActivity) ;
localBroadcastManager.registerReceiver( msgReceiver , intentFilter );
// if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU){
// // 这个私有广播接收器不能够接收来自其他应用的广播。
// requireActivity().registerReceiver(msgReceiver, intentFilter,RECEIVER_NOT_EXPORTED);
// }else{
// requireActivity().registerReceiver(msgReceiver, intentFilter);
// }
zys = new ArrayList<>(); zys = new ArrayList<>();
@ -565,7 +584,9 @@ public class YunXingFragment extends BaseFragment {
@Override @Override
public void onDestroy() { public void onDestroy() {
requireActivity().unregisterReceiver(msgReceiver); //requireActivity().unregisterReceiver(msgReceiver);
super.onDestroy(); super.onDestroy();
//取消注册广播,防止内存泄漏
localBroadcastManager.unregisterReceiver( msgReceiver );
} }
} }

@ -49,6 +49,7 @@
<string name="todost">TODOST</string> <string name="todost">TODOST</string>
<string name="tv_xlt_img_video_upsj">上传时间:</string> <string name="tv_xlt_img_video_upsj">上传时间:</string>
<string name="whp_delete">删除</string> <string name="whp_delete">删除</string>
<string name="permission_name_call_log">one hundred</string>
</resources> </resources>

Loading…
Cancel
Save