其他、孤岛页、临时(Temp)、过时、废弃等
implementation("org.jmdns:jmdns:3.6.0")
implementation("org.slf4j:slf4j-jdk-platform-logging:2.0.16")
implementation("org.slf4j:slf4j-jdk14:2.0.16")
String type = "_workstation._tcp.local.";
android.net.wifi.WifiManager wifi =
(android.net.wifi.WifiManager)
getSystemService(android.content.Context.WIFI_SERVICE);
var lock = wifi.createMulticastLock("HeeereDnssdLock");
lock.setReferenceCounted(true);
lock.acquire();
new Thread(() -> {
try {
JmDNS jmdns = JmDNS.create(InetAddress.getLocalHost());
jmdns.addServiceListener(type, new ServiceListener() {
@Override
public void serviceAdded(ServiceEvent event) {
System.out.println("Service added: " + event.getInfo());
}
@Override
public void serviceRemoved(ServiceEvent event) {
System.out.println("Service removed: " + event.getInfo());
}
@Override
public void serviceResolved(ServiceEvent event) {
System.out.println("Service resolved: " + event.getInfo());
}
});
} catch (IOException e) {
throw new RuntimeException(e);
}
}).start();
技术
Android:
Android 8+ (26)限制了隐式广播和前台Service必须startForegroundService+通知提醒
应用不可见数分钟后会被系统认定为后台服务,故强制停止非前台Service.stopSelf()
通过startForegroundService启动的前台服务则能正常启动Activity
Godot模板版本30.0.3;
Android 7+/24+系统支持v2签名;支持“多窗口”和“快速设置”和“Vulkan”
Android 8.0(支持“画中画 (PIP) ”和“蓝牙低功耗 (BLE) 5.0”及“WLAN 感知/Wi-Fi Aware”) /minSdk 26 及 targetSdk 30
Android 8.1+ 支持跨进程超过1M大小的SharedMemory
Android 9+类DisplayCutout支持屏幕缺口布局,可通过模拟器模拟。
Android 9+ StrongBox Keymaster:
https://developer.android.com/training/articles/keystore#HardwareSecurityModule
Android 9+判断定位 var lm = (LocationManager) context.getSystemService(
Context.LOCATION_SERVICE); lm.isLocationEnabled();
废弃了Settings.Secure.LOCATION_MODE
AGP 8.0+报错"Missing classes..."解决:
-dontwarn java.**
-dontwarn javax.**
public static boolean canDrawOverlaysForScreenCaptureIntent(Context c) {
var appOpsMgr = (AppOpsManager) c.getSystemService(Context.APP_OPS_SERVICE);
if (appOpsMgr == null) {
return false;
}
var op = AppOpsManager.permissionToOp(Manifest.permission.SYSTEM_ALERT_WINDOW);
if (op == null) {
return false;
}
// 29+ 过时的 checkOpNoThrow 换为 unsafeCheckOpNoThrow
int mode = appOpsMgr.checkOpNoThrow(op, android.os.Process.myUid(), c.getPackageName());
System.out.println("mode - " + mode); // MODE_DEFAULT=3(未处理时)、MODE_ERRORED=2(主动不允许时)
return mode == AppOpsManager.MODE_DEFAULT || Settings.canDrawOverlays(c);
}
其他
xcode自动签发原理机制 - https://whlcj.github.io/posts/2023/xcode_sign/
详解xcode自动签发 - https://www.cnblogs.com/xionda/p/15391737.html
https://www.cnblogs.com/iOS-mt/p/5454287.html
无感刷新token - https://www.bilibili.com/video/BV12A23YYEyr/
https://www.51cto.com/article/786398.html https://happyjayxin.medium.com/前端如何無感刷新-token-35591a075411