192.168。109.78 1883
可以使用横屏下的计算器。用()代替*#。。比如说你的*#*#2846579#*#*可以使用计算器的()()2846579()()
相机相关api需要升级
布局文件嵌套比较多
签名
../../static/images/news.png
C:\Program Files\Java\jdk-11.0.1\bin>jarsigner -verbose -keystore D:\code\edus_parents\appBuild\platforms\android\minivision.jks -signedjar "F:\WeChat Files\wztxyxw\Files\OPPOSignVerify\OppoSignVerify_signed.apk" "F:\WeChat Files\wztxyxw\Files\OPPOSignVerify\OppoSignVerify.apk" minivision
latitude=0.0#longitude=0.0#province=#coordType=GCJ02#city=#district=#cityCode=#adCode=#address=#country=#road=#poiName=#street=#streetNum=#aoiName=#poiid=#floor=#errorCode=7#errorInfo=KEY错误#locationDetail=auth fail:INVALID_USER_SCODE#SHA1AndPackage#4C:9E:6C:1A:FD:49:1A:E1:AB:D9:C8:B7:A1:77:55:16:49:0A:75:78:com.minivision.kgparent#gsid#953dd18c807d69d0dbe57f564963d8f6#csid#7562e644c65b408aaf177704a8ddca29#0701#description=#locationType=0
Edit Configuration -> Modify options -> short command line
gradle clean assembleRelease
apk反编译
https://blog.csdn.net/gqg_guan/article/details/133949578
工具 F:\Download\dex2jar-2.0 F:\apktool F:\Download\jd-gui-windows-1.6.6
//分享回调监听
oks.setCallback(new PlatformActionListener() {
@Override
public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {
}
@Override public void onError(Platform platform, int i, Throwable throwable) {
throwable.getMessage();
throwable.getStackTrace().toString();
}
@Override public void onCancel(Platform platform, int i) {
}
});
WebView.setWebContentsDebuggingEnabled(true);//web调试
宝贝动态 时间格式 服务器处理
MediaScannerConnection msc = new MediaScannerConnection(KinderGartenApplication.getInstance().getApplicationContext(), null);
msc.connect();
msc.scanFile(currentFile.getPath(), "image/jpeg");
%1$d/%2$d
String key = System.currentTimeMillis() + filePath.substring(filePath.lastIndexOf("."));//保留“.”
String key = System.currentTimeMillis() + filePath.substring(filePath.lastIndexOf(".") + 1);//不保留“.”
//测试环境
yuan心:
家长端:projectId=7e21285f8cad4a10910d77897f28fcf5
yuan心:
教师端:projectId=b5dd01f0e28e4a54ba737ed9a3709b52
//生产环境
家长端:projectId=3db5fc93243a4fe281c4e597445abda3
教师端:projectId=c51b70da6f8b44bba18ebd1587f3f412
Matrix matrix = new Matrix();
//镜子效果
matrix.setScale(-1, 1);
matrix.postTranslate(mBitmap.getWidth(), 0);
mBitmap = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(), mBitmap.getHeight(), matrix, true);
家长版签名:
b5b698d8195b7d39d4eea32f985baaea
webview.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
// 不要使用super,否则有些手机访问不了,因为包含了一条 handler.cancel()
// super.onReceivedSslError(view, handler, error);
// 接受所有网站的证书,忽略SSL错误,执行访问网页
handler.proceed();
}
}
视频码率与质量成正比,体积也随之变大
gradlew processDebugManifest --stacktrace
gradlew assembleRelease
动画开始前,设置 LayerType 为 LAYER_TYPE_HARDWARE(代码为官方示例)
1
2
view.setLayerType(View.LAYER_TYPE_HARDWARE, null);
ObjectAnimator.ofFloat(view, "rotationY", 180).start();
动画结束的时候,重新设置为LAYER_TYPE_NONE(代码为官方示例)
dialogfragment 消失后键盘无法消失问题
dialogfragment 消失时在onDissmiss方法里回调告知所在的Activity,
在activity里加一个0dp的edittext,让edittext postDelayed 50ms的方式关闭键盘
就是关闭键盘的任务不要在dialog中执行,交给activity执行
1
2
3
4
5
6
7
8
9
view.setLayerType(View.LAYER_TYPE_HARDWARE, null);
ObjectAnimator = ObjectAnimator.ofFloat(view, "rotationY", 180);
.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd( animation) {
view.setLayerType(View.LAYER_TYPE_NONE, null);
}
});
.start();
mTextToSpeech = new TextToSpeech(MainActivity.this, new TextToSpeech.OnInitListener() {
@Override
public void onInit(int i) {
if (i == TextToSpeech.SUCCESS) {
int result = mTextToSpeech.setLanguage(Locale.ENGLISH);
if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
} else {
mTextToSpeech.speak("支持原生中文语音播报功能", TextToSpeech.QUEUE_FLUSH, null);
}
}
}
});
Androidx迁移 解决glide无法编译问题 annotationProcessor externalAndroidAnno
adb -s 设备号 logcat -s xskj 指定设备查信息
adb -s 1912A46900600027 install F:\general\release\MINI_A_GME_IC_N_V2.3.1.11.apk
adb pull /sdcard/DeviceMonitorLog/com.minivision.pad_tb_cloud/ ./
adb logcat -v time >test27.txt
adb install -r F:\general\release\MINI_A_GME_IC_N_V2.3.1.11.apk //覆盖安装
gradlew assembleRelease //打release包
gradlew clean build uploadArchives //上传aar到maven库
adb shell getprop ro.product.cpu.abi 查看ndk abifilter
adb shell am force-stop com.minivision.pad_tb_cloud
adb shell
top -m 20 -t 前20cpu
卸载系统应用 文件管理器
F:\>adb shell
root@TPS469:/ # pm list packages | grep com.android.rk
package:com.android.rk
package:com.android.rk.mediafloat
root@TPS469:/ # pm uninstall -k --user 0 com.android.rk
Success
root@TPS469:/ # pm uninstall -k --user 0 com.android.rk.mediafloat
Success
root@TPS469:/ #
kotlin
this@AboutActivity 内部类this的用法
单例的7种写法
http://www.blogjava.net/kenzhh/archive/2013/03/15/357824.html
第七种(双重校验锁):
1 public class Singleton {
2 private volatile static Singleton singleton;
3 private Singleton (){}
4 public static Singleton getSingleton() {
5 if (singleton == null) {
6 synchronized (Singleton.class) {
7 if (singleton == null) {
8 singleton = new Singleton();
9 }
10 }
11 }
12 return singleton;
13 }
14 }
15
F:\WeChat Files\WeChat Files\wztxyxw\FileStorage\File\2020-07\最新版配置工具V2.2.2.06\VguangConfigV2.2.2.06
F:\Download\VguangConfig2.3.19.3\VguangConfig2.3.19.3
保存字符串到txt文件
try {
FileWriter fileWriter = new FileWriter(Environment.getExternalStorageDirectory().getPath() + "/takePic/" + "test.txt");
fileWriter.write(result);
fileWriter.close();
} catch (Exception e) {}
adb shell dmesg > dmesg1710.txt 获取dmesg的命令
https://glm-test.glodon.com/doc/wiki/ 广联达接口文档
刷机切换 adb reboot loader
刷机工具 E:\AndroidTool_Release_v2.65
adb push 固件 /sdcard/Download
gradle 缓存文件位置 C:\Users\yangxingwang\.gradle\caches\modules-2\files-2.1
getprop |grep 3288w 判断是否3288W
//文件拷贝
public static String copy(File source, File target) {
// FileInputStream fileInputStream = null;
// FileOutputStream fileOutputStream = null;
// try {
// fileInputStream = new FileInputStream(source);
// fileOutputStream = new FileOutputStream(target);
// byte[] buffer = new byte[1024];
// while (fileInputStream.read(buffer) > 0) {
// fileOutputStream.write(buffer);
// }
// } catch (Exception e) {
// e.printStackTrace();
// } finally {
// try {
// if (fileInputStream != null) {
// fileInputStream.close();
// }
// if (fileOutputStream != null) {
// fileOutputStream.close();
// }
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
//
// return target.getPath();
// }
192.168.99.250 网络认证
深圳模拟注销
jsonObject.put("deviceId", AESSymmtricEncrypt.encrypt("ssitSmar20220921651382", SpUtils.getKey(SpUtils.APP_SECRET)));
windows 系统过期激活 E:\KMSAuto Net 2016 v1.5.3 Portable 汉化版
app_secret
深圳物联网平台添加后 1.启用 2.勾选该设备 “其他批量操作”->激活选中设备
删除手势密钥
进入/data/system目录下,password.key是数字或混合密码,gesture.key是手势密码,命令rm -rf password.key或rm -rf gesture.key删除文件即可。重启设备
打印26个字母
fun main() {
val thirdArray = Array<String>(26){i->('a'+i).toString()}
println(thirdArray.joinToString(","))
}
10.30.20.220:8848 测试环境
//数据返回时用于返回相对路径
@JsonSerialize(using = UrlConvertSerializer.class)
日志查看 cd /app
ll 查看所有目录
tail -n 100 am-app-scm.log 最后100行数据
grep '关键词' am-app-scm.log -B10 关键词前10行 -A10 后10行
maven -> package 打包jar
nohup java -jar am-app-migration-1.2.0-SNAPSHOT.jar & 后台运行jar包
查程序进程
kill -9 32401 杀死进程
mongo聚合查询时 需要排序分组时,排序的字端必须在group中也要有
https://zhuanlan.zhihu.com/p/258753586 stream使用
List<String> phones = gridUserInfos.stream().map(GridUserInfo::getPhone).distinct().collect(Collectors.toList()); 注意distinct()去重,否则会有相同的数据
Map<String, User> map = userList.stream().collect(Collectors.toMap(User::getName, pojo -> pojo, (k1, k2) -> k1)); 重复的保留第一个
supervisorctl status 查询服务器是否运行正常
supervisorctl start am-app-visitor 启动服务
t_p_org_person 中的orgid是门牌组织id
居民检索
不传小区 根据网格员权限查所有小区
传小区 根据小区orgid查orgcode 然后 拼接查询orgcode + % 查楼栋 再拼接查 单元 再拼接查 门牌 最后查人
传楼栋 拼接查 单元 再拼接查 门牌 最后查人
t_p_org_person 中的orgid是门牌组织id
getOrgTree(parentOrgId, heightFrom, heightTo)
parentOrgId的level 与 heightFrom 的差最多只能是1
heightTo 到哪一个层级,该层级下的children的size就是0 比如heightto=7 小区 那就只能查到小区,他的children的size=0
openjdk 就是360加固助手
xxljob归档
1,执行xxljob任务
2,mysql中 xxl_job -> xxl_job_info 找到刚刚执行的那条数据
3,右键->生成sql->insert->复制sql语句,第一个id去掉,后面的id换成 (SELECT t.id FROM xxl_job_group t WHERE t.app_name = 'am-app-ppm')
INSERT INTO xxl_job.xxl_job_info
(job_group, job_desc, add_time, update_time, author, alarm_email, schedule_type, schedule_conf, misfire_strategy, executor_route_strategy, executor_handler, executor_param, executor_block_strategy, executor_timeout, executor_fail_retry_count, glue_type, glue_source, glue_remark, glue_updatetime, child_jobid, trigger_status, trigger_last_time, trigger_next_time)
VALUES((SELECT t.id FROM xxl_job_group t WHERE t.app_name = 'am-app-sdm'), '定时生成走读生上午迟到记录', '2024-04-09 14:22:00', '2024-04-09 16:43:07', '杨幸旺', '', 'CRON', '0 36 11 * * ?', 'DO_NOTHING', 'ROUND', 'dealDayStudentMorningComeLate', '', 'SERIAL_EXECUTION', 0, 0, 'BEAN', '', 'GLUE代码初始化', '2024-04-09 14:22:00', '', 1, 1713152160000, 1713238560000);
允许应用后台运行
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
override fun onResume() {
super.onResume()
val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager
if (!powerManager.isIgnoringBatteryOptimizations(packageName)) {
binding.backLiveTv.text = "请允许应用在后台运行"
} else {
binding.backLiveTv.text = "已允许应用在后台运行"
}
}
private fun requestIgnoreBatteryOptimizations() {
try {
val intent = Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS)
intent.setData(Uri.parse("package:$packageName"))
startActivity(intent)
} catch (e: Exception) {
e.printStackTrace()
}
}