我试过下面的代码,但它在 UI 中没有反映任何东西,我在这里遗漏了什么?
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            loadUi()
        }
    }
    @Composable
    fun loadUi() {
        CraneWrapper {
            MaterialTheme {
                Image(
                    (ResourcesCompat.getDrawable(
                        resources,
                        R.mipmap.ic_launcher,
                        null
                    ) as BitmapDrawable).bitmap
                )
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud) 我的Windows 7安装会自动尝试配对报价并且工作非常糟糕.例如,当我在单词没有任何反应之前按下引号键时,但是当我将光标移动到单词的结尾并再次按下引号键时,两个引号都会在单词后面插入.基本上我无法插入一个引用,这是非常烦人的.
它是一个Windows功能,因为它发生在所有程序中.
我该如何禁用它?
我使用LeScanCallback(不能使用更新的扫描方法,因为我正在为api 18开发.不重要,因为android 5.0+ apis不提供此功能)以检测何时检测到附近的BLE设备:
private BluetoothAdapter.LeScanCallback bleCallback = new BluetoothAdapter.LeScanCallback() {
    @Override
    public void onLeScan(BluetoothDevice bluetoothDevice, int i, byte[] bytes) {
        discoveredDevices.add(bluetoothDevice);
    }
};
Run Code Online (Sandbox Code Playgroud)
我没有与设备配对或连接,因为这不是必需的,我只是想看看附近有哪些设备.
我正在尝试提供一项服务,每隔5分钟左右,就会调用一个网络服务器来更新当时附近的设备.
棘手的部分是Android设备将移动,所以现在附近的蓝牙设备可能不会在5分钟内.在那种情况下,我需要将其删除discoveredDevices.
理想情况下,我希望在蓝牙设备处于范围之前接收回叫,但现在不再.但是这个回调不存在.
(我知道android.bluetooth.device.action.ACL_CONNECTED和android.bluetooth.device.action.ACL_DISCONNECTED广播,但这些是你连接到蓝牙设备,我不想要.)
一个选项是每隔5分钟进行一次新的扫描,但是你无法判断所有附近的设备何时被发现,所以你必须进行定时扫描,例如扫描5秒然后将收集的数据发送到网络服务.
这听起来很脏并且有风险,因为您无法确定所有附近的设备是否在规定的时间内被发现,因此我非常希望避免这样做.
还有另一种方法吗?
编辑
 
某些设备会持续报告附近蓝牙设备的发现,即使它们之前已经被发现过.如果该功能是通用的,我可以解决我的问题,但这是特定于设备的.
例如,我的手机的蓝牙适配器只能发现附近的设备一次.我测试过的其他一些设备不断报告相同的附近设备,但不是所有设备都这样,所以我不能不依赖它.
请考虑以下代码片段:
public static Object o = new Object();
public static Callable x1() {
    Object x = o;
    return () -> x;
}
public static Callable x2() {
    return () -> o;
}
Run Code Online (Sandbox Code Playgroud)
方法x2()将始终返回相同的lamba对象,而x1()始终会创建新的对象:
    System.out.println(x1());
    System.out.println(x1());
    System.out.println(x2());
    System.out.println(x2());
Run Code Online (Sandbox Code Playgroud)
会打印出这样的东西:
TestLambda$$Lambda$1/821270929@4a574795
TestLambda$$Lambda$1/821270929@f6f4d33
TestLambda$$Lambda$2/603742814@7adf9f5f
TestLambda$$Lambda$2/603742814@7adf9f5f
Run Code Online (Sandbox Code Playgroud)
哪里(在JVM规范中我猜?)是描述了这种lambda重用规则?JVM如何确定重用与否?
我使用像素与最新的Android 8.1.0更新.
我正面临与BLE广告扫描有关的问题.每当我关闭屏幕(即按下电源按钮)时,我的扫描将停止.它会在打开屏幕后立即重启.
我查看了BLE的最新代码.谷歌新推出此功能(参考链接).
有没有办法跳过这部分,我的意思是扫描不应该停止,无论屏幕打开或关闭.
我检查了文件long= int64已范围超过900,000,000,000,000
这是我的代码:
int r = 99;
long test1 = r*r*r*r*r;
Run Code Online (Sandbox Code Playgroud)
在运行时它给了我919,965,907而不是正确的9,509,900,499.
另一个考验
long test2 = 99*99*99*99*99;
Run Code Online (Sandbox Code Playgroud)
它拒绝编译,说整数溢出.
但如果我这样做
long test3 = 10100200300;
Run Code Online (Sandbox Code Playgroud)
这很好用.
(int)(33.46639 * 1000000) 回报 33466389
为什么会这样?
angular的文档说,为了在控制器被销毁时执行清理代码,应该在范围内注册$ destroy事件.
$scope.$on("$destroy", function() { ... } );
Run Code Online (Sandbox Code Playgroud)
但是,当您使用controllerAs语法时,您无权访问$ scope.你如何注册$ destroy事件?
我的数据库是MySql 5.6.
我想使用CURRENT_TIMESTAMP作为默认值,属性类型为TIMESTAMP(3).
但我得到错误:
错误1067(42000):"已更新"的默认值无效
我认为这是因为CURRENT_TIMESTAMP只有第二精度.
如何将当前时间设置为timestamp带小数部分的默认值?